Feedback

Please leave feedback and comments. I am always interested to hear how people get on using these LScripts!

Friday 27 January 2017

LScript - Modeler_Offset


LScript (Modeler) to offset the position of selected point based on a the position of a second selected point.

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 - Offset

    Modeler_Offset.ls

*/

@version 2.2
@warnings
@script modeler
@name *Offset

    // Title
    sTitle = "*Offset";

    // Version
    sVersion = "v1.0";

    bDone = false; // Done

    nX,nY,nZ;
    vOffset;    

    ctrl_c0,ctrl_c1,ctrl_c2;
    ctrl_res0;

main
{
    // Selection - Point (DIRECT)
    selmode(DIRECT);
    iPointCount = pointcount();
    if(iPointCount < 2) error("Select two points.");

    editbegin();

      vOffset = pointinfo(points[1]) - pointinfo(points[2]);

    editend();

    nX = vOffset.x;
    nY = vOffset.y;
    nZ = vOffset.z;

    process(); // Process

    reqbegin(sTitle + " " + sVersion);

    // Reset
    ctrl_res0 = ctlbutton("Reset",50,"button_reset"); // Button Reset
    ctlsep();

    // Control    
    ctrl_c0 = ctldistance("X",nX);
    ctrl_c1 = ctldistance("Y",nY);
    ctrl_c2 = ctldistance("Z",nZ);

    // Developer
    ctlsep();
    ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");

    // Refresh
    ctlrefresh(ctrl_c0,"refresh");
    ctlrefresh(ctrl_c1,"refresh");
    ctlrefresh(ctrl_c2,"refresh");

    if (!reqpost())
    {
        // Cancel

        if(bDone){undo();} // Undo

        return;
    }
    else
    {
        // Ok

        if(!bDone || bChange) // Process
        {
        values(); // Values
        process(); // Process
        }

    }

    reqend();
}

refresh:value
{
    bChange = true; // Change
    values(); // Values
    process(); // Process
}

values
{
    nX = getvalue(ctrl_c0); // X
    nY = getvalue(ctrl_c1); // Y
    nZ = getvalue(ctrl_c2); // Z
}

button_reset
{
    setvalue(ctrl_c0,vOffset.x); // X
    setvalue(ctrl_c1,vOffset.y); // Y
    setvalue(ctrl_c2,vOffset.z); // Z
}

process
{
    // Undo
    if(bDone){undo();}
    undogroupbegin();

    // Process

    // Selection - Point (DIRECT)
    selmode(DIRECT);
    iPointCount = pointcount();
    if(iPointCount < 2) error("Select two points.");

    editbegin();

      vPosition = pointinfo(points[2]);
      pointmove(points[1],vPosition + ); // Move point           

    editend();

    // Undo
    undogroupend();

    bChange = false; // Change

    // Done
    bDone = true;
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs