Skip to content
Snippets Groups Projects
Commit 96336775 authored by Campbell Barton's avatar Campbell Barton
Browse files

replace logic in spline intersection which depends on 2D side-of function

parent 468578b1
No related branches found
No related tags found
No related merge requests found
......@@ -20,11 +20,6 @@
import bpy
def line_point_side_v2(l1, l2, pt):
return (((l1[0] - pt[0]) * (l2[1] - pt[1])) -
((l2[0] - pt[0]) * (l1[1] - pt[1])))
def vis_curve_object():
scene = bpy.data.scenes[0] # weak!
cu = bpy.data.curves.new(name="Line", type='CURVE')
......@@ -370,24 +365,32 @@ def points_to_bezier(points_orig,
# raise Exception("END")
def intersect_line(self, l1, l2, reverse=False):
""" Spectial kind of intersection, works in 3d on the plane
defimed by the points normal and the line.
"""
from mathutils.geometry import (intersect_point_line,
)
if reverse:
p_first = self.points[-2]
p_first = self.points[-1]
no = -self.points[-1].no
point_iter = reversed(self.points[:-1])
else:
p_first = self.points[1]
p_first = self.points[0]
no = self.points[0].no
point_iter = self.points[1:]
side = (line_point_side_v2(l1, l2, p_first.co) < 0.0)
ok = False
# calculate the line right angles to the line
bi_no = (no - no.project(l2 - l1)).normalized()
bi_l1 = p_first.co
bi_l2 = p_first.co + bi_no
for p_apex in point_iter:
if (line_point_side_v2(l1,
l2,
p_apex.co,
) < 0.0) != side:
ix, fac = intersect_point_line(p_apex.co, bi_l1, bi_l2)
if fac < 0.0001:
if reverse:
p_apex_other = p_apex.next
......@@ -407,12 +410,12 @@ def points_to_bezier(points_orig,
w2 = (p_test_2 - p_apex_other.co).length
#assert(w1 + w2 != 0)
#try:
fac = w1 / (w1 + w2)
#except ZeroDivisionError:
# fac = 0.5
try:
fac = w1 / (w1 + w2)
except ZeroDivisionError:
fac = 0.5
assert(fac >= 0.0 and fac <= 1.0)
p_apex_co = p_apex.co.lerp(p_apex_other.co, fac)
p_apex_no = p_apex.no.lerp(p_apex_other.no, fac)
p_apex_no.normalize()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment