Skip to content

Avoid using the Scene namespace for all your properties. #92

@zeffii

Description

@zeffii

I like this add-on, and I want to share one concern.

issue

I've noticed you have a few very generic variable names registered directly into bpy.types.Scene.* This increases the probability that your properties will interfere with other add-ons registering properties in Scene. It's nice to code a bit defensively here.

solution.

You can register a property collection / property group to keep all properties under your own namespace

See the docs, (tho I feel these are a bit rubbish)

import bpy

## some panel somewhere
def draw(self, context):
    self.layout.prop(context.scene.my_prop_grp, 'custom_1')


class MyPropertyGroup(bpy.types.PropertyGroup):
    custom_1 = bpy.props.FloatProperty(name="My Float")
    custom_2 = bpy.props.IntProperty(name="My Int")

def register():
    bpy.utils.register_class(MyPropertyGroup)
    bpy.types.Scene.my_prop_grp = bpy.props.PointerProperty(type=MyPropertyGroup)

def unregister():
    bpy.utils.unregister_class(MyPropertyGroup)

    # deleting the group, removes automatically all children. :)
    del bpy.types.Scene.my_prop_grp

or like this..

class SomeAddonProperties(bpy.types.PropertyGroup):

    @classmethod
    def register(cls):
        Scn = bpy.types.Scene

        Scn.some_addon_props = PointerProperty(
            name="some addon's internal global properties",
            description="some add-on uses these properties for shared properties between operators",
            type=cls,
        )

        cls.custom_1 = bpy.props.FloatProperty(name="My Float")
        cls.custom_2 = bpy.props.IntProperty(name="My Int")


    @classmethod
    def unregister(cls):
        del bpy.types.Scene.some_addon_props


def register():
    ...
    bpy.utils.register_class(SomeAddonProperties)

def unregister():
    ...
    bpy.utils.unregister_class(SomeAddonProperties)   

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions