Object.select is not really correct, since the selection state isn't
stored in the object.

If we match Blender's internal state selection would look like this:

----
ob_base = view_layer.base_find(ob)
if ob_base is not None:
    ob_base.select = select
----

In practice this is inconvenient, although I think hiding this
relationship entirely is also a problem.

In recent 2.8 builds you can optionally pass in a view layer which
overrides the current active view layer, eg:

    ob.select_set(True, view_layer)

On Tue, Nov 6, 2018 at 7:02 AM Benjamin Humpherys
<[email protected]> wrote:
>
> It makes sense that selection and visibility are not Object properties, but 
> that’s an implementation detail that I don’t believe should to be visible in 
> the Python API. What I’m asking is that the appropriate getter and setter 
> functions be called through the standard python property access methods. I’m 
> not an expert on the Python C API, but shouldn’t it be possible to use 
> `PyGetSetDef` to redirect property access to call the new getter and setter 
> methods, without having to expose this change to Python code? For example: 
> https://llllllllll.github.io/c-extension-tutorial/member-vs-getset.html
>
> On Nov 5, 2018, at 12:15 PM, Bastien Montagne <[email protected]> wrote:
>
> Hi Benjamin,
>
> TL;DR: We did that in 2.7x, it’s not possible anymore in 2.8x (not without 
> **huge** changes in a large part of RNA, and adding significant complication 
> to the API).
>
> Technical explanation:
>
> This decision was taken because selection status **is not an Object data**, 
> not at all. It is stored in the object 'instantiation' data (called Base, and 
> not exposed to Python) used to 'link' an object to a ViewLayer. Hence it is 
> context-dependent info, which cannot be retrieved through our RNA property 
> system.
>
> Ideally, there should be no access at all to that status in RNA, at least no 
> setter, it should be something let to operators, or alternatively, we’d have 
> to expose the whole Base concept to python. But that would add some noise and 
> confusion to something already rather complicated (whole 
> viewlayer/collection/object system).
>
> We have other similar accessors in Object API, like `visible_get()`, which 
> follow the same principle (and do not have any setter).
>
> Note that pure-python things like @property are totally irrelevant here, this 
> is using the semi-auto-generated binding to C code/data (through RNA), which 
> has its own rules and limitations on top of python C API.
>
> Bastien
>
>
> On 05/11/2018 18:37, Benjamin Humpherys wrote:
>
> I saw on the recent changes page on the wiki that the object selection API 
> (https://wiki.blender.org/wiki/Reference/Release_Notes/2.80/Python_API/Scene_and_Object_API#Object_Selection_and_Hiding)
>  has changed from a simple `obj.select` property to `select_get()` and 
> `select_set(’SELECT’)`. I strongly urge this decision to be reconsidered 
> because it is not idiomatic Python to use getter and setter functions, let 
> alone setting a boolean property with a string argument!
>
> Instead of getters and setters please consider making `select` a @property, 
> or utilizing 
> `PyGetSetDef`(https://docs.python.org/3/c-api/structures.html#c.PyGetSetDef) 
> to hide any new getter/setter logic instead of putting it in the user-facing 
> API.
>
>
> _______________________________________________
> Bf-python mailing list
> [email protected]
> https://lists.blender.org/mailman/listinfo/bf-python
>
>
> _______________________________________________
> Bf-python mailing list
> [email protected]
> https://lists.blender.org/mailman/listinfo/bf-python
>
> _______________________________________________
> Bf-python mailing list
> [email protected]
> https://lists.blender.org/mailman/listinfo/bf-python



-- 
- Campbell
_______________________________________________
Bf-python mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-python

Reply via email to