diff options
author | meta-androcto <meta.androcto1@gmail.com> | 2017-06-14 05:42:31 +0300 |
---|---|---|
committer | meta-androcto <meta.androcto1@gmail.com> | 2017-06-14 05:42:31 +0300 |
commit | 16dbda9caabd065a1eb5b0e6af0e3596fe313442 (patch) | |
tree | 34e09b8a27781600e8a8ee5911b988703703e464 /mesh_tissue | |
parent | 89f56dc4df5ef641bd26f9fa4349c2f92c4a1b5a (diff) |
mesh tissue update by Alessandro
Diffstat (limited to 'mesh_tissue')
-rw-r--r-- | mesh_tissue/__init__.py | 5 | ||||
-rw-r--r-- | mesh_tissue/colors_groups_exchanger.py | 73 | ||||
-rw-r--r-- | mesh_tissue/dual_mesh.py | 7 | ||||
-rw-r--r-- | mesh_tissue/tessellate_numpy.py | 79 |
4 files changed, 113 insertions, 51 deletions
diff --git a/mesh_tissue/__init__.py b/mesh_tissue/__init__.py index 1c0945ed..372f3474 100644 --- a/mesh_tissue/__init__.py +++ b/mesh_tissue/__init__.py @@ -17,7 +17,7 @@ # ##### END GPL LICENSE BLOCK ##### # --------------------------------- TISSUE ------------------------------------# -#-------------------------------- version 0.29 --------------------------------# +#-------------------------------- version 0.3 ---------------------------------# # # # Creates duplicates of selected mesh to active morphing the shape according # # to target faces. # @@ -41,6 +41,7 @@ else: from . import tessellate_numpy from . import colors_groups_exchanger from . import dual_mesh + from . import lattice import bpy from mathutils import Vector @@ -50,7 +51,7 @@ from mathutils import Vector bl_info = { "name": "Tissue", "author": "Alessandro Zomparelli (Co-de-iT)", - "version": (0, 2, 9), + "version": (0, 3, 0), "blender": (2, 7, 8), "location": "", "description": "Tools for Computational Design", diff --git a/mesh_tissue/colors_groups_exchanger.py b/mesh_tissue/colors_groups_exchanger.py index 8bd47b46..4ae76020 100644 --- a/mesh_tissue/colors_groups_exchanger.py +++ b/mesh_tissue/colors_groups_exchanger.py @@ -26,7 +26,7 @@ # For use the command "Vertex Clors to Vertex Groups" use the search bar # # (space bar). # # # -# (c) Alessandro Zomparelli # +# (c) Alessandro Zomparelli # # (2017) # # # # http://www.co-de-it.com/ # @@ -35,6 +35,7 @@ import bpy import math +from math import pi bl_info = { "name": "Colors/Groups Exchanger", @@ -51,8 +52,9 @@ bl_info = { class vertex_colors_to_vertex_groups(bpy.types.Operator): bl_idname = "object.vertex_colors_to_vertex_groups" - bl_label = "Weight from Colors" + bl_label = "Vertex Color" bl_options = {'REGISTER', 'UNDO'} + bl_description = ("Convert the active Vertex Color into a Vertex Group.") red = bpy.props.BoolProperty( name="red channel", default=False, description="convert red channel") @@ -135,8 +137,9 @@ class vertex_colors_to_vertex_groups(bpy.types.Operator): class vertex_group_to_vertex_colors(bpy.types.Operator): bl_idname = "object.vertex_group_to_vertex_colors" - bl_label = "Colors from Weight" + bl_label = "Vertex Group" bl_options = {'REGISTER', 'UNDO'} + bl_description = ("Convert the active Vertex Group into a Vertex Color.") channel = bpy.props.EnumProperty( items=[('Blue', 'Blue Channel', 'Convert to Blue Channel'), @@ -212,13 +215,58 @@ class vertex_group_to_vertex_colors(bpy.types.Operator): bpy.context.object.data.vertex_colors[colors_id].active_render = True return {'FINISHED'} +class curvature_to_vertex_groups(bpy.types.Operator): + bl_idname = "object.curvature_to_vertex_groups" + bl_label = "Curvature" + bl_options = {'REGISTER', 'UNDO'} + invert = bpy.props.BoolProperty( + name="invert", default=False, description="invert values") + bl_description = ("Generate a Vertex Group based on the curvature of the" + "mesh. Is based on Dirty Vertex Color.") + + blur_strength = bpy.props.FloatProperty( + name="Blur Strength", default=1, min=0.001, + max=1, description="Blur strength per iteration") + + blur_iterations = bpy.props.IntProperty( + name="Blur Strength", default=1, min=0, + max=40, description="Number of times to blur the values") + + min_angle = bpy.props.FloatProperty( + name="Min Angle", default=0, min=0, + max=pi/2, subtype='ANGLE', description="Minimum angle") + + max_angle = bpy.props.FloatProperty( + name="Max Angle", default=pi, min=pi/2, + max=pi, subtype='ANGLE', description="Maximum angle") + + invert = bpy.props.BoolProperty( + name="Invert", default=False, + description="Invert the curvature map") + + def execute(self, context): + bpy.ops.object.mode_set(mode='OBJECT') + bpy.ops.mesh.vertex_color_add() + vertex_colors = bpy.context.active_object.data.vertex_colors + vertex_colors[-1].active = True + vertex_colors[-1].active_render = True + vertex_colors[-1].name = "Curvature" + bpy.ops.object.mode_set(mode='VERTEX_PAINT') + bpy.ops.paint.vertex_color_dirt(blur_strength=self.blur_strength, blur_iterations=self.blur_iterations, clean_angle=self.max_angle, dirt_angle=self.min_angle) + bpy.ops.object.vertex_colors_to_vertex_groups(invert=self.invert) + bpy.ops.mesh.vertex_color_remove() + return {'FINISHED'} + + class face_area_to_vertex_groups(bpy.types.Operator): bl_idname = "object.face_area_to_vertex_groups" - bl_label = "Weight from Faces Area" + bl_label = "Area" bl_options = {'REGISTER', 'UNDO'} invert = bpy.props.BoolProperty( name="invert", default=False, description="invert values") + bl_description = ("Generate a Vertex Group based on the area of individual" + "faces.") def execute(self, context): obj = bpy.context.active_object @@ -237,7 +285,6 @@ class face_area_to_vertex_groups(bpy.types.Operator): max_area = False n_values = [0]*len(obj.data.vertices) values = [0]*len(obj.data.vertices) - print(len(values)) for p in obj.data.polygons: for v in p.vertices: n_values[v] += 1 @@ -266,21 +313,25 @@ class face_area_to_vertex_groups(bpy.types.Operator): class colors_groups_exchanger_panel(bpy.types.Panel): - bl_label = "Colors-Weight Exchanger" - bl_category = "Create" + bl_label = "Data Converter" + bl_category = "Tools" bl_space_type = "VIEW_3D" bl_region_type = "TOOLS" - bl_options = {'DEFAULT_CLOSED'} #bl_context = "objectmode" def draw(self, context): layout = self.layout col = layout.column(align=True) - col.operator("object.vertex_group_to_vertex_colors", icon="GROUP_VCOL") + col.label(text="Create Vertex Groups:") col.operator( - "object.vertex_colors_to_vertex_groups", icon="GROUP_VERTEX") - col.separator() + "object.vertex_colors_to_vertex_groups", icon="GROUP_VCOL") col.operator("object.face_area_to_vertex_groups", icon="SNAP_FACE") + col.operator("object.curvature_to_vertex_groups", icon="SURFACE_DATA") + + col.separator() + col.label(text="Create Vertex Colors:") + col.operator("object.vertex_group_to_vertex_colors", icon="GROUP_VERTEX") + def register(): diff --git a/mesh_tissue/dual_mesh.py b/mesh_tissue/dual_mesh.py index 5a4a5d13..60a11927 100644 --- a/mesh_tissue/dual_mesh.py +++ b/mesh_tissue/dual_mesh.py @@ -15,13 +15,14 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ##### END GPL LICENSE BLOCK ##### + #---------------------------------- DUAL MESH ---------------------------------# #--------------------------------- version 0.3 --------------------------------# # # # Convert a generic mesh to its dual. With open meshes it can get some wired # # effect on the borders. # # # -# (c) Alessandro Zomparelli # +# (c) Alessandro Zomparelli # # (2017) # # # # http://www.co-de-it.com/ # @@ -47,6 +48,7 @@ class dual_mesh(bpy.types.Operator): bl_idname = "object.dual_mesh" bl_label = "Dual Mesh" bl_options = {'REGISTER', 'UNDO'} + bl_description = ("Convert a generic mesh to its dual.") quad_method = bpy.props.EnumProperty( items=[('BEAUTY', 'Beauty', @@ -214,11 +216,10 @@ class dual_mesh(bpy.types.Operator): class dual_mesh_panel(bpy.types.Panel): bl_label = "Dual Mesh" - bl_category = "Create" + bl_category = "Tools" bl_space_type = "VIEW_3D" bl_region_type = "TOOLS" bl_context = (("objectmode")) - bl_options = {'DEFAULT_CLOSED'} def draw(self, context): layout = self.layout diff --git a/mesh_tissue/tessellate_numpy.py b/mesh_tissue/tessellate_numpy.py index 001a438d..fb1a5d39 100644 --- a/mesh_tissue/tessellate_numpy.py +++ b/mesh_tissue/tessellate_numpy.py @@ -22,7 +22,7 @@ # Creates duplicates of selected mesh to active morphing the shape according # # to target faces. # # # -# (c) Alessandro Zomparelli # +# (c) Alessandro Zomparelli # # (2017) # # # # http://www.co-de-it.com/ # @@ -776,17 +776,20 @@ class tessellate(bpy.types.Operator): bpy.ops.object.mode_set(mode='OBJECT') # MATERIALS - # create materials list - polygon_materials = [p.material_index for p in ob1.data.polygons]*int( - len(new_ob.data.polygons) / len(ob1.data.polygons)) - # assign old material - component_materials = [slot.material for slot in ob1.material_slots] - for i in range(len(component_materials)): - bpy.ops.object.material_slot_add() - bpy.context.object.material_slots[i].material = \ - component_materials[i] - for i in range(len(new_ob.data.polygons)): - new_ob.data.polygons[i].material_index = polygon_materials[i] + try: + # create materials list + polygon_materials = [p.material_index for p in ob1.data.polygons]*int( + len(new_ob.data.polygons) / len(ob1.data.polygons)) + # assign old material + component_materials = [slot.material for slot in ob1.material_slots] + for i in range(len(component_materials)): + bpy.ops.object.material_slot_add() + bpy.context.object.material_slots[i].material = \ + component_materials[i] + for i in range(len(new_ob.data.polygons)): + new_ob.data.polygons[i].material_index = polygon_materials[i] + except: + pass return {'FINISHED'} @@ -871,17 +874,20 @@ class update_tessellate(bpy.types.Operator): bpy.ops.object.mode_set(mode='OBJECT') # MATERIALS - # create materials list - polygon_materials = [p.material_index for p in ob1.data.polygons]*int( - len(ob.data.polygons) / len(ob1.data.polygons)) - # assign old material - component_materials = [slot.material for slot in ob1.material_slots] - for i in range(len(component_materials)): - bpy.ops.object.material_slot_add() - bpy.context.object.material_slots[i].material = \ - component_materials[i] - for i in range(len(ob.data.polygons)): - ob.data.polygons[i].material_index = polygon_materials[i] + try: + # create materials list + polygon_materials = [p.material_index for p in ob1.data.polygons]*int( + len(ob.data.polygons) / len(ob1.data.polygons)) + # assign old material + component_materials = [slot.material for slot in ob1.material_slots] + for i in range(len(component_materials)): + bpy.ops.object.material_slot_add() + bpy.context.object.material_slots[i].material = \ + component_materials[i] + for i in range(len(ob.data.polygons)): + ob.data.polygons[i].material_index = polygon_materials[i] + except: + pass return {'FINISHED'} @@ -1217,17 +1223,21 @@ class settings_tessellate(bpy.types.Operator): bpy.ops.object.mode_set(mode='OBJECT') # MATERIALS - # create materials list - polygon_materials = [p.material_index for p in ob1.data.polygons] * \ - int(len(self.ob.data.polygons) / len(ob1.data.polygons)) - # assign old material - component_materials = [slot.material for slot in ob1.material_slots] - for i in range(len(component_materials)): - bpy.ops.object.material_slot_add() - bpy.context.object.material_slots[i].material = \ - component_materials[i] - for i in range(len(self.ob.data.polygons)): - self.ob.data.polygons[i].material_index = polygon_materials[i] + try: + # create materials list + polygon_materials = [p.material_index for p in ob1.data.polygons] * \ + int(len(self.ob.data.polygons) / len(ob1.data.polygons)) + # assign old material + component_materials = [slot.material for slot in ob1.material_slots] + for i in range(len(component_materials)): + bpy.ops.object.material_slot_add() + bpy.context.object.material_slots[i].material = \ + component_materials[i] + for i in range(len(self.ob.data.polygons)): + self.ob.data.polygons[i].material_index = polygon_materials[i] + except: + pass + return {'FINISHED'} def check(self, context): @@ -1242,7 +1252,6 @@ class tessellate_panel(bpy.types.Panel): bl_category = "Create" bl_space_type = "VIEW_3D" bl_region_type = "TOOLS" - bl_options = {'DEFAULT_CLOSED'} #bl_context = "objectmode", "editmode" def draw(self, context): |