select similar mini addon

pull/4/head
vilda.novak@gmail.com 2014-03-28 10:02:33 +00:00
rodzic 39f984b5c8
commit 3f11c8ad37
1 zmienionych plików z 166 dodań i 0 usunięć

Wyświetl plik

@ -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()