Feedback

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

Friday 10 June 2011

LScript - Motion_Limit


LScript (Layout) to min/max a selected channel which can be applied after any motion plugin or script.

Changes

  • Channels - X,Y,Z,H,P,B,SX.SY,SZ
  • Minimum value
  • Maximum value

Compatible with Newtek LightWave 9.6 and above.

// LScript Item Animation - www.StephenCulley.co.uk
//
// web   address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk

/*  
    LScript Item Animation - Limit

    Motion_Limit.ls

*/

@version 2.2
@warnings
@script motion
@name *Limit

    // Title
    sTitle = "*Limit";

    // Version
    sVersion = "v1.0";

    aChannel = @"X","Y","Z","H","P","B","SX","SY","SZ"@; 
    iChannel = 1;
    nMin = 0.0;
    nMax = 0.0;

create
{
    setdesc(sTitle + " - Channel " + aChannel[iChannel] + " Min " + nMin + " Max " + nMax);
}

destroy
{
}

process: ma, frame, time
{     
    // Variables
    vPosition = ma.get(POSITION,time);
    vRotation = ma.get(ROTATION,time);
    vScaling = ma.get(SCALING,time);

    // Channel
    if(iChannel == 1)vPosition.x = clip(nMin,nMax,vPosition.x);
    if(iChannel == 2)vPosition.y = clip(nMin,nMax,vPosition.y);
    if(iChannel == 3)vPosition.z = clip(nMin,nMax,vPosition.z);
    if(iChannel == 4)vRotation.x = clip(nMin,nMax,vRotation.x);
    if(iChannel == 5)vRotation.y = clip(nMin,nMax,vRotation.y);
    if(iChannel == 6)vRotation.z = clip(nMin,nMax,vRotation.z);
    if(iChannel == 7)vScaling.x = clip(nMin,nMax,vScaling.x);
    if(iChannel == 8)vScaling.y = clip(nMin,nMax,vScaling.y);
    if(iChannel == 9)vScaling.z = clip(nMin,nMax,vScaling.z);

// ma

  ma.set(POSITION,vPosition);
  ma.set(ROTATION,vRotation);
  ma.set(SCALING,vScaling);

}

// CLIP

clip: min,max,n
{
    if(n < min) n = min;
    if(n > max) n = max;
    return(n);
}

load: what,io
{
    if(what == SCENEMODE)   // processing an ASCII scene file
    {
        iChannel = io.read().asInt();
        nMin = io.read().asNum();
        nMax = io.read().asNum();
        setdesc(sTitle + " - Channel " + aChannel[iChannel] + " Min " + nMin + " Max " + nMax);
    }
}

save: what,io
{
    if(what == SCENEMODE)
    {
        io.writeln(iChannel);
        io.writeln(nMin);
        io.writeln(nMax);
    }
}

options
{
    reqbegin(sTitle + " " + sVersion);

    ctrl_c0 = ctlchoice("Channel",iChannel,@"X","Y","Z","H","P","B","SX","SY","SZ"@);
    ctrl_c1 = ctlnumber("Min",nMin);
    ctrl_c2 = ctlnumber("Max",nMax);

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

    return if !reqpost();

    iChannel = getvalue(ctrl_c0);
    nMin = getvalue(ctrl_c1);
    nMax = getvalue(ctrl_c2);
    setdesc(sTitle + " - Channel " + aChannel[iChannel] + " Min " + nMin + " Max " + nMax);

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

No comments:

Post a Comment