1 # SPDX-License-Identifier: GPL-2.0-or-later
6 from bpy
.props
import *
10 class curvetoolsSelectedObjectHeader(bpy
.types
.Header
):
11 bl_label
= "Selection"
12 bl_space_type
= "VIEW_3D"
19 blenderSelectedObjects
= bpy
.context
.selected_objects
20 selectedObjects
= bpy
.context
.scene
.curvetools
.SelectedObjects
22 selectedObjectsToRemove
= []
23 for selectedObject
in selectedObjects
:
24 if not selectedObject
.IsElementOf(blenderSelectedObjects
): selectedObjectsToRemove
.append(selectedObject
)
25 for selectedObject
in selectedObjectsToRemove
: selectedObjects
.remove(selectedObject
)
27 blenderObjectsToAdd
= []
28 for blenderObject
in blenderSelectedObjects
:
29 if not curvetoolsSelectedObject
.ListContains(selectedObjects
, blenderObject
): blenderObjectsToAdd
.append(blenderObject
)
30 for blenderObject
in blenderObjectsToAdd
:
31 newSelectedObject
= curvetoolsSelectedObject(blenderObject
)
32 selectedObjects
.append(newSelectedObject
)
35 def draw(self
, context
):
36 selectedObjects
= bpy
.context
.scene
.curvetools
.SelectedObjects
37 nrSelectedObjects
= len(selectedObjects
)
41 row
.label(text
="Sel: " + str(nrSelectedObjects
))
44 class curvetoolsSelectedObject(bpy
.types
.PropertyGroup
):
45 name
: StringProperty(name
= "name", default
= "??")
49 def UpdateThreadTarget(lock
, sleepTime
, selectedObjectNames
, selectedBlenderObjectNames
):
52 newSelectedObjectNames
= []
54 for name
in selectedObjectNames
:
55 if name
in selectedBlenderObjectNames
: newSelectedObjectNames
.append(name
)
57 for name
in selectedBlenderObjectNames
:
58 if not (name
in selectedObjectNames
): newSelectedObjectNames
.append(name
)
60 # sometimes it still complains about the context
62 nrNewSelectedObjects
= len(newSelectedObjectNames
)
63 bpy
.context
.scene
.curvetools
.NrSelectedObjects
= nrNewSelectedObjects
65 selectedObjects
= bpy
.context
.scene
.curvetools
.SelectedObjects
66 selectedObjects
.clear()
67 for i
in range(nrNewSelectedObjects
): selectedObjects
.add()
68 for i
, newSelectedObjectName
in enumerate(newSelectedObjectNames
):
69 selectedObjects
[i
].name
= newSelectedObjectName
74 def GetSelectedObjectNames():
75 selectedObjects
= bpy
.context
.scene
.curvetools
.SelectedObjects
78 selectedObjectValues
= selectedObjects
.values()
79 for selectedObject
in selectedObjectValues
: rvNames
.append(selectedObject
.name
)
85 def GetSelectedBlenderObjectNames():
86 blenderSelectedObjects
= bpy
.context
.selected_objects
89 for blObject
in blenderSelectedObjects
: rvNames
.append(blObject
.name
)
95 bpy
.utils
.register_class(operators
)
99 bpy
.utils
.unregister_class(operators
)
101 if __name__
== "__main__":
105 curvetoolsSelectedObject
,