diff -r d51af006fa6b -r 64d8f52bc8c8 graphics/RubberBand.py --- a/graphics/RubberBand.py Fri Aug 11 15:18:19 2017 +0300 +++ b/graphics/RubberBand.py Mon Aug 14 19:13:01 2017 +0300 @@ -35,19 +35,19 @@ """ class RubberBand: - + def __init__(self, viewer): """ Constructor @param viewer: Viewer on which rubberband must be drawn """ self.Viewer = viewer - + # wx.Panel on which rubberband will be drawn self.DrawingSurface = viewer.Editor - + self.Reset() - + def Reset(self): """ Initialize internal attributes of rubberband @@ -55,14 +55,14 @@ self.StartPoint = None self.CurrentBBox = None self.LastBBox = None - + def IsShown(self): """ Indicate if rubberband is drawn on viewer @return: True if rubberband is drawn """ return self.CurrentBBox != None - + def GetCurrentExtent(self): """ Return the rubberband bounding box @@ -73,7 +73,7 @@ if self.IsShown(): return self.CurrentBBox return self.LastBBox - + def OnLeftDown(self, event, dc, scaling): """ Called when left mouse is pressed on Viewer. Starts to edit a new @@ -85,16 +85,16 @@ # Save the point where mouse was pressed in Viewer unit, position may # be modified by scroll and zoom applied on viewer self.StartPoint = GetScaledEventPosition(event, dc, scaling) - + # Initialize rubberband bounding box self.CurrentBBox = wx.Rect(self.StartPoint.x, self.StartPoint.y, 0, 0) - + # Change viewer mouse cursor to reflect a rubberband bounding box is # edited self.DrawingSurface.SetCursor(wx.StockCursor(wx.CURSOR_CROSS)) - + self.Redraw() - + def OnMotion(self, event, dc, scaling): """ Called when mouse is dragging over Viewer. Update the current edited @@ -106,19 +106,19 @@ # Get mouse position in Viewer unit, position may be modified by scroll # and zoom applied on viewer pos = GetScaledEventPosition(event, dc, scaling) - + # Save the last bounding box drawn for erasing it later self.LastBBox = wx.Rect(0, 0, 0, 0) self.LastBBox.Union(self.CurrentBBox) - - # Calculate new position and size of the box + + # Calculate new position and size of the box self.CurrentBBox.x = min(pos.x, self.StartPoint.x) self.CurrentBBox.y = min(pos.y, self.StartPoint.y) self.CurrentBBox.width = abs(pos.x - self.StartPoint.x) + 1 self.CurrentBBox.height = abs(pos.y - self.StartPoint.y) + 1 - + self.Redraw() - + def OnLeftUp(self, event, dc, scaling): """ Called when mouse is release from Viewer. Erase the current edited @@ -129,16 +129,16 @@ """ # Change viewer mouse cursor to default self.DrawingSurface.SetCursor(wx.NullCursor) - + # Save the last edited bounding box self.LastBBox = self.CurrentBBox self.CurrentBBox = None - + self.Redraw() - + def DrawBoundingBoxes(self, bboxes, dc=None): """ - Draw a list of bounding box on Viewer in the order given using XOR + Draw a list of bounding box on Viewer in the order given using XOR logical function @param bboxes: List of bounding boxes to draw on viewer @param dc: Device Context of Viewer (default None) @@ -146,29 +146,29 @@ # Get viewer Device Context if not given if dc is None: dc = self.Viewer.GetLogicalDC() - + # Save current viewer scale factors before resetting them in order to # avoid rubberband pen to be scaled scalex, scaley = dc.GetUserScale() dc.SetUserScale(1, 1) - + # Set DC drawing style dc.SetPen(wx.Pen(wx.WHITE, style=wx.DOT)) dc.SetBrush(wx.TRANSPARENT_BRUSH) dc.SetLogicalFunction(wx.XOR) - + # Draw the bounding boxes using viewer scale factor for bbox in bboxes: if bbox is not None: dc.DrawRectangle( - bbox.x * scalex, bbox.y * scaley, + bbox.x * scalex, bbox.y * scaley, bbox.width * scalex, bbox.height * scaley) - + dc.SetLogicalFunction(wx.COPY) - + # Restore Viewer scale factor dc.SetUserScale(scalex, scaley) - + def Redraw(self, dc = None): """ Redraw rubberband on Viewer @@ -176,7 +176,7 @@ """ # Erase last bbox and draw current bbox self.DrawBoundingBoxes([self.LastBBox, self.CurrentBBox], dc) - + def Erase(self, dc = None): """ Erase rubberband from Viewer