Curve Tools: Some bugs fix.

This commit is contained in:
Vladimir Spivak 2019-09-21 02:32:43 +03:00
parent 4e69d972bd
commit 1eb9bec215
3 changed files with 49 additions and 55 deletions

View File

@ -714,44 +714,39 @@ class BezierPointsFillet(bpy.types.Operator):
sn = 0
for spline in splines:
ii = s[sn]
n = len(spline.bezier_points)
bezier_points = spline.bezier_points
n = len(bezier_points)
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
bezier_points[j].select_control_point = True
bezier_points[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]]
selected4 = [bezier_points[j - 1], bezier_points[j],
bezier_points[j + 1], bezier_points[j + 2]]
jn += 1
n += 1
elif j == 0:
selected_all[j].select_control_point = True
selected_all[j + 1].select_control_point = True
bezier_points[j].select_control_point = True
bezier_points[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]]
selected4 = [bezier_points[n], bezier_points[0],
bezier_points[1], bezier_points[2]]
jn += 1
n += 1
elif j == n - 1:
selected_all[j].select_control_point = True
selected_all[j - 1].select_control_point = True
bezier_points[j].select_control_point = True
bezier_points[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 = [bezier_points[0], bezier_points[n],
bezier_points[n - 1], bezier_points[n - 2]]
selected4[2].co = selected4[1].co
s1 = Vector(selected4[0].co) - Vector(selected4[1].co)
@ -831,53 +826,50 @@ class BezierDivide(bpy.types.Operator):
sn = 0
for spline in splines:
ii = s[sn]
n = len(spline.bezier_points)
bezier_points = spline.bezier_points
n = len(bezier_points)
if n > 2:
jn = 0
for j in ii:
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
bezier_points[j + jn].select_control_point = True
bezier_points[j + 1 + jn].select_control_point = True
h = Math.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
bezier_points[j + jn].co, bezier_points[j + jn].handle_right,
bezier_points[j + 1 + jn].handle_left, bezier_points[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]
bezier_points[j + jn].handle_right_type = 'FREE'
bezier_points[j + jn].handle_right = h[0]
bezier_points[j + 1 + jn].co = h[2]
bezier_points[j + 1 + jn].handle_left_type = 'FREE'
bezier_points[j + 1 + jn].handle_left = h[1]
bezier_points[j + 1 + jn].handle_right_type = 'FREE'
bezier_points[j + 1 + jn].handle_right = h[3]
bezier_points[j + 2 + jn].handle_left_type = 'FREE'
bezier_points[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
bezier_points[j + jn].select_control_point = True
bezier_points[0].select_control_point = True
h = Math.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
bezier_points[j + jn].co, bezier_points[j + jn].handle_right,
bezier_points[0].handle_left, bezier_points[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]
bezier_points[j + jn].handle_right_type = 'FREE'
bezier_points[j + jn].handle_right = h[0]
bezier_points[j + 1 + jn].co = h[2]
bezier_points[j + 1 + jn].handle_left_type = 'FREE'
bezier_points[j + 1 + jn].handle_left = h[1]
bezier_points[j + 1 + jn].handle_right_type = 'FREE'
bezier_points[j + 1 + jn].handle_right = h[3]
bezier_points[0].handle_left_type = 'FREE'
bezier_points[0].handle_left = h[4]
sn += 1

View File

@ -271,14 +271,14 @@ class PathFinder(bpy.types.Operator):
bpy.ops.curve.delete(type='VERT')
return {'RUNNING_MODAL'}
elif event.alt and event.shift and event.type == 'LEFTMOUSE':
click(self, context, event)
elif event.alt and not event.shift and event.type == 'LEFTMOUSE':
remove_handler(self.handlers)
bpy.ops.curve.select_all(action='DESELECT')
click(self, context, event)
elif event.alt and event.shift and event.type == 'LEFTMOUSE':
click(self, context, event)
elif event.alt and event.type == 'RIGHTMOUSE':
remove_handler(self.handlers)
bpy.ops.curve.select_all(action='DESELECT')

View File

@ -231,14 +231,14 @@ class curvetoolsSettings(PropertyGroup):
)
font_thickness: IntProperty(
name="Font thickness",
default=1,
default=2,
min=1, max=1024,
soft_min=2,
description="Font thickness (px)"
)
font_size: FloatProperty(
name="Font size",
default=0.5,
default=0.1,
precision=3,
description="Font size"
)
@ -449,6 +449,8 @@ class VIEW3D_PT_CurvePanel(Panel):
row = col.row(align=True)
row.label(text="Alt + mouse click - select spline")
row = col.row(align=True)
row.label(text="Alt + Shift + mouse click - add spline to select")
row = col.row(align=True)
row.label(text="A - deselect all")