[Bf-extensions-cvs] [7cba50c8] master: Curve Tools 2: Refactoring. Added converter from mesh to bezier curve and bezier curve to surface.

Spivak Vladimir cwolf3d noreply at git.blender.org
Fri Sep 6 01:44:12 CEST 2019


Commit: 7cba50c84cd415cbdfc900ee2c4e7b3f59d5214c
Author: Spivak Vladimir (cwolf3d)
Date:   Fri Sep 6 02:43:29 2019 +0300
Branches: master
https://developer.blender.org/rBAC7cba50c84cd415cbdfc900ee2c4e7b3f59d5214c

Curve Tools 2: Refactoring. Added converter from mesh to bezier curve and bezier curve to surface.

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

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

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

diff --git a/curve_tools/Operators.py b/curve_tools/Operators.py
index 327db0ee..aa6e3ecf 100644
--- a/curve_tools/Operators.py
+++ b/curve_tools/Operators.py
@@ -11,44 +11,6 @@ from . import CurveIntersections
 from . import Util
 from . import Surfaces
 
-
-
-class OperatorSelectionInfo(bpy.types.Operator):
-    bl_idname = "curvetools2.operatorselectioninfo"
-    bl_label = "Selection Info"
-    bl_description = "Maintains a list of selected objects in the order they were selected"
-
-
-    @classmethod
-    def poll(cls, context):
-        selectedObjectNames = Properties.CurveTools2SelectedObject.GetSelectedObjectNames()
-        selectedBlenderObjectNames = Properties.CurveTools2SelectedObject.GetSelectedBlenderObjectNames()
-
-        sleepTime = 0.02
-
-        lock = threading.Lock()
-        lock_holder = threading.Thread(target = Properties.CurveTools2SelectedObject.UpdateThreadTarget, args=(lock, sleepTime, selectedObjectNames, selectedBlenderObjectNames), name='OperatorSelectionInfoThread')
-        # lock_holder = threading.Thread(target = Properties.CurveTools2SelectedObject.UpdateThreadTarget2, args=(lock, sleepTime, selectedObjectNames, selectedBlenderObjectNames, context), name='OperatorSelectionInfoThread')
-        lock_holder.setDaemon(True)
-        lock_holder.start()
-
-        return True
-
-
-    def execute(self, context):
-        nrSelectedObjects = bpy.context.scene.curvetools.NrSelectedObjects
-
-        self.report({'INFO'}, "Selection Info: nrSelectedObjects: %d" % nrSelectedObjects)
-
-        selectedObjects = bpy.context.scene.curvetools.SelectedObjects
-        selectedObjectValues = selectedObjects.values()
-        for i, selectedObject in enumerate(selectedObjectValues):
-            print("--", "selected object %d of %d: %s" % (i + 1, nrSelectedObjects, selectedObject.name))
-
-        return {'FINISHED'}
-
-
-
 # 1 CURVE SELECTED
 # ################
 class OperatorCurveInfo(bpy.types.Operator):
@@ -425,7 +387,213 @@ class OperatorSplinesJoinNeighbouring(bpy.types.Operator):
             self.report({'INFO'}, "Applied %d joins on %d splines; resulting nrSplines: %d" % (nrJoins, nrSplines, curve.nrSplines))
 
         return {'FINISHED'}
-
+        
+def subdivide_cubic_bezier(p1, p2, p3, p4, t):
+    p12 = (p2 - p1) * t + p1
+    p23 = (p3 - p2) * t + p2
+    p34 = (p4 - p3) * t + p3
+    p123 = (p23 - p12) * t + p12
+    p234 = (p34 - p23) * t + p23
+    p1234 = (p234 - p123) * t + p123
+    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:
+        h = subdivide_cubic_bezier(
+                        points[len_points].co, points[len_points].handle_right,
+                        points[0].handle_left, points[0].co, 0.5
+                        )
+        points.add(1)
+        len_points = len(points) - 1
+        points[len_points - 1].handle_right = h[0]
+        points[len_points].handle_left = h[1]
+        points[len_points].co =  h[2]
+        points[len_points].handle_right = h[3]
+        points[0].handle_left =  h[4]
+        
+    half = round((len_points + 1)/2) - 1
+    # 1
+    surfacespline1 = surfacedata.splines.new(type='NURBS')
+    surfacespline1.points.add(3)
+    surfacespline1.points[0].co = [points[0].co.x, points[0].co.y, points[0].co.z, 1]
+    surfacespline1.points[1].co = [points[0].handle_left.x, points[0].handle_left.y, points[0].handle_left.z, 1]
+    surfacespline1.points[2].co = [points[len_points].handle_right.x,points[len_points].handle_right.y, points[len_points].handle_right.z, 1]
+    surfacespline1.points[3].co = [points[len_points].co.x, points[len_points].co.y, points[len_points].co.z, 1]
+    for p in surfacespline1.points:
+        p.select = True
+    surfacespline1.use_endpoint_u = True
+    surfacespline1.use_endpoint_v = True
+    
+    print(center)
+
+    for i in range(0, half):
+     
+        if center:
+            # 2
+            surfacespline2 = surfacedata.splines.new(type='NURBS')
+            surfacespline2.points.add(3)
+            surfacespline2.points[0].co = [points[i].co.x, points[i].co.y, points[i].co.z, 1]
+            surfacespline2.points[1].co = [(points[i].co.x + points[len_points - i].co.x)/2,
+                                           (points[i].co.y + points[len_points - i].co.y)/2,
+                                           (points[i].co.z + points[len_points - i].co.z)/2, 1]
+            surfacespline2.points[2].co = [(points[len_points - i].co.x + points[i].co.x)/2,
+                                           (points[len_points - i].co.y + points[i].co.y)/2,
+                                           (points[len_points - i].co.z + points[i].co.z)/2, 1]
+            surfacespline2.points[3].co = [points[len_points - i].co.x, points[len_points - i].co.y, points[len_points - i].co.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 = [points[i].handle_right.x, points[i].handle_right.y, points[i].handle_right.z, 1]
+        surfacespline3.points[1].co = [(points[i].handle_right.x + points[len_points - i].handle_left.x)/2,
+                                       (points[i].handle_right.y + points[len_points - i].handle_left.y)/2,
+                                       (points[i].handle_right.z + points[len_points - i].handle_left.z)/2, 1]
+        surfacespline3.points[2].co = [(points[len_points - i].handle_left.x + points[i].handle_right.x)/2,
+                                       (points[len_points - i].handle_left.y + points[i].handle_right.y)/2,
+                                       (points[len_points - i].handle_left.z + points[i].handle_right.z)/2, 1]
+        surfacespline3.points[3].co = [points[len_points - i].handle_left.x, points[len_points - i].handle_left.y, points[len_points - i].handle_left.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 = [points[i + 1].handle_left.x, points[i + 1].handle_left.y, points[i + 1].handle_left.z, 1]
+        surfacespline4.points[1].co = [(points[i + 1].handle_left.x + points[len_points - i - 1].handle_right.x)/2,
+                                       (points[i + 1].handle_left.y + points[len_points - i - 1].handle_right.y)/2,
+                                       (points[i + 1].handle_left.z + points[len_points - i - 1].handle_right.z)/2, 1]
+        surfacespline4.points[2].co = [(points[len_points - i - 1].handle_right.x + points[i + 1].handle_left.x)/2,
+                                       (points[len_points - i - 1].handle_right.y + points[i + 1].handle_left.y)/2,
+                                       (points[len_points - i - 1].handle_right.z + points[i + 1].handle_left.z)/2, 1]
+        surfacespline4.points[3].co = [points[len_points - i - 1].handle_right.x, points[len_points - i - 1].handle_right.y, points[len_points - i - 1].handle_right.z, 1]
+        for p in surfacespline4.points:
+            p.select = True
+        surfacespline4.use_endpoint_u = True
+        surfacespline4.use_endpoint_v = True
+        
+        if center:
+            # 5
+            surfacespline5 = surfacedata.splines.new(type='NURBS')
+            surfacespline5.points.add(3)
+            surfacespline5.points[0].co = [points[i + 1].co.x, points[i + 1].co.y, points[i + 1].co.z, 1]
+            surfacespline5.points[1].co = [(points[i + 1].co.x + points[len_points - i - 1].co.x)/2,
+                                           (points[i + 1].co.y + points[len_points - i - 1].co.y)/2,
+                                           (points[i + 1].co.z + points[len_points - i - 1].co.z)/2, 1]
+            surfacespline5.points[2].co = [(points[len_points - i - 1].co.x + points[i + 1].co.x)/2,
+                                           (points[len_points - i - 1].co.y + points[i + 1].co.y)/2,
+                                           (points[len_points - i - 1].co.z + points[i + 1].co.z)/2, 1]
+            surfacespline5.points[3].co = [points[len_points - i - 1].co.x, points[len_points - i - 1].co.y, points[len_points - i - 1].co.z, 1]
+            for p in surfacespline5.points:
+                p.select = True
+            surfacespline5.use_endpoint_u = True
+            surfacespline5.use_endpoint_v = True
+        
+    # 6
+    surfacespline6 = surfacedata.splines.new(type='NURBS')
+    surfacespline6.points.add(3)
+    surfacespline6.points[0].co = [points[half].co.x, points[half].co.y, points[half].co.z, 1]
+    surfacespline6.points[1].co = [points[half].handle_right.x, points[half].handle_right.y, points[half].handle_right.z, 1]
+    surfacespline6.points[2].co = [points[half+1].handle_left.x, points[half+1].handle_left.y, points[half+1].handle_left.z, 1]
+    surfacespline6.points[3].co = [points[half+1].co.x, points[half+1].co.y, points[half+1].co.z, 1]
+    for p in surfacespline6.points:
+        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()
+        
+    for s in surfacedata.splines:
+        s.resolution_u = 4
+        s.resolution_v = 4
+        s.order_u = 4
+        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)


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list