[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