LScript (Layout) to make one selected channel drive another selected channel.
Changes
- Input Channels - X,Y,Z,H,P,B,SX.SY,SZ
- Output Channels - X,Y,Z,H,P,B,SX.SY,SZ
- Operators - -,+,Abs
- Channel "multiplier" added
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 - Channel Motion_Channel.ls */ @version 2.2 @warnings @script motion @name *Channel // Title sTitle = "*Channel"; // Version sVersion = "v1.0"; ChannelItem = nil; ChannelItemName = "nil"; iInputChannel = 1; iOutputChannel = 1; iOperator = 1; nMultiplier = 1.0; create { setdesc("*Channel - Select Item"); info("Channel - Select Item"); } destroy { } process: ma, frame, time { // Variables vPosition = ma.get(POSITION,time); vRotation = ma.get(ROTATION,time); vScaling = ma.get(SCALING,time); nInput = 0.0; if(ChannelItemName != "nil") {ChannelItem = Mesh(ChannelItemName); ChannelItemName = "nil";} if(ChannelItem) { setdesc(sTitle + " - " + ChannelItem.name); vChannelPosition = ChannelItem.getPosition(time); vChannelRotation = ChannelItem.getRotation(time); vChannelScaling = ChannelItem.getScaling(time); } else { setdesc(sTitle + " - Select Item"); vChannelPosition = <0,0,0>; vChannelRotation = <0,0,0>; vChannelScaling = <0,0,0>; } // Input Channel if(iInputChannel == 1) nInput = vChannelPosition.x; else if(iInputChannel == 2) nInput = vChannelPosition.y; else if(iInputChannel == 3) nInput = vChannelPosition.z; else if(iInputChannel == 4) nInput = vChannelRotation.x; else if(iInputChannel == 5) nInput = vChannelRotation.y; else if(iInputChannel == 6) nInput = vChannelRotation.z; else if(iInputChannel == 7) nInput = vChannelScaling.x; else if(iInputChannel == 8) nInput = vChannelScaling.y; else if(iInputChannel == 9) nInput = vChannelScaling.z; // Multiplier nInput *= nMultiplier; // Output // + if(iOperator == 1) { if(iOutputChannel == 1) vPosition.x += nInput; else if(iOutputChannel == 2) vPosition.y += nInput; else if(iOutputChannel == 3) vPosition.z += nInput; else if(iOutputChannel == 4) vRotation.x += nInput; else if(iOutputChannel == 5) vRotation.y += nInput; else if(iOutputChannel == 6) vRotation.z += nInput; else if(iOutputChannel == 7) vScaling.x += nInput; else if(iOutputChannel == 8) vScaling.y += nInput; else if(iOutputChannel == 9) vScaling.z += nInput; } // - else if(Operator == 2) { if(iOutputChannel == 1) vPosition.x -= nInput; else if(iOutputChannel == 2) vPosition.y -= nInput; else if(iOutputChannel == 3) vPosition.z -= nInput; else if(iOutputChannel == 4) vRotation.x -= nInput; else if(iOutputChannel == 5) vRotation.y -= nInput; else if(iOutputChannel == 6) vRotation.z -= nInput; else if(iOutputChannel == 7) vScaling.x -= nInput; else if(iOutputChannel == 8) vScaling.y -= nInput; else if(iOutputChannel == 9) vScaling.z -= nInput; } // Abs else if(iOperator == 3) if(nMultiplier >= 0) { if(iOutputChannel == 1) vPosition.x += abs(nInput); else if(iOutputChannel == 2) vPosition.y += abs(nInput); else if(iOutputChannel == 3) vPosition.z += abs(nInput); else if(iOutputChannel == 4) vRotation.x += abs(nInput); else if(iOutputChannel == 5) vRotation.y += abs(nInput); else if(iOutputChannel == 6) vRotation.z += abs(nInput); else if(iOutputChannel == 7) vScaling.x += abs(nInput); else if(iOutputChannel == 8) vScaling.y += abs(nInput); else if(iOutputChannel == 9) vScaling.z += abs(nInput); } else { if(iOutputChannel == 1) vPosition.x -= abs(nInput); else if(iOutputChannel == 2) vPosition.y -= abs(nInput); else if(iOutputChannel == 3) vPosition.z -= abs(nInput); else if(iOutputChannel == 4) vRotation.x -= abs(nInput); else if(iOutputChannel == 5) vRotation.y -= abs(nInput); else if(iOutputChannel == 6) vRotation.z -= abs(nInput); else if(iOutputChannel == 7) vScaling.x -= abs(nInput); else if(iOutputChannel == 8) vScaling.y -= abs(nInput); else if(iOutputChannel == 9) vScaling.z -= abs(nInput); } // ma ma.set(POSITION,vPosition); ma.set(ROTATION,vRotation); ma.set(SCALING,vScaling); } load: what,io { if(what == SCENEMODE) // processing an ASCII scene file { ChannelItemName = io.read().asStr(); iInputChannel = io.read().asInt(); iOutputChannel = io.read().asInt(); iOperator = io.read().asInt(); nMultiplier = io.read().asNum(); } } save: what,io { if(what == SCENEMODE) { if(ChannelItem != nil) { io.writeln(string(ChannelItem.name)); } else { io.writeln("nil"); } io.writeln(iInputChannel); io.writeln(iOutputChannel); io.writeln(iOperator); io.writeln(nMultiplier); } } options { reqbegin(sTitle + " " + sVersion); ctrl_c0 = ctlmeshitems("Channel Item",ChannelItem); ctrl_c1 = ctlchoice("Input Channel",iInputChannel,@"X","Y","Z","H","P","B","SX","SY","SZ"@); ctrl_c2 = ctlchoice("Output Channel",iOutputChannel,@"X","Y","Z","H","P","B","SX","SY","SZ"@); ctrl_c3 = ctlchoice("Operator",iOperator,@"+","-","Abs"@); ctrl_c4 = ctlnumber("Multiplier",nMultiplier); // Developer ctlsep(); ctrl_dev0 = ctltext("","developer: Stephen Culley","http://www.stephenculley.co.uk"); return if !reqpost(); ChannelItem = getvalue(ctrl_c0); iInputChannel = getvalue(ctrl_c1); iOutputChannel = getvalue(ctrl_c2); iOperator = getvalue(ctrl_c3); nMultiplier = getvalue(ctrl_c4); reqend(); }
https://drive.google.com/open?id=1cR_q2GVUAJHumic1-A3eXV16acQnVTWs
No comments:
Post a Comment