line segment fixes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@29825 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -297,6 +297,8 @@ class LineShape(Shape):
|
|||||||
point = wx.RealPoint(-999, -999)
|
point = wx.RealPoint(-999, -999)
|
||||||
self._lineControlPoints.append(point)
|
self._lineControlPoints.append(point)
|
||||||
|
|
||||||
|
self._initialised = False
|
||||||
|
|
||||||
def InsertLineControlPoint(self, dc = None):
|
def InsertLineControlPoint(self, dc = None):
|
||||||
"""Insert a control point at an arbitrary position."""
|
"""Insert a control point at an arbitrary position."""
|
||||||
if dc:
|
if dc:
|
||||||
@@ -346,6 +348,7 @@ class LineShape(Shape):
|
|||||||
y2 = first_point[1]
|
y2 = first_point[1]
|
||||||
y1 = last_point[1]
|
y1 = last_point[1]
|
||||||
self._lineControlPoints[i] = wx.RealPoint((x2 - x1) / 2.0 + x1, (y2 - y1) / 2.0 + y1)
|
self._lineControlPoints[i] = wx.RealPoint((x2 - x1) / 2.0 + x1, (y2 - y1) / 2.0 + y1)
|
||||||
|
self._initialised = True
|
||||||
|
|
||||||
def FormatText(self, dc, s, i):
|
def FormatText(self, dc, s, i):
|
||||||
"""Format a text string according to the region size, adding
|
"""Format a text string according to the region size, adding
|
||||||
@@ -548,8 +551,8 @@ class LineShape(Shape):
|
|||||||
dy = point2[1] - point1[1]
|
dy = point2[1] - point1[1]
|
||||||
|
|
||||||
seg_len = math.sqrt(dx * dx + dy * dy)
|
seg_len = math.sqrt(dx * dx + dy * dy)
|
||||||
if dy == 0 or dx == 0:
|
if dy == 0 and dx == 0:
|
||||||
return False
|
continue
|
||||||
distance_from_seg = seg_len * float((x - point1[0]) * dy - (y - point1[1]) * dx) / (dy * dy + dx * dx)
|
distance_from_seg = seg_len * float((x - point1[0]) * dy - (y - point1[1]) * dx) / (dy * dy + dx * dx)
|
||||||
distance_from_prev = seg_len * float((y - point1[1]) * dy + (x - point1[0]) * dx) / (dy * dy + dx * dx)
|
distance_from_prev = seg_len * float((y - point1[1]) * dy + (x - point1[0]) * dx) / (dy * dy + dx * dx)
|
||||||
|
|
||||||
@@ -904,9 +907,6 @@ class LineShape(Shape):
|
|||||||
if not self._from or not self._to:
|
if not self._from or not self._to:
|
||||||
return
|
return
|
||||||
|
|
||||||
if len(self._lineControlPoints) > 2:
|
|
||||||
self.Initialise()
|
|
||||||
|
|
||||||
# Do each end - nothing in the middle. User has to move other points
|
# Do each end - nothing in the middle. User has to move other points
|
||||||
# manually if necessary
|
# manually if necessary
|
||||||
end_x, end_y, other_end_x, other_end_y = self.FindLineEndPoints()
|
end_x, end_y, other_end_x, other_end_y = self.FindLineEndPoints()
|
||||||
@@ -915,6 +915,9 @@ class LineShape(Shape):
|
|||||||
|
|
||||||
self.SetEnds(end_x, end_y, other_end_x, other_end_y)
|
self.SetEnds(end_x, end_y, other_end_x, other_end_y)
|
||||||
|
|
||||||
|
if len(self._lineControlPoints) > 2:
|
||||||
|
self.Initialise()
|
||||||
|
|
||||||
# Do a second time, because one may depend on the other
|
# Do a second time, because one may depend on the other
|
||||||
end_x, end_y, other_end_x, other_end_y = self.FindLineEndPoints()
|
end_x, end_y, other_end_x, other_end_y = self.FindLineEndPoints()
|
||||||
self.SetEnds(end_x, end_y, other_end_x, other_end_y)
|
self.SetEnds(end_x, end_y, other_end_x, other_end_y)
|
||||||
@@ -947,7 +950,7 @@ class LineShape(Shape):
|
|||||||
second_point = self._lineControlPoints[1]
|
second_point = self._lineControlPoints[1]
|
||||||
second_last_point = self._lineControlPoints[-2]
|
second_last_point = self._lineControlPoints[-2]
|
||||||
|
|
||||||
if len(self._lineControlPoints) > 2:
|
if len(self._lineControlPoints) > 2 and self._initialised:
|
||||||
if self._from.GetAttachmentMode() != ATTACHMENT_MODE_NONE:
|
if self._from.GetAttachmentMode() != ATTACHMENT_MODE_NONE:
|
||||||
nth, no_arcs = self.FindNth(self._from, False) # Not incoming
|
nth, no_arcs = self.FindNth(self._from, False) # Not incoming
|
||||||
end_x, end_y = self._from.GetAttachmentPosition(self._attachmentFrom, nth, no_arcs, self)
|
end_x, end_y = self._from.GetAttachmentPosition(self._attachmentFrom, nth, no_arcs, self)
|
||||||
@@ -999,7 +1002,6 @@ class LineShape(Shape):
|
|||||||
for point in self._lineControlPoints:
|
for point in self._lineControlPoints:
|
||||||
points.append(wx.Point(point[0], point[1]))
|
points.append(wx.Point(point[0], point[1]))
|
||||||
|
|
||||||
#print points
|
|
||||||
if self._isSpline:
|
if self._isSpline:
|
||||||
dc.DrawSpline(points)
|
dc.DrawSpline(points)
|
||||||
else:
|
else:
|
||||||
@@ -1088,7 +1090,7 @@ class LineShape(Shape):
|
|||||||
self._controlPoints.append(control)
|
self._controlPoints.append(control)
|
||||||
|
|
||||||
def ResetControlPoints(self):
|
def ResetControlPoints(self):
|
||||||
if self._canvas and self._lineControlPoints:
|
if self._canvas and self._lineControlPoints and self._controlPoints:
|
||||||
for i in range(min(len(self._controlPoints), len(self._lineControlPoints))):
|
for i in range(min(len(self._controlPoints), len(self._lineControlPoints))):
|
||||||
point = self._lineControlPoints[i]
|
point = self._lineControlPoints[i]
|
||||||
control = self._controlPoints[i]
|
control = self._controlPoints[i]
|
||||||
@@ -1142,8 +1144,9 @@ class LineShape(Shape):
|
|||||||
|
|
||||||
pt.SetX(x)
|
pt.SetX(x)
|
||||||
pt.SetY(y)
|
pt.SetY(y)
|
||||||
pt._point = x, y
|
pt._point[0] = x
|
||||||
|
pt._point[1] = y
|
||||||
|
|
||||||
old_pen = self.GetPen()
|
old_pen = self.GetPen()
|
||||||
old_brush = self.GetBrush()
|
old_brush = self.GetBrush()
|
||||||
|
|
||||||
@@ -1177,7 +1180,8 @@ class LineShape(Shape):
|
|||||||
|
|
||||||
pt._xpos = x
|
pt._xpos = x
|
||||||
pt._ypos = y
|
pt._ypos = y
|
||||||
pt._point = x, y
|
pt._point[0] = x
|
||||||
|
pt._point[1] = y
|
||||||
|
|
||||||
old_pen = self.GetPen()
|
old_pen = self.GetPen()
|
||||||
old_brush = self.GetBrush()
|
old_brush = self.GetBrush()
|
||||||
@@ -1213,7 +1217,8 @@ class LineShape(Shape):
|
|||||||
# as it changed shape.
|
# as it changed shape.
|
||||||
pt._xpos = pt._originalPos[0]
|
pt._xpos = pt._originalPos[0]
|
||||||
pt._ypos = pt._originalPos[1]
|
pt._ypos = pt._originalPos[1]
|
||||||
pt._point = pt._originalPos[0], pt._originalPos[1]
|
pt._point[0] = pt._originalPos[0]
|
||||||
|
pt._point[1] = pt._originalPos[1]
|
||||||
|
|
||||||
self.OnMoveMiddleControlPoint(dc, pt, rpt)
|
self.OnMoveMiddleControlPoint(dc, pt, rpt)
|
||||||
|
|
||||||
@@ -1221,22 +1226,23 @@ class LineShape(Shape):
|
|||||||
if pt._oldCursor:
|
if pt._oldCursor:
|
||||||
self._canvas.SetCursor(pt._oldCursor)
|
self._canvas.SetCursor(pt._oldCursor)
|
||||||
|
|
||||||
if self.GetFrom():
|
if self.GetFrom():
|
||||||
self.GetFrom().MoveLineToNewAttachment(dc, self, x, y)
|
self.GetFrom().MoveLineToNewAttachment(dc, self, x, y)
|
||||||
|
|
||||||
if pt._type == CONTROL_POINT_ENDPOINT_TO:
|
if pt._type == CONTROL_POINT_ENDPOINT_TO:
|
||||||
if pt._oldCursor:
|
if pt._oldCursor:
|
||||||
self._canvas.SetCursor(pt._oldCursor)
|
self._canvas.SetCursor(pt._oldCursor)
|
||||||
|
|
||||||
if self.GetTo():
|
if self.GetTo():
|
||||||
self.GetTo().MoveLineToNewAttachment(dc, self, x, y)
|
self.GetTo().MoveLineToNewAttachment(dc, self, x, y)
|
||||||
|
|
||||||
# This is called only when a non-end control point is moved
|
# This is called only when a non-end control point is moved
|
||||||
def OnMoveMiddleControlPoint(self, dc, lpt, pt):
|
def OnMoveMiddleControlPoint(self, dc, lpt, pt):
|
||||||
lpt._xpos = pt[0]
|
lpt._xpos = pt[0]
|
||||||
lpt._ypos = pt[1]
|
lpt._ypos = pt[1]
|
||||||
|
|
||||||
lpt._point = pt[0], pt[1]
|
lpt._point[0] = pt[0]
|
||||||
|
lpt._point[1] = pt[1]
|
||||||
|
|
||||||
self.GetEventHandler().OnMoveLink(dc)
|
self.GetEventHandler().OnMoveLink(dc)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user