diff -r 31e63e25b4cc -r 64beb9e9c749 graphics/RubberBand.py --- a/graphics/RubberBand.py Mon Aug 21 20:17:19 2017 +0000 +++ b/graphics/RubberBand.py Mon Aug 21 23:22:58 2017 +0300 @@ -26,28 +26,29 @@ from graphics.GraphicCommons import GetScaledEventPosition -#------------------------------------------------------------------------------- + +# ------------------------------------------------------------------------------- # Viewer RubberBand -#------------------------------------------------------------------------------- +# ------------------------------------------------------------------------------- -""" -Class that implements a rubberband for graphic Viewers -""" class RubberBand: - + """ + Class that implements a rubberband for graphic Viewers + """ + 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 +56,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 - + return self.CurrentBBox is not None + def GetCurrentExtent(self): """ Return the rubberband bounding box @@ -73,7 +74,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 +86,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 +107,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 +130,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,38 +147,38 @@ # 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): + + def Redraw(self, dc=None): """ Redraw rubberband on Viewer @param dc: Device Context of Viewer (default None) """ # Erase last bbox and draw current bbox self.DrawBoundingBoxes([self.LastBBox, self.CurrentBBox], dc) - - def Erase(self, dc = None): + + def Erase(self, dc=None): """ Erase rubberband from Viewer @param dc: Device Context of Viewer (default None) @@ -185,7 +186,7 @@ # Erase last bbox self.DrawBoundingBoxes([self.LastBBox], dc) - def Draw(self, dc = None): + def Draw(self, dc=None): """ Draw rubberband on Viewer @param dc: Device Context of Viewer (default None)