Thanks Georgiy! That sounds a bit cleaner than adding a knob actually.
I will give it a try tomorrow. Thank you, Ivan On Mon, Oct 31, 2011 at 11:18 PM, Georgiy Osipov <[email protected]> wrote: > Hi. > > MyOp* theFirst = dynamic_cast<MyOp*>(firstOp()); > > if(theFirst && theFirst->m_firstTime && !f.makeKnobs() ) { > theFirst->m_firstTime = false; > call_my_function_here(); > } > > I think there is no need in knob, if you use DO_NOT_SAVE. > > 2011/11/1 Ivan Busquets <[email protected]>: > > Hi all, > > > > I've recently come across the following problem. > > > > Let's say I've got something that I want to run during the first knobs() > > pass after the makeKnobs() pass. So, in knobs(), I have something like > this: > > > > if (!f.makeKnobs() && m_firstTime) > > { > > m_firstTime = false; // m_firstTime is a member variable that's > > initialized to "true" in the constructor > > call_my_function_here(); // the function sets some knob values, > btw > > } > > > > > > This used to work fine for me in 6.2. In 6.3, myfunction gets called > > multiple times for each node, particularly when the node has animated > knobs. > > I "suppose" this comes from the node spawning multiple Ops, but I'm > confused > > because this didn't seem to happen in 6.2? I've seen that 6.3 seems to > split > > Ops more often (when they're upstream of a Transform with motionblur > turned > > on, for example), but I'm not sure whether that's an intended change or a > > misbehaviour... > > > > In any case, the function I call in there is expensive, so it is a big > deal > > if it's called multiple times. Is there a better way to approach this? > > Basically what I want is to call something, only once, as early as > possible > > (or in the earliest stage where I can set knob values). > > > > As a workaround, I am now resorting to storing m_firstTime in a hidden > knob > > with both the EARLY_STORE flag (so that if my Node spawns multiple ops > > they'll get the right value for m_firstTime), and the DO_NOT_SAVE flag > (to > > force m_firstTime back to "true" when the node is created, reopened, or > copy > > pasted). > > > > So, I now have something like this: > > > > void knobs(Knob_Callback f) > > { > > [....] > > > > Bool_knob(f, &m_firstTime, "first"); > > SetFlags(f, Knob::EARLY_STORE | Knob::INVISIBLE | > Knob::DO_NOT_WRITE); > > > > if (!f.makeKnobs() && m_firstTime) > > { > > knob("first"->set_value(false); > > call_my_function_here(); > > } > > } > > > > > > This seems to work (as in, that portion of knobs() seems to be called > just > > once now), but I'd like to know if there's a more elegant way to do > this, or > > a better strategy altogether. > > > > Thanks, > > Ivan > > > > _______________________________________________ > > Nuke-dev mailing list > > [email protected], http://forums.thefoundry.co.uk/ > > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev > > > > > _______________________________________________ > Nuke-dev mailing list > [email protected], http://forums.thefoundry.co.uk/ > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev >
_______________________________________________ Nuke-dev mailing list [email protected], http://forums.thefoundry.co.uk/ http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev
