[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2101] trunk/py/scripts/addons/modules/ curve_utils.py: remove tricky and not especially good method of finding the point on the path to use to calculate the handles , using the 1/3 and 2/3 works better.

Campbell Barton ideasman42 at gmail.com
Wed Jul 6 17:46:51 CEST 2011


Revision: 2101
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2101
Author:   campbellbarton
Date:     2011-07-06 15:46:51 +0000 (Wed, 06 Jul 2011)
Log Message:
-----------
remove tricky and not especially good method of finding the point on the path to use to calculate the handles, using the 1/3 and 2/3 works better.

Modified Paths:
--------------
    trunk/py/scripts/addons/modules/curve_utils.py

Modified: trunk/py/scripts/addons/modules/curve_utils.py
===================================================================
--- trunk/py/scripts/addons/modules/curve_utils.py	2011-07-06 12:20:27 UTC (rev 2100)
+++ trunk/py/scripts/addons/modules/curve_utils.py	2011-07-06 15:46:51 UTC (rev 2101)
@@ -360,72 +360,7 @@
             self.points[0].is_joint, self.points[-1].is_joint = joint
 
             self.calc_all()
-            # 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[-1]
-                no = -self.points[-1].no
-                point_iter = reversed(self.points[:-1])
-            else:
-                p_first = self.points[0]
-                no = self.points[0].no
-                point_iter = self.points[1:]
-
-            # 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:
-                ix, fac = intersect_point_line(p_apex.co, bi_l1, bi_l2)
-
-                if fac < 0.0001:
-
-                    if reverse:
-                        p_apex_other = p_apex.next
-                    else:
-                        p_apex_other = p_apex.prev
-
-                    # find the exact point on the line between the apex and
-                    # the middle
-                    p_test_1 = intersect_point_line(p_apex.co,
-                                                    l1,
-                                                    l2)[0]
-                    p_test_2 = intersect_point_line(p_apex_other.co,
-                                                    l1,
-                                                    l2)[0]
-
-                    w1 = (p_test_1 - p_apex.co).length
-                    w2 = (p_test_2 - p_apex_other.co).length
-
-                    #assert(w1 + w2 != 0)
-                    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()
-
-                    # visualize_line(p_mid.to_3d(), corner.to_3d())
-                    # visualize_line(p_apex.co.to_3d(), p_apex_co.to_3d())
-
-                    return p_apex_co, p_apex_no, p_apex
-
-            # intersection not found
-            return None, None, None
-
         def bezier_solve(self):
             """ Calculate bezier handles,
                 assume the splines have been broken up.
@@ -455,15 +390,12 @@
             # visualize_line(p1.co, l1_co)
             # visualize_line(p2.co, l2_co)
 
-            line_ix_p1_co, line_ix_p1_no, line_ix_p1 = \
-                    self.intersect_line(p1.co,
-                                        l1_co,
-                                        )
-            line_ix_p2_co, line_ix_p2_no, line_ix_p2 = \
-                    self.intersect_line(p2.co,
-                                        l2_co,
-                                        reverse=True,
-                                        )
+            # picking 1/2 and 2/3'rds works best
+            line_ix_p1 = self.points[len(self.points) // 3]
+            line_ix_p1_co, line_ix_p1_no = line_ix_p1.co, line_ix_p1.no
+            line_ix_p2 = self.points[int((len(self.points) / 3) * 2)]
+            line_ix_p2_co, line_ix_p2_no = line_ix_p2.co, line_ix_p2.no
+
             if line_ix_p1_co is None:
                 line_ix_p1_co, line_ix_p1_no, line_ix_p1 = \
                         p1.next.co, p1.next.no, p1.next



More information about the Bf-extensions-cvs mailing list