diff --git a/mesh_bsurfaces.py b/mesh_bsurfaces.py index d35b19cf712bb45d139a06c8c371ed5faa68affc..3232c58260113d0199f3ad0767761c6ec0a870c7 100644 --- a/mesh_bsurfaces.py +++ b/mesh_bsurfaces.py @@ -20,7 +20,7 @@ bl_info = { "name": "Bsurfaces GPL Edition", "author": "Eclectiel, Vladimir Spivak (cwolf3d)", - "version": (1, 7, 5), + "version": (1, 7, 6), "blender": (2, 80, 0), "location": "View3D EditMode > Sidebar > Edit Tab", "description": "Modeling and retopology tool", @@ -87,9 +87,9 @@ class VIEW3D_PT_tools_SURFSK_mesh(Panel): col = layout.column(align=True) row = layout.row() row.separator() - col.operator("gpencil.surfsk_init", text="Initialize (Add BSurface mesh)") - col.operator("gpencil.surfsk_add_modifiers", text="Add Mirror and others modifiers") - + col.operator("mesh.surfsk_init", text="Initialize (Add BSurface mesh)") + col.operator("mesh.surfsk_add_modifiers", text="Add Mirror and others modifiers") + col.label(text="Mesh of BSurface:") col.prop(scn, "SURFSK_mesh", text="") col.prop(scn, "SURFSK_mesh_color") @@ -97,7 +97,7 @@ class VIEW3D_PT_tools_SURFSK_mesh(Panel): col.prop(scn, "SURFSK_in_front") col.prop(scn, "SURFSK_shade_smooth") col.prop(scn, "SURFSK_show_wire") - + col.label(text="Guide strokes:") col.row().prop(scn, "SURFSK_guide", expand=True) if scn.SURFSK_guide == 'GPencil': @@ -106,26 +106,26 @@ class VIEW3D_PT_tools_SURFSK_mesh(Panel): if scn.SURFSK_guide == 'Curve': col.prop(scn, "SURFSK_curve", text="") col.separator() - + col.separator() - props = col.operator("gpencil.surfsk_add_surface", text="Add Surface") - col.operator("gpencil.surfsk_edit_surface", text="Edit Surface") - + props = col.operator("mesh.surfsk_add_surface", text="Add Surface") + col.operator("mesh.surfsk_edit_surface", text="Edit Surface") + col.separator() if scn.SURFSK_guide == 'GPencil': col.operator("gpencil.surfsk_add_strokes", text="Add Strokes") col.operator("gpencil.surfsk_edit_strokes", text="Edit Strokes") col.separator() col.operator("gpencil.surfsk_strokes_to_curves", text="Strokes to curves") - + if scn.SURFSK_guide == 'Annotation': col.operator("gpencil.surfsk_add_annotation", text="Add Annotation") col.separator() col.operator("gpencil.surfsk_annotations_to_curves", text="Annotation to curves") - + if scn.SURFSK_guide == 'Curve': - col.operator("gpencil.surfsk_edit_curve", text="Edit curve") - + col.operator("curve.surfsk_edit_curve", text="Edit curve") + col.separator() col.label(text="Initial settings:") col.prop(scn, "SURFSK_edges_U") @@ -135,7 +135,7 @@ class VIEW3D_PT_tools_SURFSK_mesh(Panel): col.prop(scn, "SURFSK_loops_on_strokes") col.prop(scn, "SURFSK_automatic_join") col.prop(scn, "SURFSK_keep_strokes") - + class VIEW3D_PT_tools_SURFSK_curve(Panel): bl_space_type = 'VIEW_3D' bl_region_type = 'UI' @@ -168,21 +168,21 @@ def get_strokes_type(context): if context.scene.bsurfaces.SURFSK_guide == 'Annotation': try: strokes = bpy.data.grease_pencils[0].layers.active.active_frame.strokes - + strokes_num = len(strokes) if strokes_num > 0: strokes_type = "GP_ANNOTATION" except: strokes_type = "NO_STROKES" - + # Check if they are grease pencil if context.scene.bsurfaces.SURFSK_guide == 'GPencil': try: global global_gpencil_object gpencil = bpy.data.objects[global_gpencil_object] strokes = gpencil.data.layers.active.active_frame.strokes - + strokes_num = len(strokes) if strokes_num > 0: @@ -198,7 +198,7 @@ def get_strokes_type(context): if ob.type == "CURVE": strokes_type = "EXTERNAL_CURVE" strokes_num = len(ob.data.splines) - + # Check if there is any non-bezier spline for i in range(len(ob.data.splines)): if ob.data.splines[i].type != "BEZIER": @@ -215,7 +215,7 @@ def get_strokes_type(context): global global_mesh_object self.main_object = bpy.data.objects[global_mesh_object] total_vert_sel = len([v for v in self.main_object.data.vertices if v.select]) - + # Check if there is a single stroke without any selection in the object if strokes_num == 1 and total_vert_sel == 0: if strokes_type == "EXTERNAL_CURVE": @@ -227,13 +227,13 @@ def get_strokes_type(context): strokes_type = "SELECTION_ALONE" except: pass - + return strokes_type # ---------------------------- # Surface generator operator -class GPENCIL_OT_SURFSK_add_surface(Operator): - bl_idname = "gpencil.surfsk_add_surface" +class MESH_OT_SURFSK_add_surface(Operator): + bl_idname = "mesh.surfsk_add_surface" bl_label = "Bsurfaces add surface" bl_description = "Generates surfaces from grease pencil strokes, bezier curves or loose edges" bl_options = {'REGISTER', 'UNDO'} @@ -265,7 +265,7 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): selection_U2_is_closed: BoolProperty( default=False ) - + edges_U: IntProperty( name="Cross", description="Number of face-loops crossing the strokes", @@ -360,7 +360,7 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): col.separator() row.separator() col.prop(self, "join_stretch_factor") - + col.prop(self, "keep_strokes") # Get an ordered list of a chain of vertices @@ -1061,7 +1061,7 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='EDIT') bpy.ops.mesh.normals_make_consistent(inside=False) bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') - + self.update() return num_faces_created @@ -1693,40 +1693,44 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): # and compare it with the distance they would have if joined. # If they don't change much, that vert can be joined merge_actual_vert = True - if len(surface_connected_verts[i]) < 4: - for c_v_idx in surface_connected_verts[i]: - points_original = [] - points_original.append(ob_surface.data.vertices[c_v_idx].co) - points_original.append(ob_surface.data.vertices[i].co) + try: + if len(surface_connected_verts[i]) < 4: + for c_v_idx in surface_connected_verts[i]: + points_original = [] + points_original.append(ob_surface.data.vertices[c_v_idx].co) + points_original.append(ob_surface.data.vertices[i].co) - points_target = [] - points_target.append(ob_surface.data.vertices[c_v_idx].co) - points_target.append(final_ob_duplicate.data.vertices[i].co) + points_target = [] + points_target.append(ob_surface.data.vertices[c_v_idx].co) + points_target.append(final_ob_duplicate.data.vertices[i].co) - vec_A = points_original[0] - points_original[1] - vec_B = points_target[0] - points_target[1] + vec_A = points_original[0] - points_original[1] + vec_B = points_target[0] - points_target[1] - dist_A = (points_original[0] - points_original[1]).length - dist_B = (points_target[0] - points_target[1]).length + dist_A = (points_original[0] - points_original[1]).length + dist_B = (points_target[0] - points_target[1]).length - if not ( - points_original[0] == points_original[1] or - points_target[0] == points_target[1] - ): # If any vector's length is zero + if not ( + points_original[0] == points_original[1] or + points_target[0] == points_target[1] + ): # If any vector's length is zero - angle = vec_A.angle(vec_B) / pi - else: - angle = 0 + angle = vec_A.angle(vec_B) / pi + else: + angle = 0 - # Set a range of acceptable variation in the connected edges - if dist_B > dist_A * 1.7 * self.join_stretch_factor or \ - dist_B < dist_A / 2 / self.join_stretch_factor or \ - angle >= 0.15 * self.join_stretch_factor: + # Set a range of acceptable variation in the connected edges + if dist_B > dist_A * 1.7 * self.join_stretch_factor or \ + dist_B < dist_A / 2 / self.join_stretch_factor or \ + angle >= 0.15 * self.join_stretch_factor: - merge_actual_vert = False - break - else: - merge_actual_vert = False + merge_actual_vert = False + break + else: + merge_actual_vert = False + except: + self.report({'WARNING'}, + "Crosshatch set incorrectly") if merge_actual_vert: coords = final_ob_duplicate.data.vertices[i].co @@ -1775,9 +1779,9 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): if len(self.main_object.modifiers) > 0: for m_idx in range(len(self.main_object.modifiers)): self.main_object.modifiers[m_idx].show_viewport = self.modifiers_prev_viewport_state[m_idx] - + self.update() - + return {'FINISHED'} def rectangular_surface(self, context): @@ -3078,9 +3082,9 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): bpy.ops.mesh.remove_doubles('INVOKE_REGION_WIN', threshold=0.0001) bpy.ops.mesh.normals_make_consistent('INVOKE_REGION_WIN', inside=False) bpy.ops.mesh.select_all('INVOKE_REGION_WIN', action='DESELECT') - + self.update() - + return{'FINISHED'} def update(self): @@ -3091,8 +3095,8 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): bpy.context.scene.bsurfaces.SURFSK_Shrinkwrap_offset = global_offset except: pass - - try: + + try: global global_color material = makeMaterial("BSurfaceMesh", global_color) if self.main_object.data.materials: @@ -3102,21 +3106,21 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): bpy.context.scene.bsurfaces.SURFSK_mesh_color = global_color except: pass - + try: global global_in_front self.main_object.show_in_front = global_in_front bpy.context.scene.bsurfaces.SURFSK_in_front = global_in_front except: pass - + try: global global_show_wire self.main_object.show_wire = global_show_wire bpy.context.scene.bsurfaces.SURFSK_show_wire = global_show_wire except: pass - + try: global global_shade_smooth if global_shade_smooth: @@ -3126,11 +3130,11 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): bpy.context.scene.bsurfaces.SURFSK_shade_smooth = global_shade_smooth except: pass - + return{'FINISHED'} - + def execute(self, context): - + if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') @@ -3143,9 +3147,9 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): self.report({'WARNING'}, "Specify the name of the object with retopology") return{"CANCELLED"} bpy.context.view_layer.objects.active = self.main_object - + self.update() - + if not self.is_fill_faces: bpy.ops.wm.context_set_value(data_path='tool_settings.mesh_select_mode', value='True, False, False') @@ -3195,7 +3199,7 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): self.rectangular_surface(context) elif strokes_for_crosshatch: self.crosshatch_surface_execute(context) - + #Set Shade smooth to new polygons bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') global global_shade_smooth @@ -3220,14 +3224,14 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): self.main_splines.data.materials.append(mat) else: bpy.ops.object.delete({"selected_objects": [self.main_splines]}) - + # Delete grease pencil strokes if self.strokes_type == "GP_STROKES" and not self.stopping_errors: try: bpy.context.scene.bsurfaces.SURFSK_gpencil.data.layers.active.clear() except: pass - + # Delete annotations if self.strokes_type == "GP_ANNOTATION" and not self.stopping_errors: try: @@ -3242,19 +3246,19 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): bsurfaces_props.SURFSK_automatic_join = self.automatic_join bsurfaces_props.SURFSK_loops_on_strokes = self.loops_on_strokes bsurfaces_props.SURFSK_keep_strokes = self.keep_strokes - + bpy.ops.object.select_all('INVOKE_REGION_WIN', action='DESELECT') self.main_object.select_set(True) bpy.context.view_layer.objects.active = self.main_object bpy.ops.object.editmode_toggle('INVOKE_REGION_WIN') - + self.update() - + return{'FINISHED'} def invoke(self, context, event): - + if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') @@ -3273,9 +3277,9 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): except: self.report({'WARNING'}, "Specify the name of the object with retopology") return{"CANCELLED"} - + self.update() - + self.main_object_selected_verts_count = len([v for v in self.main_object.data.vertices if v.select]) bpy.ops.wm.context_set_value(data_path='tool_settings.mesh_select_mode', @@ -3300,13 +3304,13 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): gp = bpy.data.objects[global_gpencil_object] self.original_curve = conver_gpencil_to_curve(self, context, gp, 'GPensil') self.using_external_curves = False - + elif self.strokes_type == "GP_ANNOTATION": # Convert grease pencil strokes to curve gp = bpy.data.grease_pencils["Annotations"] self.original_curve = conver_gpencil_to_curve(self, context, gp, 'Annotation') self.using_external_curves = False - + elif self.strokes_type == "EXTERNAL_CURVE": global global_curve_object self.original_curve = bpy.data.objects[global_curve_object] @@ -3455,7 +3459,7 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): # Delete temporary strokes curve object bpy.ops.object.delete({"selected_objects": [self.temporary_curve]}) - + # Set again since "execute()" will turn it again to its initial value self.execute(context) @@ -3466,18 +3470,18 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): bpy.context.scene.bsurfaces.SURFSK_gpencil.data.layers.active.clear() except: pass - + # Delete annotation strokes elif self.strokes_type == "GP_ANNOTATION": try: bpy.data.grease_pencils[0].layers.active.clear() except: pass - + bpy.ops.object.editmode_toggle('INVOKE_REGION_WIN') bpy.ops.object.delete({"selected_objects": [self.original_curve]}) bpy.ops.object.editmode_toggle('INVOKE_REGION_WIN') - + return {"FINISHED"} else: return{"CANCELLED"} @@ -3518,24 +3522,22 @@ class GPENCIL_OT_SURFSK_add_surface(Operator): else: return{"CANCELLED"} - + # ---------------------------- # Init operator -class GPENCIL_OT_SURFSK_init(Operator): - bl_idname = "gpencil.surfsk_init" +class MESH_OT_SURFSK_init(Operator): + bl_idname = "mesh.surfsk_init" bl_label = "Bsurfaces initialize" bl_description = "Add an empty mesh object with useful settings" bl_options = {'REGISTER', 'UNDO'} - active_object: PointerProperty(type=bpy.types.Object) - def execute(self, context): - + bs = bpy.context.scene.bsurfaces - + if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') - + global global_color global global_offset global global_in_front @@ -3543,29 +3545,29 @@ class GPENCIL_OT_SURFSK_init(Operator): global global_shade_smooth global global_mesh_object global global_gpencil_object - + if bs.SURFSK_mesh == None: bpy.ops.object.select_all('INVOKE_REGION_WIN', action='DESELECT') mesh = bpy.data.meshes.new('BSurfaceMesh') mesh_object = object_utils.object_data_add(context, mesh) mesh_object.select_set(True) bpy.context.view_layer.objects.active = mesh_object - + mesh_object.show_all_edges = True global_in_front = bpy.context.scene.bsurfaces.SURFSK_in_front mesh_object.show_in_front = global_in_front mesh_object.display_type = 'SOLID' mesh_object.show_wire = True - + global_shade_smooth = bpy.context.scene.bsurfaces.SURFSK_shade_smooth if global_shade_smooth: bpy.ops.object.shade_smooth() else: bpy.ops.object.shade_flat() - + global_show_wire = bpy.context.scene.bsurfaces.SURFSK_show_wire mesh_object.show_wire = global_show_wire - + global_color = bpy.context.scene.bsurfaces.SURFSK_mesh_color material = makeMaterial("BSurfaceMesh", global_color) mesh_object.data.materials.append(material) @@ -3581,7 +3583,7 @@ class GPENCIL_OT_SURFSK_init(Operator): global_mesh_object = mesh_object.name bpy.context.scene.bsurfaces.SURFSK_mesh = bpy.data.objects[global_mesh_object] - + bpy.context.scene.tool_settings.snap_elements = {'FACE'} bpy.context.scene.tool_settings.use_snap = True bpy.context.scene.tool_settings.use_snap_self = False @@ -3592,7 +3594,7 @@ class GPENCIL_OT_SURFSK_init(Operator): bpy.context.scene.tool_settings.use_mesh_automerge = True bpy.context.scene.tool_settings.double_threshold = 0.01 - + if context.scene.bsurfaces.SURFSK_guide == 'GPencil' and bs.SURFSK_gpencil == None: bpy.ops.object.select_all('INVOKE_REGION_WIN', action='DESELECT') bpy.ops.object.gpencil_add(radius=1.0, align='WORLD', location=(0.0, 0.0, 0.0), rotation=(0.0, 0.0, 0.0), type='EMPTY') @@ -3606,7 +3608,7 @@ class GPENCIL_OT_SURFSK_init(Operator): gpencil_object.data.stroke_depth_order = '3D' bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='PAINT_GPENCIL') bpy.ops.wm.tool_set_by_id(name="builtin_brush.Draw") - + if context.scene.bsurfaces.SURFSK_guide == 'Annotation': bpy.ops.wm.tool_set_by_id(name="builtin.annotate") bpy.context.scene.tool_settings.annotation_stroke_placement_view3d = 'SURFACE' @@ -3616,41 +3618,39 @@ class GPENCIL_OT_SURFSK_init(Operator): self.active_object = bpy.context.active_object else: self.active_object = None - + self.execute(context) return {"FINISHED"} - + # ---------------------------- # Add modifiers operator -class GPENCIL_OT_SURFSK_add_modifiers(Operator): - bl_idname = "gpencil.surfsk_add_modifiers" +class MESH_OT_SURFSK_add_modifiers(Operator): + bl_idname = "mesh.surfsk_add_modifiers" bl_label = "Add Mirror and others modifiers" bl_description = "Add modifiers: Mirror, Shrinkwrap, Subdivision, Solidify" bl_options = {'REGISTER', 'UNDO'} - active_object: PointerProperty(type=bpy.types.Object) - def execute(self, context): - + bs = bpy.context.scene.bsurfaces - + if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') - + if bs.SURFSK_mesh == None: self.report({'ERROR_INVALID_INPUT'}, "Please select Mesh of BSurface or click Initialize") else: mesh_object = bs.SURFSK_mesh - + try: mesh_object.select_set(True) except: self.report({'ERROR_INVALID_INPUT'}, "Mesh of BSurface does not exist") return {"CANCEL"} - + bpy.context.view_layer.objects.active = mesh_object - + try: shrinkwrap = mesh_object.modifiers["Shrinkwrap"] if self.active_object is not None and self.active_object != mesh_object: @@ -3668,7 +3668,7 @@ class GPENCIL_OT_SURFSK_add_modifiers(Operator): shrinkwrap.wrap_mode = 'OUTSIDE_SURFACE' shrinkwrap.show_on_cage = True shrinkwrap.offset = bpy.context.scene.bsurfaces.SURFSK_Shrinkwrap_offset - + try: mirror = mesh_object.modifiers["Mirror"] mirror.use_clip = True @@ -3676,13 +3676,13 @@ class GPENCIL_OT_SURFSK_add_modifiers(Operator): bpy.ops.object.modifier_add(type='MIRROR') mirror = mesh_object.modifiers["Mirror"] mirror.use_clip = True - + try: subsurf = mesh_object.modifiers["Subdivision"] except: bpy.ops.object.modifier_add(type='SUBSURF') subsurf = mesh_object.modifiers["Subdivision"] - + try: solidify = mesh_object.modifiers["Solidify"] solidify.thickness = 0.01 @@ -3705,8 +3705,8 @@ class GPENCIL_OT_SURFSK_add_modifiers(Operator): # ---------------------------- # Edit surface operator -class GPENCIL_OT_SURFSK_edit_surface(Operator): - bl_idname = "gpencil.surfsk_edit_surface" +class MESH_OT_SURFSK_edit_surface(Operator): + bl_idname = "mesh.surfsk_edit_surface" bl_label = "Bsurfaces edit surface" bl_description = "Edit surface mesh" bl_options = {'REGISTER', 'UNDO'} @@ -3719,18 +3719,18 @@ class GPENCIL_OT_SURFSK_edit_surface(Operator): bpy.context.view_layer.objects.active = bpy.context.scene.bsurfaces.SURFSK_mesh bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='EDIT') bpy.ops.wm.tool_set_by_id(name="builtin.select") - + def invoke(self, context, event): try: bpy.context.scene.bsurfaces.SURFSK_mesh.select_set(True) except: self.report({'WARNING'}, "Specify the name of the object with retopology") return{"CANCELLED"} - + self.execute(context) return {"FINISHED"} - + # ---------------------------- # Add strokes operator class GPENCIL_OT_SURFSK_add_strokes(Operator): @@ -3757,7 +3757,7 @@ class GPENCIL_OT_SURFSK_add_strokes(Operator): except: self.report({'WARNING'}, "Specify the name of the object with strokes") return{"CANCELLED"} - + self.execute(context) return {"FINISHED"} @@ -3774,12 +3774,12 @@ class GPENCIL_OT_SURFSK_edit_strokes(Operator): if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') bpy.ops.object.select_all('INVOKE_REGION_WIN', action='DESELECT') - + gpencil_object = bpy.context.scene.bsurfaces.SURFSK_gpencil - + gpencil_object.select_set(True) bpy.context.view_layer.objects.active = gpencil_object - + bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='EDIT_GPENCIL') try: bpy.ops.gpencil.select_all(action='SELECT') @@ -3823,15 +3823,15 @@ class GPENCIL_OT_SURFSK_annotation_to_curves(Operator): # Clean up curves curve.select_set(True) bpy.context.view_layer.objects.active = curve - + bpy.ops.wm.tool_set_by_id(name="builtin.select_box") - + return {"FINISHED"} def invoke(self, context, event): try: strokes = bpy.data.grease_pencils[0].layers.active.active_frame.strokes - + strokes_num = len(strokes) except: self.report({'WARNING'}, "Not active annotation") @@ -3866,12 +3866,12 @@ class GPENCIL_OT_SURFSK_strokes_to_curves(Operator): pass # Clean up curves - + curve.select_set(True) bpy.context.view_layer.objects.active = curve - + bpy.ops.wm.tool_set_by_id(name="builtin.select_box") - + return {"FINISHED"} def invoke(self, context, event): @@ -3900,16 +3900,16 @@ class GPENCIL_OT_SURFSK_add_annotation(Operator): return{"FINISHED"} def invoke(self, context, event): - + self.execute(context) return {"FINISHED"} - - + + # ---------------------------- # Edit curve operator -class GPENCIL_OT_SURFSK_edit_curve(Operator): - bl_idname = "gpencil.surfsk_edit_curve" +class CURVE_OT_SURFSK_edit_curve(Operator): + bl_idname = "curve.surfsk_edit_curve" bl_label = "Bsurfaces edit curve" bl_description = "Edit curve" bl_options = {'REGISTER', 'UNDO'} @@ -3921,14 +3921,14 @@ class GPENCIL_OT_SURFSK_edit_curve(Operator): bpy.context.scene.bsurfaces.SURFSK_curve.select_set(True) bpy.context.view_layer.objects.active = bpy.context.scene.bsurfaces.SURFSK_curve bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='EDIT') - + def invoke(self, context, event): try: bpy.context.scene.bsurfaces.SURFSK_curve.select_set(True) except: self.report({'WARNING'}, "Specify the name of the object with curve") return{"CANCELLED"} - + self.execute(context) return {"FINISHED"} @@ -4137,7 +4137,7 @@ class CURVE_OT_SURFSK_reorder_splines(Operator): bpy.context.scene.bsurfaces.SURFSK_gpencil.data.layers.active.clear() except: pass - + return {"FINISHED"} @@ -4308,13 +4308,13 @@ panels = ( VIEW3D_PT_tools_SURFSK_curve ) - + def conver_gpencil_to_curve(self, context, pencil, type): newCurve = bpy.data.curves.new(type + '_curve', type='CURVE') newCurve.dimensions = '3D' CurveObject = object_utils.object_data_add(context, newCurve) error = False - + if type == 'GPensil': try: strokes = pencil.data.layers.active.active_frame.strokes @@ -4332,14 +4332,14 @@ def conver_gpencil_to_curve(self, context, pencil, type): CurveObject.location = (0.0, 0.0, 0.0) CurveObject.rotation_euler = (0.0, 0.0, 0.0) CurveObject.scale = (1.0, 1.0, 1.0) - + if not error: for i, stroke in enumerate(strokes): stroke_points = strokes[i].points data_list = [ (point.co.x, point.co.y, point.co.z) for point in stroke_points ] points_to_add = len(data_list)-1 - + flat_list = [] for point in data_list: flat_list.extend(point) @@ -4347,7 +4347,7 @@ def conver_gpencil_to_curve(self, context, pencil, type): spline = newCurve.splines.new(type='BEZIER') spline.bezier_points.add(points_to_add) spline.bezier_points.foreach_set("co", flat_list) - + for point in spline.bezier_points: point.handle_left_type="AUTO" point.handle_right_type="AUTO" @@ -4377,7 +4377,7 @@ def update_panel(self, context): except Exception as e: print("\n[{}]\n{}\n\nError:\n{}".format(__name__, message, e)) pass - + def makeMaterial(name, diffuse): if name in bpy.data.materials: @@ -4402,7 +4402,7 @@ def update_mesh(self, context): print("Select mesh object") def update_gpencil(self, context): - try: + try: bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') bpy.ops.object.select_all(action='DESELECT') bpy.context.view_layer.update() @@ -4412,9 +4412,9 @@ def update_gpencil(self, context): bpy.context.view_layer.objects.active = bpy.data.objects[global_gpencil_object] except Exception as e: print("Select gpencil object") - + def update_curve(self, context): - try: + try: bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') bpy.ops.object.select_all(action='DESELECT') bpy.context.view_layer.update() @@ -4426,7 +4426,7 @@ def update_curve(self, context): print("Select curve object") def update_color(self, context): - try: + try: global global_color global global_mesh_object material = makeMaterial("BSurfaceMesh", bpy.context.scene.bsurfaces.SURFSK_mesh_color) @@ -4438,7 +4438,7 @@ def update_color(self, context): global_color = (diffuse_color[0], diffuse_color[1], diffuse_color[2], diffuse_color[3]) except Exception as e: print("Select mesh object") - + def update_Shrinkwrap_offset(self, context): try: global global_offset @@ -4448,7 +4448,7 @@ def update_Shrinkwrap_offset(self, context): modifier.offset = global_offset except Exception as e: print("Shrinkwrap modifier not found") - + def update_in_front(self, context): try: global global_in_front @@ -4466,33 +4466,33 @@ def update_show_wire(self, context): bpy.data.objects[global_mesh_object].show_wire = global_show_wire except Exception as e: print("Select mesh object") - + def update_shade_smooth(self, context): try: global global_shade_smooth global_shade_smooth = bpy.context.scene.bsurfaces.SURFSK_shade_smooth - + contex_mode = bpy.context.mode - + if bpy.ops.object.mode_set.poll(): bpy.ops.object.mode_set('INVOKE_REGION_WIN', mode='OBJECT') - + bpy.ops.object.select_all(action='DESELECT') global global_mesh_object global_mesh_object = bpy.context.scene.bsurfaces.SURFSK_mesh.name bpy.data.objects[global_mesh_object].select_set(True) - + if global_shade_smooth: bpy.ops.object.shade_smooth() else: bpy.ops.object.shade_flat() - + if contex_mode == "EDIT_MESH": bpy.ops.object.editmode_toggle('INVOKE_REGION_WIN') - + except Exception as e: print("Select mesh object") - + class BsurfPreferences(AddonPreferences): # this must match the addon name, use '__package__' @@ -4627,16 +4627,16 @@ class BsurfacesProps(PropertyGroup): ) classes = ( - GPENCIL_OT_SURFSK_init, - GPENCIL_OT_SURFSK_add_modifiers, - GPENCIL_OT_SURFSK_add_surface, - GPENCIL_OT_SURFSK_edit_surface, + MESH_OT_SURFSK_init, + MESH_OT_SURFSK_add_modifiers, + MESH_OT_SURFSK_add_surface, + MESH_OT_SURFSK_edit_surface, GPENCIL_OT_SURFSK_add_strokes, GPENCIL_OT_SURFSK_edit_strokes, GPENCIL_OT_SURFSK_strokes_to_curves, GPENCIL_OT_SURFSK_annotation_to_curves, GPENCIL_OT_SURFSK_add_annotation, - GPENCIL_OT_SURFSK_edit_curve, + CURVE_OT_SURFSK_edit_curve, CURVE_OT_SURFSK_reorder_splines, CURVE_OT_SURFSK_first_points, BsurfPreferences, @@ -4646,7 +4646,7 @@ classes = ( def register(): for cls in classes: bpy.utils.register_class(cls) - + for panel in panels: bpy.utils.register_class(panel) @@ -4656,7 +4656,7 @@ def register(): def unregister(): for panel in panels: bpy.utils.unregister_class(panel) - + for cls in classes: bpy.utils.unregister_class(cls)