kopia lustrzana https://github.com/vilemduha/blendercam
select similar mini addon
rodzic
39f984b5c8
commit
3f11c8ad37
|
|
@ -0,0 +1,166 @@
|
|||
'''
|
||||
bl_info = {
|
||||
"name": "Select Similar extended",
|
||||
"author": "Vilem Novak",
|
||||
"version": (1, 0),
|
||||
"blender": (2, 69, 0),
|
||||
"location": "View3D > Select > Grouped",
|
||||
"description": "Adds a new Mesh Object",
|
||||
"warning": "",
|
||||
"wiki_url": "",
|
||||
"category": "Add Mesh"}
|
||||
'''
|
||||
import bpy
|
||||
from bpy.props import *
|
||||
prec=0.001;
|
||||
|
||||
|
||||
|
||||
def precc3(v1,v2,prec):
|
||||
return v1[0]-prec<v2[0]<v1[0]+prec and v1[1]-prec<v2[1]<v1[1]+prec and v1[2]-prec<v2[2]<v1[2]+prec
|
||||
|
||||
condition = 'VERTEX_COLOR';
|
||||
|
||||
def compare(o,o1, rules):
|
||||
|
||||
return 0;
|
||||
|
||||
def compareColor(col1,col2,threshold):
|
||||
r=col2[0]-threshold<col1[0]<col2[0]+threshold
|
||||
g=col2[1]-threshold<col1[1]<col2[1]+threshold
|
||||
b=col2[2]-threshold<col1[2]<col2[2]+threshold
|
||||
return r and g and b
|
||||
|
||||
def selectSimilarObject(condition,threshold):
|
||||
ao=bpy.context.active_object
|
||||
if condition =='MATERIAL_COLOR':
|
||||
if len(ao.material_slots)>0:
|
||||
m=ao.material_slots[0].material.diffuse_color
|
||||
|
||||
for o in bpy.context.scene.objects:
|
||||
#print (o.material_slots)
|
||||
if len(o.material_slots)>0 and o.material_slots[0].material!=None:
|
||||
print (precc3(m,o.material_slots[0].material.diffuse_color,prec))
|
||||
if precc3(m,o.material_slots[0].material.diffuse_color,prec):
|
||||
o.select=1;
|
||||
|
||||
if condition =='DIMENSIONS':
|
||||
d = ao.dimensions
|
||||
for o in bpy.context.scene.objects:
|
||||
if o.dimensions.x-prec<d.x<o.dimensions.x+prec and o.dimensions.y-prec<d.y<o.dimensions.y+prec and o.dimensions.z-prec<d.z<o.dimensions.z+prec:
|
||||
o.select=1
|
||||
|
||||
if condition == 'VERTEX_COUNT':
|
||||
# select similar num of verts
|
||||
n=len(ao.data.vertices);
|
||||
for o in bpy.context.scene.objects:
|
||||
if o.type == 'MESH':
|
||||
if len(o.data.vertices)==n:# and o.material_slots[0].material == mat:
|
||||
o.select=1
|
||||
|
||||
def selectSimilarMesh(condition,threshold):
|
||||
bpy.ops.object.editmode_toggle()
|
||||
print(condition,threshold)
|
||||
if condition == 'VERTEX_COLOR':
|
||||
ao=bpy.context.active_object
|
||||
m=ao.data
|
||||
if len(m.vertex_colors)>0:
|
||||
for li in range(0,len(m.loops)):
|
||||
l=m.loops[li]
|
||||
v=m.vertices[l.vertex_index]
|
||||
if v.select:
|
||||
color = m.vertex_colors['Col'].data[li].color
|
||||
print(color)
|
||||
for li in range(0,len(m.loops)):
|
||||
l=m.loops[li]
|
||||
v=m.vertices[l.vertex_index]
|
||||
|
||||
color1 = m.vertex_colors['Col'].data[li].color
|
||||
if compareColor(color, color1, threshold):
|
||||
v.select=True
|
||||
bpy.ops.object.editmode_toggle()
|
||||
|
||||
|
||||
class SelectSimilarObject(bpy.types.Operator):
|
||||
"""Select similar objects"""
|
||||
bl_idname = "object.select_similar_addon"
|
||||
bl_label = "Select similar objects"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
|
||||
condition = EnumProperty(
|
||||
name="type",
|
||||
description="type",
|
||||
items=(('DIMENSIONS','DIMENSIONS','DIMENSIONS'),
|
||||
('MATERIAL_COLOR','MATERIAL_COLOR','MATERIAL_COLOR'),
|
||||
('VERTEX_COLOR','VERTEX_COLOR','VERTEX_COLOR'),
|
||||
('VERTEX_COUNT','VERTEX_COUNT','VERTEX_COUNT')
|
||||
),
|
||||
default='DIMENSIONS'
|
||||
)
|
||||
threshold = FloatProperty(
|
||||
name="Threshold",
|
||||
description="Threshold",
|
||||
min=0.000001, max=100.0,
|
||||
default=0.1,
|
||||
)
|
||||
|
||||
conditions=[]
|
||||
def execute(self, context):
|
||||
|
||||
selectSimilarObject(self.condition,self.threshold)
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
class SelectSimilarMesh(bpy.types.Operator):
|
||||
"""Select similar elements"""
|
||||
bl_idname = "mesh.select_similar_addon"
|
||||
bl_label = "Select similar elements"
|
||||
bl_options = {'REGISTER', 'UNDO'}
|
||||
|
||||
condition = EnumProperty(
|
||||
name="type",
|
||||
description="type",
|
||||
items=(
|
||||
('VERTEX_COLOR','VERTEX_COLOR','VERTEX_COLOR'),
|
||||
('VERTEX_COUNT','VERTEX_COUNT','VERTEX_COUNT')
|
||||
),
|
||||
default='VERTEX_COLOR'
|
||||
)
|
||||
threshold = FloatProperty(
|
||||
name="Threshold",
|
||||
description="Threshold",
|
||||
min=0.000001, max=100.0,
|
||||
default=0.1,
|
||||
)
|
||||
|
||||
conditions=[]
|
||||
#view_align = BoolProperty(
|
||||
# name="Align to View",
|
||||
# default=False,
|
||||
# )
|
||||
# generic transform props
|
||||
|
||||
|
||||
|
||||
def execute(self, context):
|
||||
|
||||
selectSimilarMesh(self.condition,self.threshold)
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(SelectSimilarObject)
|
||||
bpy.utils.register_class(SelectSimilarMesh)
|
||||
#bpy.types.INFO_MT_mesh_add.append(menu_func)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(SelectSimilarObject)
|
||||
bpy.utils.unregister_class(SelectSimilarMesh)
|
||||
#bpy.types.INFO_MT_mesh_add.remove(menu_func)
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
||||
|
||||
# test call
|
||||
#bpy.ops.mesh.primitive_box_add()
|
||||
Ładowanie…
Reference in New Issue