--- 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()