graphics/GraphicCommons.py
changeset 296 919f72861bfb
parent 287 fab9a51d5b57
child 316 8c6589718ce7
--- a/graphics/GraphicCommons.py	Fri Dec 19 15:07:54 2008 +0100
+++ b/graphics/GraphicCommons.py	Fri Dec 19 15:08:54 2008 +0100
@@ -119,10 +119,6 @@
 Basic vector operations for calculate wire points
 """
 
-# Calculate the scalar product of two vectors
-def product(v1, v2):
-    return v1[0] * v2[0] + v1[1] * v2[1]
-
 # Create a vector from two points and define if vector must be normal
 def vector(p1, p2, normal = True):
     vector = (p2.x - p1.x, p2.y - p1.y)
@@ -143,6 +139,18 @@
     else:
         return v
 
+# Calculate the scalar product of two vectors
+def is_null_vector(v):
+    return v == (0, 0)
+
+# Calculate the scalar product of two vectors
+def add_vectors(v1, v2):
+    return (v1[0] + v2[0], v1[1] + v2[1])
+
+# Calculate the scalar product of two vectors
+def product(v1, v2):
+    return v1[0] * v2[0] + v1[1] * v2[1]
+
 
 """
 Function that calculates the nearest point of the grid defined by scaling for the given point
@@ -1635,8 +1643,17 @@
             self.Points[-1] = self.EndPoint[0]
             # Calculate the segments directions
             self.Segments = []
-            for i in xrange(len(self.Points) - 1):
-                self.Segments.append(vector(self.Points[i], self.Points[i + 1]))
+            i = 0
+            while i < len(self.Points) - 1:
+                segment = vector(self.Points[i], self.Points[i + 1])
+                if is_null_vector(segment) and i > 0:
+                    segment = (self.Segments[-1][1], self.Segments[-1][0])
+                if i < len(self.Points) - 2:
+                    next = vector(self.Points[i + 1], self.Points[i + 2])
+                    if next == segment or is_null_vector(add_vectors(segment, next)):
+                        self.Points.insert(i + 1, wx.Point(self.Points[i].x, self.Points[i].y))
+                self.Segments.append(segment)
+                i += 1
             self.RefreshBoundingBox()
             self.RefreshRealPoints()