LScript (Modeler) to align points based on last or previous selected or average 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 - Converge
Modeler_Converge.ls
*/
@version 2.2
@warnings
@script modeler
@name *Converge
// Title
sTitle = "*Converge";
// Version
sVersion = "v1.0";
ctrl_c0, ctrl_c1, ctrl_c2, ctrl_c3;
main
{
// Store
bAxisX = recall("bAxisX",true);
bAxisY = recall("bAxisY",false);
bAxisZ = recall("bAxisZ",false);
iSelected = recall("iSelected",1);
reqbegin(sTitle + " " + sVersion);
// Reset
ctrl_res0 = ctlbutton("Reset",50,"button_reset"); // Button Reset
ctlsep();
// Control
ctrl_c0 = ctlcheckbox("X", bAxisX);
ctrl_c1 = ctlcheckbox("Y", bAxisY);
ctrl_c2 = ctlcheckbox("Z", bAxisZ);
ctrl_c3 = ctlchoice("Selected",iSelected,@"First","Last","Average"@);
// Developer
ctlsep();
ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
return if !reqpost();
bAxisX = getvalue(ctrl_c0); // X
bAxisY = getvalue(ctrl_c1); // Y
bAxisZ = getvalue(ctrl_c2); // Z
iSelected = getvalue(ctrl_c3); // Selected
// Store
store("bAxisX",bAxisX); // X
store("bAxisY",bAxisY); // Y
store("bAxisZ",bAxisZ); // Z
store("iSelected",iSelected);
// Selection - Point (DIRECT)
selmode(DIRECT);
iPointCount = pointcount();
if(iPointCount <= 1) error("None or not enough points selected.");
undogroupbegin(); // Undo
moninit(iPointCount,"Processing..."); // Progress Monitor
editbegin();
if(iSelected == 1) vConvergePoint = pointinfo(points[1]); // First
if(iSelected == 2) vConvergePoint = pointinfo(points[iPointCount]); // Last
if(iSelected == 3) // Average
{
vConvergePoint = <0 .0="">;
for(iCurrentPoint = 1; iCurrentPoint <= iPointCount; iCurrentPoint++)
{
vConvergePoint += pointinfo(points[iCurrentPoint]);
}
// Resize by points
vConvergePoint *= 1 / (iPointCount - 1);
}
for(iCurrentPoint = 1; iCurrentPoint <= iPointCount; iCurrentPoint++)
{
vPoint = pointinfo(points[iCurrentPoint]);
if(bAxisX) vPoint.x = vConvergePoint.x; // X
if(bAxisY) vPoint.y = vConvergePoint.y; // Y
if(bAxisZ) vPoint.z = vConvergePoint.z; // Z
pointmove(points[iCurrentPoint],vPoint); // Move point
monstep(); // Progress Monitor
}
editend();
undogroupend(); // Undo
}
button_reset
{
setvalue(ctrl_c0,true); // X
setvalue(ctrl_c1,false); // Y
setvalue(ctrl_c2,false); // Z
setvalue(ctrl_c3,1); // Selected
}0>
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
No comments:
Post a Comment