2029 # Adds two points in the middle of the handled segment |
2029 # Adds two points in the middle of the handled segment |
2030 def AddSegment(self): |
2030 def AddSegment(self): |
2031 handle_type, handle = self.Handle |
2031 handle_type, handle = self.Handle |
2032 if handle_type == HANDLE_SEGMENT: |
2032 if handle_type == HANDLE_SEGMENT: |
2033 segment, dir = handle |
2033 segment, dir = handle |
2034 pointx = self.Points[segment].x |
2034 if len(self.Segments) > 1: |
2035 pointy = self.Points[segment].y |
2035 pointx = self.Points[segment].x |
2036 if dir[0] != 0: |
2036 pointy = self.Points[segment].y |
2037 pointx = (self.Points[segment].x + self.Points[segment + 1].x) / 2 |
2037 if dir[0] != 0: |
2038 if dir[1] != 0: |
2038 pointx = (self.Points[segment].x + self.Points[segment + 1].x) / 2 |
2039 pointy = (self.Points[segment].y + self.Points[segment + 1].y) / 2 |
2039 if dir[1] != 0: |
2040 self.Points.insert(segment + 1, wx.Point(pointx, pointy)) |
2040 pointy = (self.Points[segment].y + self.Points[segment + 1].y) / 2 |
2041 self.Segments.insert(segment + 1, (dir[1], dir[0])) |
2041 self.Points.insert(segment + 1, wx.Point(pointx, pointy)) |
2042 self.Points.insert(segment + 2, wx.Point(pointx, pointy)) |
2042 self.Segments.insert(segment + 1, (dir[1], dir[0])) |
2043 self.Segments.insert(segment + 2, dir) |
2043 self.Points.insert(segment + 2, wx.Point(pointx, pointy)) |
|
2044 self.Segments.insert(segment + 2, dir) |
|
2045 else: |
|
2046 p1x = p2x = self.Points[segment].x |
|
2047 p1y = p2y = self.Points[segment].y |
|
2048 if dir[0] != 0: |
|
2049 p1x = (2 * self.Points[segment].x + self.Points[segment + 1].x) / 3 |
|
2050 p2x = (self.Points[segment].x + 2 * self.Points[segment + 1].x) / 3 |
|
2051 if dir[1] != 0: |
|
2052 p1y = (2 * self.Points[segment].y + self.Points[segment + 1].y) / 3 |
|
2053 p2y = (self.Points[segment].y + 2 * self.Points[segment + 1].y) / 3 |
|
2054 self.Points.insert(segment + 1, wx.Point(p1x, p1y)) |
|
2055 self.Segments.insert(segment + 1, (dir[1], dir[0])) |
|
2056 self.Points.insert(segment + 2, wx.Point(p1x, p1y)) |
|
2057 self.Segments.insert(segment + 2, dir) |
|
2058 self.Points.insert(segment + 3, wx.Point(p2x, p2y)) |
|
2059 self.Segments.insert(segment + 3, (dir[1], dir[0])) |
|
2060 self.Points.insert(segment + 4, wx.Point(p2x, p2y)) |
|
2061 self.Segments.insert(segment + 4, dir) |
2044 self.GeneratePoints() |
2062 self.GeneratePoints() |
2045 |
2063 |
2046 # Delete the handled segment by removing the two segment points |
2064 # Delete the handled segment by removing the two segment points |
2047 def DeleteSegment(self): |
2065 def DeleteSegment(self): |
2048 handle_type, handle = self.Handle |
2066 handle_type, handle = self.Handle |
2081 pos = GetScaledEventPosition(event, dc, scaling) |
2099 pos = GetScaledEventPosition(event, dc, scaling) |
2082 # Test if a segment has been handled |
2100 # Test if a segment has been handled |
2083 result = self.TestSegment(pos, True) |
2101 result = self.TestSegment(pos, True) |
2084 if result != None: |
2102 if result != None: |
2085 self.Handle = (HANDLE_SEGMENT, result) |
2103 self.Handle = (HANDLE_SEGMENT, result) |
|
2104 print result, len(self.Segments) |
2086 # Popup the menu with special items for a wire |
2105 # Popup the menu with special items for a wire |
2087 self.Parent.PopupWireMenu(0 < result < len(self.Segments) - 1) |
2106 self.Parent.PopupWireMenu(0 < result[0] < len(self.Segments) - 1) |
2088 else: |
2107 else: |
2089 # Execute the default method for a graphic element |
2108 # Execute the default method for a graphic element |
2090 Graphic_Element.OnRightUp(self, event, dc, scaling) |
2109 Graphic_Element.OnRightUp(self, event, dc, scaling) |
2091 |
2110 |
2092 # Method called when a LeftDClick event has been generated |
2111 # Method called when a LeftDClick event has been generated |