Hi Goran,

Thanks for this insightful post.

I committed changes so that multi selection is possible (
http://code.google.com/p/pythonocc/source/detail?r=1116) and the zoom area
(Shift+RMB)/multiselection(Shift+LMB) with qt backend (
http://code.google.com/p/pythonocc/source/detail?r=1117) (note that I moved
the drawing stuff to the paintEvent method of the QtWidget class).

I don't manage to get the rectangle displayed while moving the mouse pointer
(although zoom and multi selection are ok). Is it a MacOS specific bug or is
it the same for you under Debian?

Thomas

2010/12/30 Goran Lukic <goranl...@gmail.com>

> Hello Community,
>
> I try to implement Zoom Window and Select Area using Mouse+SHIFT but this
> code from
> class qtviewer3d doesn't work for me.
>
> So, I changed the following code:
> # Draw rect
> def DrawBox( self , event):
>        tolerance = 2
>        pt = point( event.pos() )
>        dx = pt.x - self.dragStartPos.x
>        dy = pt.y - self.dragStartPos.y
>        if abs( dx ) <= tolerance and abs( dy ) <= tolerance:
>            return
>
>        painter = QtGui.QPainter()
>        painter.begin(self)
>        painter.setPen(QtGui.QPen(QtGui.QColor(255,255,255), 1,
>                                  QtCore.Qt.DotLine, QtCore.Qt.RoundCap,
> QtCore.Qt.RoundJoin))
>        rect = QtCore.QRect(self.dragStartPos.x, self.dragStartPos.y, dx, dy
> )
>        self._drawbox = [self.dragStartPos.x, self.dragStartPos.y , dx, dy]
>        painter.drawRect( rect )
>        self.repaint()
>        painter.end()
>
> # and mouse release event
> def mouseReleaseEvent( self, event ):
>        self.setCursor( self.crossNormalBitmapCursor )
>        pt = point(event.pos())
>        #print 'mouse release event'
>        if event.button() == QtCore.Qt.LeftButton:
>            pt = point(event.pos())
>            self.repaint()
>            if self._select_area:
>                [Xmin, Ymin, dx, dy] = self._drawbox
>                selected_shapes =
> self._display.Select(Xmin,Ymin,Xmin+dx,Ymin+dy)
>                self._select_area = False
>
>            elif self._display.Select(pt.x,pt.y):
>                    selected_shape = self._display.GetSelectedShape()
>                    print selected_shape,selected_shape.ShapeType()
>
>        # This part comes here !!!
>        elif event.button() == QtCore.Qt.RightButton:
>            if self._zoom_area:
>                [Xmin, Ymin, dx, dy] = self._drawbox
>                self._display.ZoomArea(Xmin, Ymin, Xmin+dx, Ymin+dy)
>                self._zoom_area = False
>
> # and I set following Attribute
> #self.setAttribute(QtCore.Qt.WA_PaintOutsidePaintEvent)
> class qtViewer3d( qtBaseViewer ):
>    def __init__( self, *kargs ):
>        qtBaseViewer.__init__( self, *kargs )
>        self._drawbox = False
>        self._zoom_area = False
>        self._select_area = False
>        self._inited = False
>        self._leftisdown = False
>        self._middleisdown = False
>        self._rightisdown = False
>        self._selection = None
>        self._drawtext = True
>        # Very Important
>        self.setAttribute(QtCore.Qt.WA_PaintOutsidePaintEvent)
>
>
> So, for now it works Zoom Window if I use RMB+SHIFT,
> but Select Area (LMB+SHIFT) still not working.
>
> hier is output from console:
> Traceback (most recent call last):
>  File "", line 656, in mouseReleaseEvent
>    selected_shapes = self._display.Select(Xmin,Ymin,Xmin+dx,Ymin+dy)
> TypeError: Select() takes exactly 3 arguments (5 given)
> Traceback (most recent call last):
>  File " ", line 655, in mouseReleaseEvent
>    [Xmin, Ymin, dx, dy] = self._drawbox
> TypeError: 'bool' object is not iterable
>
> I do not know how to fix this error.
>
> I am using Debian GNU/Linux "squeeze".
>
> _______________________________________________
> Pythonocc-users mailing list
> Pythonocc-users@gna.org
> https://mail.gna.org/listinfo/pythonocc-users
>
_______________________________________________
Pythonocc-users mailing list
Pythonocc-users@gna.org
https://mail.gna.org/listinfo/pythonocc-users

Reply via email to