Skip to content

Commit

Permalink
Added Function to divide number of Objects into linked Subgroups
Browse files Browse the repository at this point in the history
  • Loading branch information
ssnd292 committed Jan 8, 2022
1 parent 1404594 commit 087d3e7
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 1 deletion.
29 changes: 28 additions & 1 deletion blendercadessentials/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand All @@ -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")

Expand Down Expand Up @@ -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,
Expand Down
54 changes: 54 additions & 0 deletions blendercadessentials/bce_classes.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import bpy
from math import radians
from random import sample
from bpy.props import FloatProperty

#########################################
Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit 087d3e7

Please sign in to comment.