Feedback

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

Tuesday 13 September 2011

LScript - Master_AutoRefresh

LScript (Layout) to auto refreshes Layout while animating to keep many scripts uptodate in realtime. It is very useful and required by many scripts inorder for them to process correctly.

Compatible with Newtek LightWave 9.6 and above.

// LScript Master Class - www.StephenCulley.co.uk
//
// web   address: http://www.stephenculley.co.uk
// email address: email@stephenculley.co.uk

/* 
    LScript Master Class - Auto Refresh

    Master_AutoRefresh.ls

*/

@version 2.2
@warnings
@script master
@name *Auto Refresh

    // Title
    sTitle = "*Auto Refresh";

    // Version
    sVersion = "v1.0";

create
{
    setdesc(sTitle);
}

process: event, command
{
    if(event == COMMAND)
    Refresh();
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs

LScript - Master_MotionBaker


LScript (Layout) used to bake motion in many of my dynamic scripts such as used in Slider and Wheel & Axle.

Changes

  • Added "redraw" to preview calculations in realtime
  • Added Lock / Unlock
  • Added Bake Keys

Compatible with Newtek LightWave 9.6 and above.

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

/*  
    LScript Master - Motion Baker

    Master_MotionBaker.ls

*/

@version 2.2
@warnings
@script master
@name *Motion Baker

    // Title
    sTitle = "*Motion Baker";

    // Version
    sVersion = "v1.0";

    bRedraw = false; // Redraw
    iParent = 0; // Parent

create
{
    setdesc(sTitle);

    // Comring
    comringattach("*MotionBaker","comring_motionbaker");
}

destroy
{
    // Comring
    comringdetach("*MotionBaker");
}

flags
{
    return(SCENE);
}

// COMRING

comring_motionbaker:event,data
{
    sMessage = comringdecode(@"s:200"@,data);

    if(strlower(sMessage) == "*parent") // Parent
        {
        if(iParent < event) iParent = event;
        }
}

process: event, command
{
}

load: what,io
{
    if(what == SCENEMODE)   // processing an ASCII scene file
    {
        bRedraw = io.read().asInt(); // Redraw
    }
}

save: what,io
{
    if(what == SCENEMODE)
    {
        io.writeln(bRedraw); // Redraw
    }
}

options
{
    if(reqisopen())
        {
        reqend();
        return;
        }

    reqbegin(sTitle + " " + sVersion);

    reqsize(276,148);

    ctrl_0 = ctlbutton("Calculate",50,"button_calculate"); // Button Calculate
    ctrl_1 = ctlcheckbox("Redraw",bRedraw); // Redraw

    ctrl_2 = ctlbutton("Disable",50,"button_disable"); // Button Disable
    ctrl_3 = ctlbutton("Reset",50,"button_reset"); // Button Reset
    ctrl_4 = ctlbutton("Write",50,"button_write"); // Button Write
    ctrl_5 = ctlbutton("Read",50,"button_read"); // Button Read

    ctrl_6 = ctlsep();
    ctrl_7 = ctlbutton("Bake Keys",50,"button_bake"); // Button Bake
    ctrl_8 = ctlbutton("Lock All",50,"button_lock"); // Button Lock
    ctrl_9 = ctlbutton("Unlock All",50,"button_unlock"); // Button Unlock


    // Developer
    ctrl_dev0 = ctlsep();
    ctrl_dev1 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk");
    
    ctlposition(ctrl_0,10,10,90,20);
    ctlposition(ctrl_1,10,32,90,20);
    ctlposition(ctrl_2,114,10,75,20);
    ctlposition(ctrl_3,191,10,75,20);
    ctlposition(ctrl_4,114,32,75,20);
    ctlposition(ctrl_5,191,32,75,20);

    ctlposition(ctrl_6,0,60,276,4);
    ctlposition(ctrl_7,10,70,90,20);
    ctlposition(ctrl_8,114,70,75,20);
    ctlposition(ctrl_9,191,70,75,20);

    ctlposition(ctrl_dev0,0,98,276,4);
    ctlposition(ctrl_dev1,10,108,256,20);

    // Refresh
    ctlrefresh(ctrl_1,"refresh_c1"); // Redraw

    reqopen();
}

button_calculate // Calculate
{
    Scene = Scene();
    iFrame = (Scene.fps * Scene.currenttime).asInt(); // Current frame

    // Parent
    iParent = 0; // Parent
    sMessage = "parent";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    GoToFrame(Scene.previewstart);
    if(iParent <= 0)
        {
        GoToFrame(iFrame); // Restore current frame    
        return; // Exit if none available
        }

    // Reset
    sMessage = "reset";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);

    GoToFrame(Scene.previewstart);

    // Read
    sMessage = "read";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);

    for(f = Scene.previewstart;f <= Scene.previewend; f++)
        {

        for(p = 1; p <= iParent; p++)
            {
            // Write
            sMessage = "write";
            cMessage = comringencode(@"s:200"@,sMessage);
            comringmsg("*MotionBaker",p,cMessage);

            GoToFrame(f);

            // Read
            sMessage = "read";
            cMessage = comringencode(@"s:200"@,sMessage);
            comringmsg("*MotionBaker",p,cMessage);
            }

        if(bRedraw) RedrawNow(); // Redraw
        }

    GoToFrame(iFrame); // Restore current frame
    info("*Motion Baker calculated");
}

button_read // Read
{
    sMessage = "read";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    info("*Motion Baker set to read");
}

button_reset // Reset
{
    sMessage = "reset";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    info("*Motion Baker reset");
}

button_write // Write
{
    sMessage = "write";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    info("*Motion Baker set to write");
}

button_disable // Disable
{
    sMessage = "disable";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    info("*Motion Baker disabled");
}

button_bake // Bake
{
    sMessage = "bake";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    info("*Motion Baker keys baked to channels");
}

button_lock // Lock
{
    sMessage = "lock";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    info("*Motion Baker set to locked");
}

button_unlock // Unlock
{
    sMessage = "unlock";
    cMessage = comringencode(@"s:200"@,sMessage);
    comringmsg("*MotionBaker",0,cMessage);
    info("*Motion Baker set to unlocked");
}

refresh_c1:value // Redraw
{
    bRedraw = value;
}
All scripts available at my Google Drive at
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs