Merge branch 'blender-v2.92-release'
[blender-addons.git] / curve_tools / properties.py
blobd6fe9e0f6d37119d15437eb757fba76c3a170b2a
1 import time
3 import bpy
4 from bpy.props import *
8 class curvetoolsSelectedObjectHeader(bpy.types.Header):
9 bl_label = "Selection"
10 bl_space_type = "VIEW_3D"
12 def __init__(self):
13 self.update()
16 def update(self):
17 blenderSelectedObjects = bpy.context.selected_objects
18 selectedObjects = bpy.context.scene.curvetools.SelectedObjects
20 selectedObjectsToRemove = []
21 for selectedObject in selectedObjects:
22 if not selectedObject.IsElementOf(blenderSelectedObjects): selectedObjectsToRemove.append(selectedObject)
23 for selectedObject in selectedObjectsToRemove: selectedObjects.remove(selectedObject)
25 blenderObjectsToAdd = []
26 for blenderObject in blenderSelectedObjects:
27 if not curvetoolsSelectedObject.ListContains(selectedObjects, blenderObject): blenderObjectsToAdd.append(blenderObject)
28 for blenderObject in blenderObjectsToAdd:
29 newSelectedObject = curvetoolsSelectedObject(blenderObject)
30 selectedObjects.append(newSelectedObject)
33 def draw(self, context):
34 selectedObjects = bpy.context.scene.curvetools.SelectedObjects
35 nrSelectedObjects = len(selectedObjects)
37 layout = self.layout
38 row = layout.row()
39 row.label(text="Sel: " + str(nrSelectedObjects))
42 class curvetoolsSelectedObject(bpy.types.PropertyGroup):
43 name: StringProperty(name = "name", default = "??")
46 @staticmethod
47 def UpdateThreadTarget(lock, sleepTime, selectedObjectNames, selectedBlenderObjectNames):
48 time.sleep(sleepTime)
50 newSelectedObjectNames = []
52 for name in selectedObjectNames:
53 if name in selectedBlenderObjectNames: newSelectedObjectNames.append(name)
55 for name in selectedBlenderObjectNames:
56 if not (name in selectedObjectNames): newSelectedObjectNames.append(name)
58 # sometimes it still complains about the context
59 try:
60 nrNewSelectedObjects = len(newSelectedObjectNames)
61 bpy.context.scene.curvetools.NrSelectedObjects = nrNewSelectedObjects
63 selectedObjects = bpy.context.scene.curvetools.SelectedObjects
64 selectedObjects.clear()
65 for i in range(nrNewSelectedObjects): selectedObjects.add()
66 for i, newSelectedObjectName in enumerate(newSelectedObjectNames):
67 selectedObjects[i].name = newSelectedObjectName
68 except: pass
71 @staticmethod
72 def GetSelectedObjectNames():
73 selectedObjects = bpy.context.scene.curvetools.SelectedObjects
75 rvNames = []
76 selectedObjectValues = selectedObjects.values()
77 for selectedObject in selectedObjectValues: rvNames.append(selectedObject.name)
79 return rvNames
82 @staticmethod
83 def GetSelectedBlenderObjectNames():
84 blenderSelectedObjects = bpy.context.selected_objects
86 rvNames = []
87 for blObject in blenderSelectedObjects: rvNames.append(blObject.name)
89 return rvNames
91 def register():
92 for cls in classes:
93 bpy.utils.register_class(operators)
95 def unregister():
96 for cls in classes:
97 bpy.utils.unregister_class(operators)
99 if __name__ == "__main__":
100 register()
102 operators = [
103 curvetoolsSelectedObject,