Hi,
Sorry to backtrack on this conversation, but I'm interested in some details
behind this.

Abigail, when you say:

Calling set_value in _validate (or in later things) should be avoided.


Is it just so the knob values will be updated even if _validate is not
called on the Op? Or are there any other issues with doing that?

Say I wanted to implement a knob that works like the "XYZ output" knob in a
Reconcile3D when "live output" is turned on, for example (getting data from
an input and using that to set a knob's value). Would it be better to use
ValueProvider as opposed to just setting the knob value in _validate? If so,
what would be the benefit?

Thank you,
Ivan



On Thu, Jun 16, 2011 at 10:13 AM, Abigail Brady <abig...@thefoundry.co.uk>wrote:

> Yes, this is not reliable.  My example was very specific in not doing
> that, and in fetching values out of knob()->get_value() directly, which
> will work.
>
> On Thu, 2011-06-16 at 10:03 -0700, Nathan Rusch wrote:
> > Ah, that did the trick... mostly.
> >
> > Unfortunately, the knob updating seems to be a little lazy. However, this
> > may be a result of some bad order-of-operations on my part.
> >
> > Currently I'm using a private bool pretty much directly as the feedback
> > knob's value. This bool is being set in _validate (skeleton code is
> included
> > below). The bool is used in request and engine to determine which input
> to
> > use, and that part of things seems to be working fine (which makes me
> think
> > it should be safe to use as the feedback value). However, the knob seems
> to
> > be failing to update fairly randomly. Sometimes it's one change behind,
> and
> > sometimes it just doesn't do anything.
> >
> >
> ----------------------------------------------------------------------------------
> >
> > class HashSwitch : public NoIop, public ArrayKnobI::ValueProvider
> > {
> >     bool m_useMeta;
> >     int m_which;
> >
> > public:
> >     HashSwitch(Node* node) : NoIop(node
> >     {
> >         inputs(2);
> >         m_useMeta = false;
> >         m_which = 0;
> >     }
> >
> >     void knobs(Knob_Callback f)
> >     {
> >         Knob* wch = Int_knob(f, &m_which, "which")
> >         wch->set_flag(Knob::DO_NOT_WRITE);
> >         if (f.makeKnobs())
> >         {
> >             dynamic_cast<ArrayKnobI*>(wch)->setValueProvider(this);
> >         }
> >     }
> >
> >     std::vector<double> provideValues(const ArrayKnobI*, const
> > OutputContext& oc) const
> >     {
> >         std::vector<double> values;
> >         values.push_back(m_useMeta);
> >         return values;
> >     }
> >
> >     void _validate(bool for_real)
> >     {
> >         // Test metadata from one input against hash generated from other
> > input
> >         // then do copy_info() on one input or the other and set
> m_useMeta
> > to true/false
> >         // based on whether the hashes match.
> >
> >         // Is this bool unreliable as a feedback value?
> >     }
> > }
> >
> ----------------------------------------------------------------------------------
> >
> > Any thoughts?
> >
> > Thanks for your patience on this one,
> >
> > -Nathan
> >
> >
> >
> > -----Original Message-----
> > From: Abigail Brady
> > Sent: Thursday, June 16, 2011 2:25 AM
> > To: Nuke plug-in development discussion
> > Subject: Re: [Nuke-dev] Using knob as a feedback device
> >
> > Oh, sorry, I think that's a new thing in 6.3.  if f.makeKnobs()
> > dynamic_cast the Knob to ArrayKnobI and call setValueProvider() on that,
> > I believe is the actual answer.
> >
> > _______________________________________________
> > Nuke-dev mailing list
> > Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> > http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev
>
>
> --
> Abigail Brady, Senior Architect
> The Foundry, 6th Floor, 48 Leicester Square, London. WC2H 7LT
> Tel: +44 20 7968 6828 * Fax: +44 20 7930 8906
> Web: www.thefoundry.co.uk
>
> The Foundry Visionmongers Ltd
> Registered in England and Wales No: 4642027
>
> _______________________________________________
> Nuke-dev mailing list
> Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
> http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev
>
_______________________________________________
Nuke-dev mailing list
Nuke-dev@support.thefoundry.co.uk, http://forums.thefoundry.co.uk/
http://support.thefoundry.co.uk/cgi-bin/mailman/listinfo/nuke-dev

Reply via email to