LScript (Modeler) to produces a 2 point polychain between two selected points.
Compatible with Newtek LightWave 9.6 and above.
// LScript Modeler - www.StephenCulley.co.uk
//
// web address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk
/*
LScript Modeler - 2PointPolyChain
Modeler_2PointPolyChain.ls
*/
@version 2.2
@warnings
@script modeler
@name *2 Point Poly Chain
// Title
sTitle = "*2 Point Poly Chain";
// Version
sVersion = "v1.0";
ctrl_c0;
main
{
// Recall
iNumber = recall("iNumber",10);
reqbegin(sTitle + " " + sVersion);
// Reset
ctrl_res0 = ctlbutton("Reset",50,"button_reset"); // Button Reset
ctlsep();
// Control
ctrl_c0 = ctlinteger("Number",iNumber);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
return if !reqpost();
iNumber = getvalue(ctrl_c0);
// Store
store("iNumber",iNumber);
// Selection - Point (GLOBAL)
selmode(GLOBAL);
iPointCountBefore = pointcount();
// Selection - Point (DIRECT)
selmode(DIRECT);
iPointCount = pointcount();
if(iPointCount <= 1) error("Select two points.");
if(iPointCount > 2) error("Select two points.");
moninit(iNumber,"Processing..."); // Progress Monitor
editbegin();
vStart = pointinfo(points[1]);
vEnd = pointinfo(points[2]);
nDistance = distance3D(vStart,vEnd);
if(iNumber <> 0.0){vOffset = (vEnd - vStart) / iNumber;}else{vOffset = <0.0,0.0,0.0>;}
for(n = 1; n <= iNumber; n++)
{
aPoints[1] = addpoint(vStart + (vOffset * (n - 1)));
aPoints[2] = addpoint(vStart + (vOffset * n));
addpolygon(aPoints);
monstep(); // Progress Monitor
}
editend();
monend(); // Progress Monitor
// Selection - Point (GLOBAL)
selmode(GLOBAL);
iPointCountAfter = pointcount();
if((iPointCountAfter - iPointCountBefore) > 0)
{
for(s = 1; s <= (iPointCountAfter - iPointCountBefore) ; s++){aSelection[s] = s + iPointCountBefore;}
selmode(USER);
selpoint(SET, POINTNDX, aSelection);
mergepoints(0.0); // Merge Points
}
}
button_reset
{
setvalue(ctrl_c0,10); // Number
}
// VECTOR 3D
distance3D: v1, v2 // n
{
// Vector
return(sqrt(((v2.x - v1.x) * (v2.x - v1.x)) +
((v2.y - v1.y) * (v2.y - v1.y)) +
((v2.z - v1.z) * (v2.z - v1.z))));
}
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
Thanks for this handy tool, it allows me a comfortable way to perform several advanced techniques in both a flexible and efficient manner.
ReplyDelete