[Closed] scripted modifier and animated parameters
i’m sure the answer is somewhere there, but i couldn’t find it anywhere.
what is the correct way to reflect changes in animated parameters in scripted modifiers?
i’ve written a simple scripted modifier that has a custom animated property, representing percentage of the effect modifier takes on the object. the problem is that i don’t know when, in what event, should i perform the update.
i used “on <pararameter> get” construct, but it works only when modifier rollout is displayed:
on percentage get v do (
updateSelection(); -- does all the actions i must take to reflect percentage value
v;
)
any suggestions?
If it is a simpleMod class plug-in, you don’t have to do anything special, as long as the parameter is used in the on Map() handler.
If your simple modifier is NOT a simpleMod modifier, I might need some more info…
well, this is a Edit_Poly descendant. effect i’m achieving for is to animate polygon selection in recorded sequence. use of plugin is simple – you press the record button, select polygons in the order you want, unpress the records button; animate percentage from 0 to 100 in a wanted time period, and voila, it works… while modifier is selected in edit panel:] as soon as i try to use the selection upper in the stack with “delete mesh” or “face extrude” modifiers, selection animation is not updated
plugin modifier AnimatedSelection
name:"Animated Selection"
classID:#(0x1604ebe6, 0x1a5defa7)
extends:Edit_Poly
replaceUI:false
version:1
(
local prevSel = #{}; -- previous selection
function updateSelection = (
if delegate.getNumFaces()==0 then return undefined;
s = #{};
for i=1 to (this.fseq.count*this.percentage/100) do (
append s this.fseq[i];
)
delegate.setSelection #Face s;
)
parameters main rollout:mainR (
percentage type:#float animatable:true ui:spnPercentage; --percentage of recorded selection to activate
fseq type:#inttab animatable:false tabSize:0 tabSizeVariable:true; --polygon select sequence
on percentage set v do (
updateSelection();
)
on percentage get v do (
if not this.mainR.tmrRecord.active then updateSelection();
v;
)
)
rollout mainR "Animated Selection" (
checkbutton btnRecord "record";
spinner spnPercentage;
timer tmrRecord interval:100 active:false;
on btnRecord changed state do(
if state==on then (
fseq = #();
tmrRecord.active = true;
)
else (
tmrRecord.active = false;
updateSelection();
)
)
on tmrRecord tick do (
-- adds newly selected polygons to selection sequence queue
local currSel = (delegate.getSelection #Face);
local diff = currSel-prevSel;
prevSel = currSel;
for i in diff do
append this.fseq i;
)
)
on create do (
delegate.setEPolySelLevel #Face;
)
)
im new to scripted plugins so i could have this ass ways…
seems to me that you dont have a parameter associated with the record button so when the rollout is not displayed its local variable will be reset to the default – off
add a parameter and associate it with the checkbutton and it will keep its state
hope this is correct / helps
mark tsang
no, “record” button is just needed to activate “selection record” state. you press it, write to fseq array and exit record mode.