Ignore:
Timestamp:
03/14/13 12:59:43 (14 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added 'autoAdjustGeometry' option to ArrowAnnotation class.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Orange/OrangeCanvas/canvas/items/annotationitem.py

    r11400 r11401  
    469469        self.__shadow.setEnabled(True) 
    470470 
     471        self.__autoAdjustGeometry = True 
     472 
     473    def setAutoAdjustGeometry(self, autoAdjust): 
     474        """ 
     475        If set to `True` then the geometry will be adjusted whenever 
     476        the arrow is changed with `setLine`. Otherwise the geometry 
     477        of the item is only updated so the `line` lies within the 
     478        `geometry()` rect (i.e. it only grows). True by default 
     479 
     480        """ 
     481        self.__autoAdjustGeometry = autoAdjust 
     482        if autoAdjust: 
     483            self.adjustGeometry() 
     484 
     485    def autoAdjustGeometry(self): 
     486        """ 
     487        Should the geometry of the item be adjusted automatically when 
     488        `setLine` is called. 
     489 
     490        """ 
     491        return self.__autoAdjustGeometry 
     492 
    471493    def setLine(self, line): 
    472         """Set the arrow base line (a `QLineF` in object coordinates). 
     494        """ 
     495        Set the arrow base line (a `QLineF` in object coordinates). 
    473496        """ 
    474497        if self.__line != line: 
     
    480503            if geom.isNull() and not line.isNull(): 
    481504                geom = QRectF(0, 0, 1, 1) 
    482             line_rect = QRectF(line.p1(), line.p2()).normalized() 
    483  
    484             if not (geom.contains(line_rect)): 
    485                 geom = geom.united(line_rect) 
    486  
     505 
     506            arrow_shape = arrow_path_concave(line, self.lineWidth()) 
     507            arrow_rect = arrow_shape.boundingRect() 
     508 
     509            if not (geom.contains(arrow_rect)): 
     510                geom = geom.united(arrow_rect) 
     511 
     512            if self.__autoAdjustGeometry: 
     513                # Shrink the geometry if required. 
     514                geom = geom.intersected(arrow_rect) 
     515 
     516            # topLeft can move changing the local coordinates. 
    487517            diff = geom.topLeft() 
    488518            line = QLineF(line.p1() - diff, line.p2() - diff) 
     
    495525 
    496526    def line(self): 
    497         """Return the arrow base line. 
     527        """ 
     528        Return the arrow base line (`QLineF` in object coordinates). 
    498529        """ 
    499530        return QLineF(self.__line) 
    500531 
    501532    def setColor(self, color): 
    502         """Set arrow brush color. 
     533        """ 
     534        Set arrow brush color. 
    503535        """ 
    504536        if self.__color != color: 
     
    507539 
    508540    def color(self): 
    509         """Return the arrow brush color. 
     541        """ 
     542        Return the arrow brush color. 
    510543        """ 
    511544        return QColor(self.__color) 
    512545 
    513546    def setLineWidth(self, lineWidth): 
    514         """Set the arrow line width. 
     547        """ 
     548        Set the arrow line width. 
    515549        """ 
    516550        self.__arrowItem.setLineWidth(lineWidth) 
    517551 
    518552    def lineWidth(self): 
    519         """Return the arrow line width. 
     553        """ 
     554        Return the arrow line width. 
    520555        """ 
    521556        return self.__arrowItem.lineWidth() 
    522557 
    523558    def adjustGeometry(self): 
    524         """Adjust the widget geometry to exactly fit the arrow inside 
     559        """ 
     560        Adjust the widget geometry to exactly fit the arrow inside 
    525561        while preserving the arrow path scene geometry. 
    526562 
     
    556592 
    557593    def __updateBrush(self): 
    558         """Update the arrow brush. 
     594        """ 
     595        Update the arrow brush. 
    559596        """ 
    560597        if self.isSelected(): 
Note: See TracChangeset for help on using the changeset viewer.