From 087d3e765b6d1f39589be8bf40a40b97d2634b1e Mon Sep 17 00:00:00 2001 From: Sebastian Schneider Date: Sat, 8 Jan 2022 15:08:54 +0100 Subject: [PATCH] Added Function to divide number of Objects into linked Subgroups --- blendercadessentials/__init__.py | 29 +++++++++++++++- blendercadessentials/bce_classes.py | 54 +++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/blendercadessentials/__init__.py b/blendercadessentials/__init__.py index 15df49b..90600b4 100644 --- a/blendercadessentials/__init__.py +++ b/blendercadessentials/__init__.py @@ -3,7 +3,7 @@ "author" : "Sebastian Schneider", "description" : "Collection of often needed tools when working with imported CAD Data", "blender" : (2, 93, 0), - 'version': (0, 1, 0), + 'version': (0, 1, 1), "location" : "View3D", "warning" : "", "category" : "View3D" @@ -51,6 +51,22 @@ class BCEProperties(PropertyGroup): subtype="ANGLE", ) + maxObjectNumber: IntProperty( + name = "", + description = "Number of Maximum Objects", + default = 0, + min = 0, + max = 10000, + ) + + commonDenominatorInt: IntProperty( + name = "", + description = "Number of Linked Groups Wanted", + default = 2, + min = 0, + max = 10000, + ) + class BCE_PT_MainUI(bpy.types.Panel): bl_idname = "BCE_PT_MainUI" bl_label = "Blender CAD Essentials" @@ -75,6 +91,15 @@ def draw(self, context): row = layout.row(align=True) row.operator('mesh.bce_resetscale' ,text="Reset Scale of Links") + layout.separator() + row = layout.row(align=True) + row.prop(bceprops, "maxObjectNumber") + row.prop(bceprops, "commonDenominatorInt") + row = layout.row(align=True) + row.operator('mesh.bce_resetnumbercounter' ,text="Reset Number") + row.operator('mesh.bce_changenumberoflinkedobjects' ,text="Relink Objects") + layout.separator() + row = layout.row(align=True) row.operator('mesh.bce_addtrimodifier' ,text="Triangulate") @@ -130,6 +155,8 @@ def draw(self, context): bce_classes.BCE_OT_MakeTrisToQuads, bce_classes.BCE_OT_MakeSingleUserObjectData, bce_classes.BCE_OT_ResetScaleForLinkedObjects, + bce_classes.BCE_OT_ChangedNumberOfLinkedObjects, + bce_classes.BCE_OT_ResetNumberCounter, bce_classes.BCE_OT_ConvertHardEdgesToSeams, bce_classes.BCE_OT_SelectUVMap01, bce_classes.BCE_OT_SelectUVMap02, diff --git a/blendercadessentials/bce_classes.py b/blendercadessentials/bce_classes.py index b30c5ef..4714b60 100644 --- a/blendercadessentials/bce_classes.py +++ b/blendercadessentials/bce_classes.py @@ -1,5 +1,6 @@ import bpy from math import radians +from random import sample from bpy.props import FloatProperty ######################################### @@ -81,6 +82,59 @@ def execute(self, context): self.resetscalandrelink(context) return{'FINISHED'} +class BCE_OT_ChangedNumberOfLinkedObjects(bpy.types.Operator): + bl_idname = "mesh.bce_changenumberoflinkedobjects" + bl_label = "Reset Scale for Linked Objects" + bl_description = "Resets Data Links and Scale and Relinks Data" + bl_options = {'REGISTER', 'UNDO'} + + def changenumberoflinkedobjects(self, context): + selection = bpy.context.selected_objects + bceprops = context.scene.bceprops + maxObjNumber = bceprops.maxObjectNumber + divider = bceprops.commonDenominatorInt + + if maxObjNumber == 0: + maxObjNumber = len(selection) + bceprops.maxObjectNumber = maxObjNumber + + numberOfSelections = maxObjNumber/divider + print("Number of Objects to Select: "+ str(numberOfSelections)) + + if ".0" in str(numberOfSelections): + newSelection = sample(selection, int(numberOfSelections)) + print("Number of selected Objects: "+ str(len(newSelection))) + bpy.ops.object.select_all(action='DESELECT') + + for o in newSelection: + o.select_set(True) + + for o in newSelection: + bpy.ops.object.mode_set(mode='OBJECT', toggle=False) + bpy.ops.object.make_single_user(type='SELECTED_OBJECTS', object=True, obdata=True) + bpy.ops.object.make_links_data(type='OBDATA') + + else: + self.report({'WARNING'}, 'Your Number is not a Denominator of the whole Object Amount!') + + def execute(self, context): + self.changenumberoflinkedobjects(context) + return{'FINISHED'} + +class BCE_OT_ResetNumberCounter(bpy.types.Operator): + bl_idname = "mesh.bce_resetnumbercounter" + bl_label = "Reset Scale for Linked Objects" + bl_description = "Resets Data Links and Scale and Relinks Data" + bl_options = {'REGISTER', 'UNDO'} + + def resetnumbercounter(self, context): + bceprops = context.scene.bceprops + bceprops.maxObjectNumber = 0 + def execute(self, context): + self.resetnumbercounter(context) + return{'FINISHED'} + + class BCE_OT_AddFWNModifier(bpy.types.Operator): bl_idname = "mesh.bce_addfwnmodifier" bl_label = "Adds FWVN Modifier"