[Bf-extensions-cvs] [3713f190] master: Curve Tools 2: Refactoring.

Spivak Vladimir cwolf3d noreply at git.blender.org
Sat Sep 7 01:34:19 CEST 2019


Commit: 3713f1903105134bafcbffbfd1f63fc066be5baa
Author: Spivak Vladimir (cwolf3d)
Date:   Sat Sep 7 02:33:23 2019 +0300
Branches: master
https://developer.blender.org/rBAC3713f1903105134bafcbffbfd1f63fc066be5baa

Curve Tools 2: Refactoring.

===================================================================

M	curve_tools/Operators.py
M	curve_tools/__init__.py

===================================================================

diff --git a/curve_tools/Operators.py b/curve_tools/Operators.py
index aa6e3ecf..e91fe6d1 100644
--- a/curve_tools/Operators.py
+++ b/curve_tools/Operators.py
@@ -398,8 +398,7 @@ def subdivide_cubic_bezier(p1, p2, p3, p4, t):
     return [p12, p123, p1234, p234, p34]
         
 def SurfaceFromBezier(surfacedata, points, center):
-    use_enter_edit_mode = bpy.context.preferences.edit.use_enter_edit_mode
-
+    
     len_points = len(points) - 1
     
     if len_points % 2 == 0:
@@ -427,8 +426,6 @@ def SurfaceFromBezier(surfacedata, points, center):
         p.select = True
     surfacespline1.use_endpoint_u = True
     surfacespline1.use_endpoint_v = True
-    
-    print(center)
 
     for i in range(0, half):
      
@@ -509,7 +506,7 @@ def SurfaceFromBezier(surfacedata, points, center):
         p.select = True
     surfacespline6.use_endpoint_u = True
     surfacespline6.use_endpoint_v = True
-            
+    
     bpy.ops.object.mode_set(mode = 'EDIT') 
     bpy.ops.curve.make_segment()
         
@@ -520,124 +517,11 @@ def SurfaceFromBezier(surfacedata, points, center):
         s.order_v = 4
         for p in s.points:
             p.select = False
-        
-    bpy.context.preferences.edit.use_enter_edit_mode = use_enter_edit_mode
-
-def SurfaceFrom4point(surfacedata, point1, point2, point3, point4):
-    use_enter_edit_mode = bpy.context.preferences.edit.use_enter_edit_mode
-
-    # 1
-    surfacespline1 = surfacedata.splines.new(type='NURBS')
-    surfacespline1.points.add(3)
-    surfacespline1.points[0].co = [point1.co.x, point1.co.y, point1.co.z, 1]
-    surfacespline1.points[1].co = [point1.handle_left.x, point1.handle_left.y, point1.handle_left.z, 1]
-    surfacespline1.points[2].co = [point4.handle_right.x, point4.handle_right.y, point4.handle_right.z, 1]
-    surfacespline1.points[3].co = [point4.co.x, point4.co.y, point4.co.z, 1]
-    for p in surfacespline1.points:
-        p.select = True
-    surfacespline1.use_endpoint_u = True
-    surfacespline1.use_endpoint_v = True
-    
-    # 2
-    surfacespline2 = surfacedata.splines.new(type='NURBS')
-    surfacespline2.points.add(3)
-    surfacespline2.points[0].co = [point1.handle_right.x, point1.handle_right.y, point1.handle_right.z, 1]
-    surfacespline2.points[1].co = [(point1.handle_right.x + point4.handle_left.x)/2,
-                                   (point1.handle_right.y + point4.handle_left.y)/2,
-                                   (point1.handle_right.z + point4.handle_left.z)/2, 1]
-    surfacespline2.points[2].co = [(point4.handle_left.x + point1.handle_right.x)/2,
-                                   (point4.handle_left.y + point1.handle_right.y)/2,
-                                   (point4.handle_left.z + point1.handle_right.z)/2, 1]
-    surfacespline2.points[3].co = [point4.handle_left.x, point4.handle_left.y, point4.handle_left.z, 1]
-    for p in surfacespline2.points:
-        p.select = True
-    surfacespline2.use_endpoint_u = True
-    surfacespline2.use_endpoint_v = True
-
-     # 3
-    surfacespline3 = surfacedata.splines.new(type='NURBS')
-    surfacespline3.points.add(3)
-    surfacespline3.points[0].co = [point2.handle_left.x, point2.handle_left.y, point2.handle_left.z, 1]
-    surfacespline3.points[1].co = [(point2.handle_left.x + point3.handle_right.x)/2,
-                                   (point2.handle_left.y + point3.handle_right.y)/2,
-                                   (point2.handle_left.z + point3.handle_right.z)/2, 1]
-    surfacespline3.points[2].co = [(point3.handle_right.x + point2.handle_left.x)/2,
-                                   (point3.handle_right.y + point2.handle_left.y)/2,
-                                   (point3.handle_right.z + point2.handle_left.z)/2, 1]
-    surfacespline3.points[3].co = [point3.handle_right.x, point3.handle_right.y, point3.handle_right.z, 1]
-    for p in surfacespline3.points:
-        p.select = True
-    surfacespline3.use_endpoint_u = True
-    surfacespline3.use_endpoint_v = True
-
-     # 4
-    surfacespline4 = surfacedata.splines.new(type='NURBS')
-    surfacespline4.points.add(3)
-    surfacespline4.points[0].co = [point2.co.x, point2.co.y, point2.co.z, 1]
-    surfacespline4.points[1].co = [point2.handle_right.x, point2.handle_right.y, point2.handle_right.z, 1]
-    surfacespline4.points[2].co = [point3.handle_left.x, point3.handle_left.y, point3.handle_left.z, 1]
-    surfacespline4.points[3].co = [point3.co.x, point3.co.y, point3.co.z, 1]
-    for p in surfacespline4.points:
-        p.select = True
-    surfacespline4.use_endpoint_u = True
-    surfacespline4.use_endpoint_v = True
-        
-    bpy.ops.object.mode_set(mode = 'EDIT') 
-    bpy.ops.curve.make_segment()
-    
-    for s in surfacedata.splines:
-        s.order_u = 4
-        s.order_v = 4
-        s.resolution_u = 4
-        s.resolution_v = 4
-        for p in s.points:
-            p.select = False
-        
-    bpy.context.preferences.edit.use_enter_edit_mode = use_enter_edit_mode
 
-class ConvertBezierRectangleToSurface(bpy.types.Operator):
-    bl_idname = "curvetools2.convert_bezier_rectangle_to_surface"
-    bl_label = "Convert Bezier Rectangle To Surface"
-    bl_description = "Convert Bezier Rectangle To Surface"
-    bl_options = {'REGISTER', 'UNDO'}
-
-    @classmethod
-    def poll(cls, context):
-        return Util.Selected1Curve()
-
-    def execute(self, context):
-        # main function
-        active_object = context.active_object
-        splines = active_object.data.splines
-        
-        surfacedata = bpy.data.curves.new('Surface', type='SURFACE')
-        surfaceobject = object_utils.object_data_add(context, surfacedata)
-        surfaceobject.matrix_world = active_object.matrix_world
-        surfaceobject.rotation_euler = active_object.rotation_euler
-        surfacedata.dimensions = '3D'
-        
-        n = 0
-        pp = []
-        for s in splines:
-            for p in s.bezier_points:
-                pp.append(p)
-                n += 1
-        
-        SurfaceFrom4point(surfacedata, pp[0], pp[1], pp[2], pp[3])
-                          
-        splines = surfaceobject.data.splines
-        for s in splines:
-            s.order_u = 4
-            s.order_v = 4
-            s.resolution_u = 4
-            s.resolution_v = 4
-
-        return {'FINISHED'}
-
-class ConvertMeshToBezier(bpy.types.Operator):
-    bl_idname = "curvetools2.convert_mesh_to_bezier"
-    bl_label = "Convert Mesh to Bezier"
-    bl_description = "Convert Mesh to Bezier"
+class ConvertSelectedFacesToBezier(bpy.types.Operator):
+    bl_idname = "curvetools2.convert_selected_face_to_bezier"
+    bl_label = "Convert selected faces to Bezier"
+    bl_description = "Convert selected faces to Bezier"
     bl_options = {'REGISTER', 'UNDO'}
 
     @classmethod
@@ -646,6 +530,7 @@ class ConvertMeshToBezier(bpy.types.Operator):
 
     def execute(self, context):
         # main function
+        bpy.ops.object.mode_set(mode = 'OBJECT')
         active_object = context.active_object
         meshdata = active_object.data
         curvedata = bpy.data.curves.new('Curve' + active_object.name, type='CURVE')
@@ -653,21 +538,22 @@ class ConvertMeshToBezier(bpy.types.Operator):
         curvedata.dimensions = '3D'
         
         for poly in meshdata.polygons:
-            newSpline = curvedata.splines.new(type='BEZIER')
-            newSpline.use_cyclic_u = True
-            newSpline.bezier_points.add(poly.loop_total - 1)
-            npoint = 0
-            for loop_index in range(poly.loop_start, poly.loop_start + poly.loop_total):
-                newSpline.bezier_points[npoint].co = meshdata.vertices[meshdata.loops[loop_index].vertex_index].co
-                newSpline.bezier_points[npoint].handle_left_type = 'VECTOR'
-                newSpline.bezier_points[npoint].handle_right_type = 'VECTOR'
-                newSpline.bezier_points[npoint].select_control_point = True
-                newSpline.bezier_points[npoint].select_left_handle = True
-                newSpline.bezier_points[npoint].select_right_handle = True
-                npoint += 1
+            if poly.select:
+                newSpline = curvedata.splines.new(type='BEZIER')
+                newSpline.use_cyclic_u = True
+                newSpline.bezier_points.add(poly.loop_total - 1)
+                npoint = 0
+                for loop_index in range(poly.loop_start, poly.loop_start + poly.loop_total):
+                    newSpline.bezier_points[npoint].co = meshdata.vertices[meshdata.loops[loop_index].vertex_index].co
+                    newSpline.bezier_points[npoint].handle_left_type = 'VECTOR'
+                    newSpline.bezier_points[npoint].handle_right_type = 'VECTOR'
+                    newSpline.bezier_points[npoint].select_control_point = True
+                    newSpline.bezier_points[npoint].select_left_handle = True
+                    newSpline.bezier_points[npoint].select_right_handle = True
+                    npoint += 1
                                   
         return {'FINISHED'}
-
+        
 class ConvertBezierToSurface(bpy.types.Operator):
     bl_idname = "curvetools2.convert_bezier_to_surface"
     bl_label = "Convert Bezier to Surface"
@@ -680,12 +566,30 @@ class ConvertBezierToSurface(bpy.types.Operator):
             description="Consider center points"
             )
             
+    Resolution_U: IntProperty(
+            name="Resolution_U",
+            default=4,
+            min=1, max=64,
+            soft_min=1,
+            description="Surface resolution U"
+            )
+            
+    Resolution_V: IntProperty(
+            name="Resolution_V",
+            default=4,
+            min=1, max=64,
+            soft_min=1,
+            description="Surface resolution V"
+            )
+            
     def draw(self, context):
         layout = self.layout
 
          # general options
         col = layout.column()
         col.prop(self, 'Center')
+        col.prop(self, 'Resolution_U')
+        col.prop(self, 'Resolution_V')
     
     @classmethod
     def poll(cls, context):
@@ -693,7 +597,7 @@ class ConvertBezierToSurface(bpy.types.Operator):
 
     def execute(self, context):
      

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list