Just want to add my voice to this, as I agree that it would be great if user knobs were flagged somehow. Bonus would be if the op kept track of the index of the last non-user knob without having to iterate through them all every time (including when replace_knobs were called), and if there were convenience methods for getting the index of/a pointer to the last non-user knob.
-Nathan From: Lucy Wilkes Sent: Friday, January 23, 2015 1:38 AM To: Nuke plug-in development discussion Subject: Re: [Nuke-dev] Acessing user knobs Hi Jo, Thanks for the suggestions. A flag would be nice to have eventually, although an invisible closing knob could also work in the interim! I'm not aware of any better way to access this information currently than the one you have come up with already. I've created a feature request and added your comments (bug 47362, "NDK - Provide a way to identify user knobs", for your reference). If anyone else here has any preferences or ideas for how this might work, please let us know and I'll add those too. Out of interest, can you give a bit more background on what you want to do with the user knobs once you have identified them? I'm just curious to know the use case for this (also it will give more weight to the feature request, if we can explain why this is needed!). Regards, Lucy On Thu, Jan 22, 2015 at 6:22 PM, Johannes Saam <johannes.s...@gmail.com> wrote: Thanks for all your thoughts! The good thing about using the last knob of the node that is that all knobs that the user creates should be caught. As they would be id wise after that. What would be cool is either to have a #define in the api that tells me the number of knobs in the node tab ( so i can add that to my knobs and get to the user knobs securely ) or maybe even better introduce a "closing knob" for the node tab that is invisible. So you guys can add whatever knobs to the node tab and we check against this ivisible knob? Of course the best would be a flag on the node that tells me if the knob is user generated or plugin generated... either one would work ... my prerference would be.... 1 Flag ... 2 Invisible closing knob .... 3 #define for the number of knobs in the node tab.... maybe there is something smarter to be done already using the Knob_Callback in knobs() ? u see getLastMadeKnob() and getKnobCount() maybe that could be used / extended? Thanks! Jo On Thu, Jan 22, 2015 at 3:22 AM, Lucy Wilkes <l...@thefoundry.co.uk> wrote: Although your current solution doesn't use it, I just wanted to point out another potential issue with looking for the "user" tab, in case it's useful for the future... As well as the "Manage user knobs" interface, users can add new knobs via python, and in this case they can create their own tabs to add them into, none of which need be named "User". For instance, try this in Nuke's script editor: b = nuke.createNode("Blur") tab1 = nuke.Tab_Knob("MyTab1") b.addKnob(tab1) k1 = nuke.Int_Knob("Param1") b.addKnob(k1) tab2 = nuke.Tab_Knob("MyTab2") b.addKnob(tab2) k2 = nuke.Double_Knob("Param2") b.addKnob(k2) You can actually do the same thing via "manage user knobs", by adding a Tab knob, giving it a name and then adding another knob... It will appear on the tab you just made. Not sure how common this is in practice, just thought it might be worth being aware of! Lucy -- Lucy Wilkes Senior Software Engineer The Foundry 5 Golden Square, London, W1F 9HT Tel: +44 (0)20 7479 4350 Web: www.thefoundry.co.uk Email: l...@thefoundry.co.uk The Foundry Visionmongers Ltd. Registered in England and Wales No: 4642027 On Thu, Jan 22, 2015 at 9:25 AM, Frank Harrison <fr...@thefoundry.co.uk> wrote: The lifetime knob is a new thing, as you mention, and it can also be renamed. Using the User tab may be better and more back-compatible; although it can be renamed it probably won't, but I do know of studios which do. I think the reason there isn't an API for this is, because of time constraints, no-one had time to ensure such an api would be robust in an add/remove/shuffle-whilst-iterating scenario. I did look at doing this a couple of years ago but there were a couple of other tricky (e.g. not solvable between builds) edge cases to address. Your solution is what I think ended up doing myself, in Python. F. On Wednesday, January 21, 2015, Johannes Saam <johannes.s...@gmail.com> wrote: for the record here is a way to get a list of all user knobs.... the if statement starting the recording of knobs is stable for now but could change in the future so watch out std::vector<DD::Image::Knob*> MyOp::getUserKnobs() const { // the output buffer std::vector<DD::Image::Knob*> userKnobs; // flag if we start recording knobs yet as 'user' knobs bool userStarted = false; // run over all knobs by index for( int i = 0;; i++ ) { // candidate knob DD::Image::Knob * k = DD::Image::Op::knob(i); // valid knob on i if ( k ) { // do not record tab knobs at all if ( strcmp( k->Class(), "Tab_Knob" ) == 0 ) continue; // if we have identified the last knob // in the node tab we start recording // using the User label on a tab is not // safe as the user knobs tab can be renamed if ( userStarted ) { // add a this knob to the result list userKnobs.push_back( k ); } else { // not recording yet, lets see if we reached the last knob // this might change with nuke changing works for nuke9v1 if ( strcmp( k->Class(), "Boolean_Knob" ) == 0 && k->name() == "useLifetime" ) { // from here onwards we record all knobs userStarted = true; } } } else { break; } } // done iterating knobs return userKnobs; } On Tue, Jan 20, 2015 at 3:45 PM, Johannes Saam <johannes.s...@gmail.com> wrote: Damn thats sucking. What would you suggest then how to access all the user created knobs? Iterate though all of the knobs and cross the ones i know i added off the list?! Of course i create knobs via the API dynamically so tracking all this is quite a pain. I vote for a getUserKnobs function on DD::Image::Op . Anyone? Thanks jo On Tue, Jan 20, 2015 at 11:17 AM, Nathan Rusch <nathan_ru...@hotmail.com> wrote: If you're planning to look the tab up by name, it's worth keeping in mind that the "User" tab can be renamed. -Nathan From: Johannes Saam Sent: Tuesday, January 20, 2015 10:25 AM To: Nuke plug-in development discussion Subject: Re: [Nuke-dev] Acessing user knobs Ok i will have another look. I had no idea i could get an ID for the user tab... the NDK docs will help for sure. It would be awesome to have a function on Op like std::vector<Knob*> & getUserKnobs(). again should i be able to get it done i might share it here so we have it written down. Also the user knobs that nuke provides with the ( might need a rework?? ) interface are not at all what nuke offers in terms of knobbage. Is there a way to hack more into it? As in is it a python script we can access and enlarge? I am on the fence now to write a c++ version so i can have more Knobs and then just store them under the user tab myself.... i keep yous posted. Thanks! JO On Tue, Jan 20, 2015 at 12:42 AM, Frank Harrison <fr...@thefoundry.co.uk> wrote: Hey, yes, that is a way. User-Knobs should always be on the "user" tab. This has come up before and I think we said that we'd add some pythonic getter for UserKnobs if we got a few more requests for it. I think, but don't quote me on this, that you can get the tab-idx and iterate from there. Perhaps there's something on Nukepedia to do this for you? F. On 20 January 2015 at 02:15, Johannes Saam <johannes.s...@gmail.com> wrote: Hey Gang, is there an easy way to access knobs that have been created by the user with "manage user knobs" i know they are all in the "user" tab is that a way? I was hoping i could get all the user generated knobs and then act on them. Thanks! JO _______________________________________________ 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 -- Frank Harrison Senior Nuke Software Engineer The Foundry Tel: +44 (0)20 7968 6828 - Fax: +44 (0)20 7930 8906 Web: www.thefoundry.co.uk Email: frank.harri...@thefoundry.co.uk _______________________________________________ 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 _______________________________________________ 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 -- Frank Harrison Senior Nuke Software Engineer The Foundry Tel: +44 (0)20 7968 6828 - Fax: +44 (0)20 7930 8906 Web: www.thefoundry.co.uk Email: frank.harri...@thefoundry.co.uk _______________________________________________ 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 _______________________________________________ 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 -- Lucy Wilkes Senior Software Engineer The Foundry 5 Golden Square, London, W1F 9HT Tel: +44 (0)20 7479 4350 Web: www.thefoundry.co.uk Email: l...@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