Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpivak Vladimir (cwolf3d) <cwolf3d@gmail.com>2019-09-09 01:00:32 +0300
committerSpivak Vladimir (cwolf3d) <cwolf3d@gmail.com>2019-09-09 01:00:32 +0300
commit14abe13dc890ba8fc7f78723ad67533ec2146aff (patch)
tree2e42006a4bc46354248f14ef9c7f978549ed0682 /add_curve_extra_objects
parent6f7d7c35dda1a0b3b6ec932d2c04ecd7d69bafbd (diff)
Add Curve: Extra Objects: now fillet and divide function doing for all selected points
Diffstat (limited to 'add_curve_extra_objects')
-rw-r--r--add_curve_extra_objects/add_curve_simple.py268
1 files changed, 142 insertions, 126 deletions
diff --git a/add_curve_extra_objects/add_curve_simple.py b/add_curve_extra_objects/add_curve_simple.py
index af0bb406..9873e5a5 100644
--- a/add_curve_extra_objects/add_curve_simple.py
+++ b/add_curve_extra_objects/add_curve_simple.py
@@ -19,7 +19,7 @@
bl_info = {
"name": "Simple Curve",
"author": "Spivak Vladimir (http://cwolf3d.korostyshev.net)",
- "version": (1, 5, 5),
+ "version": (1, 6, 0),
"blender": (2, 80, 0),
"location": "View3D > Add > Curve",
"description": "Adds Simple Curve",
@@ -1349,84 +1349,91 @@ class BezierPointsFillet(Operator):
if bpy.ops.object.mode_set.poll():
bpy.ops.object.mode_set(mode='EDIT')
- spline = bpy.context.object.data.splines.active
+ splines = bpy.context.object.data.splines
bpy.ops.curve.spline_type_set(type='BEZIER')
-
+
bpy.ops.curve.handle_type_set(type='VECTOR')
-
- n = 0
- ii = []
- for p in spline.bezier_points:
- if p.select_control_point:
- ii.append(n)
- n += 1
- else:
- n += 1
-
- if n > 2:
- jn = 0
- for j in ii:
-
- j += jn
-
- selected_all = [p for p in spline.bezier_points]
-
- bpy.ops.curve.select_all(action='DESELECT')
-
- if j != 0 and j != n - 1:
- selected_all[j].select_control_point = True
- selected_all[j + 1].select_control_point = True
- bpy.ops.curve.subdivide()
- selected_all = [p for p in spline.bezier_points]
- selected4 = [selected_all[j - 1], selected_all[j],
- selected_all[j + 1], selected_all[j + 2]]
- jn += 1
+ s = []
+ for spline in splines:
+ n = 0
+ ii = []
+ for p in spline.bezier_points:
+ if p.select_control_point:
+ ii.append(n)
n += 1
-
- elif j == 0:
- selected_all[j].select_control_point = True
- selected_all[j + 1].select_control_point = True
- bpy.ops.curve.subdivide()
- selected_all = [p for p in spline.bezier_points]
- selected4 = [selected_all[n], selected_all[0],
- selected_all[1], selected_all[2]]
- jn += 1
+ else:
n += 1
-
- elif j == n - 1:
- selected_all[j].select_control_point = True
- selected_all[j - 1].select_control_point = True
- bpy.ops.curve.subdivide()
+ s.append(ii)
+
+ sn = 0
+ for spline in splines:
+ ii = s[sn]
+ n = len(spline.bezier_points)
+ if n > 2:
+ jn = 0
+ for j in ii:
+
+ j += jn
+
selected_all = [p for p in spline.bezier_points]
- selected4 = [selected_all[0], selected_all[n],
- selected_all[n - 1], selected_all[n - 2]]
-
- selected4[2].co = selected4[1].co
- s1 = Vector(selected4[0].co) - Vector(selected4[1].co)
- s2 = Vector(selected4[3].co) - Vector(selected4[2].co)
- s1.normalize()
- s11 = Vector(selected4[1].co) + s1 * self.Fillet_radius
- selected4[1].co = s11
- s2.normalize()
- s22 = Vector(selected4[2].co) + s2 * self.Fillet_radius
- selected4[2].co = s22
-
- if self.Fillet_Type == 'Round':
- if j != n - 1:
+
+ bpy.ops.curve.select_all(action='DESELECT')
+
+ if j != 0 and j != n - 1:
+ selected_all[j].select_control_point = True
+ selected_all[j + 1].select_control_point = True
+ bpy.ops.curve.subdivide()
+ selected_all = [p for p in spline.bezier_points]
+ selected4 = [selected_all[j - 1], selected_all[j],
+ selected_all[j + 1], selected_all[j + 2]]
+ jn += 1
+ n += 1
+
+ elif j == 0:
+ selected_all[j].select_control_point = True
+ selected_all[j + 1].select_control_point = True
+ bpy.ops.curve.subdivide()
+ selected_all = [p for p in spline.bezier_points]
+ selected4 = [selected_all[n], selected_all[0],
+ selected_all[1], selected_all[2]]
+ jn += 1
+ n += 1
+
+ elif j == n - 1:
+ selected_all[j].select_control_point = True
+ selected_all[j - 1].select_control_point = True
+ bpy.ops.curve.subdivide()
+ selected_all = [p for p in spline.bezier_points]
+ selected4 = [selected_all[0], selected_all[n],
+ selected_all[n - 1], selected_all[n - 2]]
+
+ selected4[2].co = selected4[1].co
+ s1 = Vector(selected4[0].co) - Vector(selected4[1].co)
+ s2 = Vector(selected4[3].co) - Vector(selected4[2].co)
+ s1.normalize()
+ s11 = Vector(selected4[1].co) + s1 * self.Fillet_radius
+ selected4[1].co = s11
+ s2.normalize()
+ s22 = Vector(selected4[2].co) + s2 * self.Fillet_radius
+ selected4[2].co = s22
+
+ if self.Fillet_Type == 'Round':
+ if j != n - 1:
+ selected4[2].handle_right_type = 'VECTOR'
+ selected4[1].handle_left_type = 'VECTOR'
+ selected4[1].handle_right_type = 'ALIGNED'
+ selected4[2].handle_left_type = 'ALIGNED'
+ else:
+ selected4[1].handle_right_type = 'VECTOR'
+ selected4[2].handle_left_type = 'VECTOR'
+ selected4[2].handle_right_type = 'ALIGNED'
+ selected4[1].handle_left_type = 'ALIGNED'
+ if self.Fillet_Type == 'Chamfer':
selected4[2].handle_right_type = 'VECTOR'
selected4[1].handle_left_type = 'VECTOR'
- selected4[1].handle_right_type = 'ALIGNED'
- selected4[2].handle_left_type = 'ALIGNED'
- else:
selected4[1].handle_right_type = 'VECTOR'
selected4[2].handle_left_type = 'VECTOR'
- selected4[2].handle_right_type = 'ALIGNED'
- selected4[1].handle_left_type = 'ALIGNED'
- if self.Fillet_Type == 'Chamfer':
- selected4[2].handle_right_type = 'VECTOR'
- selected4[1].handle_left_type = 'VECTOR'
- selected4[1].handle_right_type = 'VECTOR'
- selected4[2].handle_left_type = 'VECTOR'
+ sn += 1
return {'FINISHED'}
@@ -1469,64 +1476,73 @@ class BezierDivide(Operator):
if bpy.ops.object.mode_set.poll():
bpy.ops.object.mode_set(mode='EDIT')
- spline = bpy.context.object.data.splines.active
- bpy.ops.curve.spline_type_set(type='BEZIER')
-
- n = 0
- ii = []
- for p in spline.bezier_points:
- if p.select_control_point:
- ii.append(n)
- n += 1
- else:
- n += 1
-
- if n > 2:
- jn = 0
- for j in ii:
+ splines = bpy.context.object.data.splines
+ s = []
+ for spline in splines:
+ bpy.ops.curve.spline_type_set(type='BEZIER')
- selected_all = [p for p in spline.bezier_points]
-
- bpy.ops.curve.select_all(action='DESELECT')
-
- if (j in ii) and (j + 1 in ii):
- selected_all[j + jn].select_control_point = True
- selected_all[j + 1 + jn].select_control_point = True
- h = subdivide_cubic_bezier(
- selected_all[j + jn].co, selected_all[j + jn].handle_right,
- selected_all[j + 1 + jn].handle_left, selected_all[j + 1 + jn].co, self.Bezier_t / 100
- )
- bpy.ops.curve.subdivide(1)
- selected_all = [p for p in spline.bezier_points]
- selected_all[j + jn].handle_right_type = 'FREE'
- selected_all[j + jn].handle_right = h[0]
- selected_all[j + 1 + jn].co = h[2]
- selected_all[j + 1 + jn].handle_left_type = 'FREE'
- selected_all[j + 1 + jn].handle_left = h[1]
- selected_all[j + 1 + jn].handle_right_type = 'FREE'
- selected_all[j + 1 + jn].handle_right = h[3]
- selected_all[j + 2 + jn].handle_left_type = 'FREE'
- selected_all[j + 2 + jn].handle_left = h[4]
- jn += 1
-
- if j == n - 1 and (0 in ii) and spline.use_cyclic_u:
- selected_all[j + jn].select_control_point = True
- selected_all[0].select_control_point = True
- h = subdivide_cubic_bezier(
- selected_all[j + jn].co, selected_all[j + jn].handle_right,
- selected_all[0].handle_left, selected_all[0].co, self.Bezier_t / 100
- )
- bpy.ops.curve.subdivide(1)
+ n = 0
+ ii = []
+ for p in spline.bezier_points:
+ if p.select_control_point:
+ ii.append(n)
+ n += 1
+ else:
+ n += 1
+ s.append(ii)
+
+ sn = 0
+ for spline in splines:
+ ii = s[sn]
+ n = len(spline.bezier_points)
+ if n > 2:
+ jn = 0
+ for j in ii:
+
selected_all = [p for p in spline.bezier_points]
- selected_all[j + jn].handle_right_type = 'FREE'
- selected_all[j + jn].handle_right = h[0]
- selected_all[j + 1 + jn].co = h[2]
- selected_all[j + 1 + jn].handle_left_type = 'FREE'
- selected_all[j + 1 + jn].handle_left = h[1]
- selected_all[j + 1 + jn].handle_right_type = 'FREE'
- selected_all[j + 1 + jn].handle_right = h[3]
- selected_all[0].handle_left_type = 'FREE'
- selected_all[0].handle_left = h[4]
+
+ bpy.ops.curve.select_all(action='DESELECT')
+
+ if (j in ii) and (j + 1 in ii):
+ selected_all[j + jn].select_control_point = True
+ selected_all[j + 1 + jn].select_control_point = True
+ h = subdivide_cubic_bezier(
+ selected_all[j + jn].co, selected_all[j + jn].handle_right,
+ selected_all[j + 1 + jn].handle_left, selected_all[j + 1 + jn].co, self.Bezier_t / 100
+ )
+ bpy.ops.curve.subdivide(1)
+ selected_all = [p for p in spline.bezier_points]
+ selected_all[j + jn].handle_right_type = 'FREE'
+ selected_all[j + jn].handle_right = h[0]
+ selected_all[j + 1 + jn].co = h[2]
+ selected_all[j + 1 + jn].handle_left_type = 'FREE'
+ selected_all[j + 1 + jn].handle_left = h[1]
+ selected_all[j + 1 + jn].handle_right_type = 'FREE'
+ selected_all[j + 1 + jn].handle_right = h[3]
+ selected_all[j + 2 + jn].handle_left_type = 'FREE'
+ selected_all[j + 2 + jn].handle_left = h[4]
+ jn += 1
+
+ if j == n - 1 and (0 in ii) and spline.use_cyclic_u:
+ selected_all[j + jn].select_control_point = True
+ selected_all[0].select_control_point = True
+ h = subdivide_cubic_bezier(
+ selected_all[j + jn].co, selected_all[j + jn].handle_right,
+ selected_all[0].handle_left, selected_all[0].co, self.Bezier_t / 100
+ )
+ bpy.ops.curve.subdivide(1)
+ selected_all = [p for p in spline.bezier_points]
+ selected_all[j + jn].handle_right_type = 'FREE'
+ selected_all[j + jn].handle_right = h[0]
+ selected_all[j + 1 + jn].co = h[2]
+ selected_all[j + 1 + jn].handle_left_type = 'FREE'
+ selected_all[j + 1 + jn].handle_left = h[1]
+ selected_all[j + 1 + jn].handle_right_type = 'FREE'
+ selected_all[j + 1 + jn].handle_right = h[3]
+ selected_all[0].handle_left_type = 'FREE'
+ selected_all[0].handle_left = h[4]
+
+ sn += 1
return {'FINISHED'}