[Bf-committers] Getting the associated Blender object name from a uiBut object

The Simple Carnival jeff at simplecarnival.com
Tue Aug 8 03:27:31 CEST 2017

Actually, I take that back. It's pretty messy to handle that from the 
Restrict View section because it would mean overriding the ability to 
turn on/off the view/select/render icons. Plus, out of the available 
modifier keys (shift, alt, oskey -- ctrl is already taken), only shift 
appears to work on Windows. I need the ability to insert, replace, and 
delete keyframes, and shift can't handle all those cases. So I'm back to 
handling this as right-click "Insert/Replace/Delete Recursive Keyframes" 
menu option.

All I need is the ability to get the name of the associated Blender 
object name from a uiBut object; from there, I know how to handle 
everything else. I'm thinking that the key is this, in particular ptr in 
the second line:

     but = UI_context_active_but_get(C);
     UI_context_active_but_prop_get(C, &ptr, &prop, &index);

(ptr is a PointerRNA, prop is a PropertyRNA.)

I *think* I can somehow take ptr and get the actual blender object it's 
pointing to. However, I'm having difficulty figuring out how to do that. 
Any ideas?


On 8/6/2017 9:39 PM, The Simple Carnival wrote:
> Hi Matt --
> Thanks for the tip. I was able to get a proof-of-concept working going 
> off of that code instead of dealing with the uiBut objects. I'll dig 
> more into this, but I think I can make it work.
> -Jeff
> On 8/6/2017 5:15 PM, Matthew Keller wrote:
>> Hi Jeff,
>> Not sure if you've seen this, but there is a way to perform the 
>> 'Restrict View' action in the ui recursively by pressing Ctrl while 
>> clicking. This is the function that enables that behavior as far as I 
>> can tell:
>> https://developer.blender.org/diffusion/B/browse/master/source/blender/editors/space_outliner/outliner_draw.c;f5f6f9c9ac3ec37ef98eae54464a801c2b7ddcc9$175 
>> They seem to be using the currently selected object and then 
>> iterating through all the objects and checking every time if the 
>> object is a child of the currently selected object.
>> Could you follow that approach by setting the keyframe on the 
>> underlying object as opposed to setting the keyframe on the button? 
>> (there's even logic in there to actually set the keyframe, although 
>> I'm not quite sure under what circumstances that functionality is 
>> triggered)
>> HTH,
>> Matt

More information about the Bf-committers mailing list