Example #1
0
    def filterEvent(self, obj, event):

        if event.type() == QtCore.QEvent.MouseButtonDblClick and event.button() == QtCore.Qt.LeftButton:
            self.onLeftDoubleClick(event)

        elif event.type() == QtCore.QEvent.MouseButtonPress and event.button() == QtCore.Qt.LeftButton:
            self.onLeftMousePress(event)

        elif event.type() == QtCore.QEvent.MouseButtonPress and event.button() == QtCore.Qt.RightButton:
            self.mouseStart = QtCore.QPoint(event.pos())

        elif event.type() == QtCore.QEvent.MouseMove:

            if self.mouseStart is not None:
                delta = QtCore.QPoint(event.pos()) - self.mouseStart
                if delta.manhattanLength() > 3:
                    self.mouseStart = None
            else:
                self.onMouseMove(event)

        elif event.type() == QtCore.QEvent.MouseButtonRelease and event.button() == QtCore.Qt.RightButton and self.mouseStart is not None:
            self.mouseStart = None
            self.onRightClick(event)

        elif event.type() == QtCore.QEvent.Wheel:
            self.onWheelEvent(event)
    def filterEvent(self, obj, event):

        if event.type() == QtCore.QEvent.MouseButtonDblClick and event.button(
        ) == QtCore.Qt.LeftButton:
            self.onLeftDoubleClick(event)

        elif event.type() == QtCore.QEvent.MouseButtonPress and event.button(
        ) == QtCore.Qt.LeftButton:
            self._leftMouseStart = QtCore.QPoint(event.pos())
            self.onLeftMousePress(event)

        elif event.type() == QtCore.QEvent.MouseButtonPress and event.button(
        ) == QtCore.Qt.RightButton:
            self._rightMouseStart = QtCore.QPoint(event.pos())
            self.onRightMousePress(event)

        elif event.type() == QtCore.QEvent.MouseMove:

            if self._rightMouseStart is not None:
                delta = QtCore.QPoint(event.pos()) - self._rightMouseStart
                if delta.manhattanLength() > 3:
                    self._rightMouseStart = None

            if self._leftMouseStart is not None:
                delta = QtCore.QPoint(event.pos()) - self._leftMouseStart
                if delta.manhattanLength() > 3:
                    self._leftMouseStart = None

            if self._rightMouseStart is None and self._leftMouseStart is None:
                self.onMouseMove(event)

        elif event.type() == QtCore.QEvent.MouseButtonRelease and event.button(
        ) == QtCore.Qt.LeftButton:
            self.onLeftMouseRelease(event)
            if self._leftMouseStart is not None:
                self._leftMouseStart = None
                self.onLeftClick(event)

        elif event.type() == QtCore.QEvent.MouseButtonRelease and event.button(
        ) == QtCore.Qt.RightButton:
            self.onRightMouseRelease(event)
            if self._rightMouseStart is not None:
                self._rightMouseStart = None
                self.onRightClick(event)

        elif event.type() == QtCore.QEvent.Wheel:
            self.onMouseWheel(event)

        elif event.type() == QtCore.QEvent.KeyPress:
            if not event.isAutoRepeat():
                self.onKeyPress(event)
            self.onKeyPressRepeat(event)

        elif event.type(
        ) == QtCore.QEvent.KeyRelease and not event.isAutoRepeat():
            self.onKeyRelease(event)
Example #3
0
def showRightClickMenu(displayPoint, view):

    pickedObj, pickedPoint = vis.findPickedObject(displayPoint, view)
    if not pickedObj:
        return

    objectName = pickedObj.getProperty('Name')
    if objectName == 'grid':
        return

    objectName = getShortenedName(objectName)

    displayPoint = displayPoint[0], view.height - displayPoint[1]

    globalPos = view.mapToGlobal(QtCore.QPoint(*displayPoint))

    menu = QtGui.QMenu(view)

    widgetAction = QtGui.QWidgetAction(menu)
    label = QtGui.QLabel('<b>%s</b>' % objectName)
    label.setContentsMargins(9, 9, 6, 6)
    widgetAction.setDefaultWidget(label)
    menu.addAction(widgetAction)
    menu.addSeparator()

    propertiesPanel = PythonQt.dd.ddPropertiesPanel()
    propertiesPanel.setBrowserModeToWidget()
    propertyset.PropertyPanelHelper.addPropertiesToPanel(
        pickedObj.properties, propertiesPanel)

    def onPropertyChanged(prop):
        om.PropertyPanelHelper.setPropertyFromPanel(prop, propertiesPanel,
                                                    pickedObj.properties)

    propertiesPanel.connect('propertyValueChanged(QtVariantProperty*)',
                            onPropertyChanged)

    propertiesMenu = menu.addMenu('Properties')
    propertiesWidgetAction = QtGui.QWidgetAction(propertiesMenu)
    propertiesWidgetAction.setDefaultWidget(propertiesPanel)
    propertiesMenu.addAction(propertiesWidgetAction)

    actions = getContextMenuActions(view, pickedObj, pickedPoint)

    for actionName, func in actions:
        if not actionName:
            menu.addSeparator()
        else:
            action = menu.addAction(actionName)
            action.connect('triggered()', func)

    selectedAction = menu.popup(globalPos)
Example #4
0
def showRightClickMenu(displayPoint, view):

    pickedObj, pickedPoint = vis.findPickedObject(displayPoint, view)
    if not pickedObj:
        return

    objectName = pickedObj.getProperty("Name")
    if objectName == "grid":
        return

    objectName = getShortenedName(objectName)

    displayPoint = displayPoint[0], view.height - displayPoint[1]

    globalPos = view.mapToGlobal(QtCore.QPoint(*displayPoint))

    menu = QtGui.QMenu(view)

    widgetAction = QtGui.QWidgetAction(menu)
    label = QtGui.QLabel("<b>%s</b>" % objectName)
    label.setContentsMargins(9, 9, 6, 6)
    widgetAction.setDefaultWidget(label)
    menu.addAction(widgetAction)
    menu.addSeparator()

    propertiesPanel = PythonQt.dd.ddPropertiesPanel()
    propertiesPanel.setBrowserModeToWidget()
    panelConnector = propertyset.PropertyPanelConnector(
        pickedObj.properties, propertiesPanel)

    def onMenuHidden():
        panelConnector.cleanup()

    menu.connect("aboutToHide()", onMenuHidden)

    propertiesMenu = menu.addMenu("Properties")
    propertiesWidgetAction = QtGui.QWidgetAction(propertiesMenu)
    propertiesWidgetAction.setDefaultWidget(propertiesPanel)
    propertiesMenu.addAction(propertiesWidgetAction)

    actions = getContextMenuActions(view, pickedObj, pickedPoint)

    for actionName, func in actions:
        if not actionName:
            menu.addSeparator()
        else:
            action = menu.addAction(actionName)
            action.connect("triggered()", func)

    selectedAction = menu.popup(globalPos)
Example #5
0
    def iterate(self):
        if PyQt4:
            if self.ready:  # set from thread
                if not self.remotepointer:
                    self.remotepointer = widget = QtGui.QWidget()
                    widget.resize(24, 24)
                    widget.setWindowTitle('remote pointer')
                    flags = Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint
                    widget.setWindowFlags(flags)
                    widget.setAttribute(Qt.WA_TranslucentBackground)
                    self.remotepointer_button = but = QtGui.QToolButton(widget)
                    but.setArrowType(Qt.UpArrow)
                    but.setGeometry(0, 0, 24, 24)  #but.setText('xx')
                self.remotepointer.show()

            if self.remotepointer and not self.clients:
                self.remotepointer.hide()

            if self.ready_mouse:  # set from thread
                button, x, y = self.ready_mouse
                if button and not self._button_down:
                    self._button_down = True
                    self.remotepointer_button.setArrowType(Qt.DownArrow)
                elif not button and self._button_down:
                    self._button_down = False
                    self.remotepointer_button.setArrowType(Qt.UpArrow)

                _clicktxt = 'click!'
                if len(self._clicks) > 1: _clicktxt = 'double-click!'
                if self._allow_mouse_warp:
                    if self.windll:
                        self.windll.user32.SetCursorPos(x, y)
                        if self._allow_mouse_click and self._clicks:
                            for x, y in self._clicks:
                                self.windll.user32.SetCursorPos(
                                    x,
                                    y)  # seems like this won't work under wine
                                self.windll.user32.mouse_event(2, 0, 0, 0,
                                                               0)  # left down
                                self.windll.user32.mouse_event(3, 0, 0, 0,
                                                               0)  # left up

                    elif gtk:
                        display = gtk.gdk.display_get_default()
                        display.warp_pointer(display.get_default_screen(), x,
                                             y)

                self.remotepointer.move(x + 2, y - 10)

                #if button and (not self._button_down or not QtGui.QToolTip.isVisible()):
                #	self._button_down = True
                #	if QtGui.QToolTip.isVisible(): QtGui.QToolTip.hideText()
                #	QtGui.QToolTip.showText( QtCore.QPoint(x,y), _clicktxt )	# very unthreadsafe
                #elif not button: self._button_down = False
                if self._clicks:
                    if button == 2: _clicktxt = 'right-click!'
                    elif button == 4: _clicktxt = 'middle-click!'
                    if QtGui.QToolTip.isVisible(): QtGui.QToolTip.hideText()
                    QtGui.QToolTip.showText(QtCore.QPoint(x, y), _clicktxt)
                self.ready_mouse = None
                self._clicks = []

            if not naali: app.processEvents()

        if _rfb_.rfbIsActive(self.serverPtr):
            if time.time() - self._lastupdate > self._refresh:
                self._lastupdate = time.time()
                rect = self._rects[self._index]
                x, y, w, h = rect
                self._buffer += self.get_screen_shot(self._antialias, rect)
                self.lock.acquire()
                ctypes.memmove(self.framebuffer, self._buffer,
                               len(self._buffer))
                self.lock.release()
                _rfb_.rfbMarkRectAsModified(self.serverPtr, x, y, w, h)
                self._index += 1
                if self._index == len(self._rects):
                    self._index = 0
                    self._buffer = ''
Example #6
0
def showRightClickMenu(displayPoint, view):

    pickedObj, pickedPoint = vis.findPickedObject(displayPoint, view)
    if not pickedObj:
        return

    objectName = pickedObj.getProperty('Name')
    if objectName == 'grid':
        return

    displayPoint = displayPoint[0], view.height - displayPoint[1]

    globalPos = view.mapToGlobal(QtCore.QPoint(*displayPoint))

    menu = QtGui.QMenu(view)

    widgetAction = QtGui.QWidgetAction(menu)
    label = QtGui.QLabel('<b>%s</b>' % objectName)
    label.setContentsMargins(9,9,6,6)
    widgetAction.setDefaultWidget(label)
    menu.addAction(widgetAction)
    menu.addSeparator()


    propertiesPanel = PythonQt.dd.ddPropertiesPanel()
    propertiesPanel.setBrowserModeToWidget()
    propertyset.PropertyPanelHelper.addPropertiesToPanel(pickedObj.properties, propertiesPanel)

    def onPropertyChanged(prop):
        om.PropertyPanelHelper.setPropertyFromPanel(prop, propertiesPanel, pickedObj.properties)
    propertiesPanel.connect('propertyValueChanged(QtVariantProperty*)', onPropertyChanged)

    propertiesMenu = menu.addMenu('Properties')
    propertiesWidgetAction = QtGui.QWidgetAction(propertiesMenu)
    propertiesWidgetAction.setDefaultWidget(propertiesPanel)
    propertiesMenu.addAction(propertiesWidgetAction)


    def onDelete():
        om.removeFromObjectModel(pickedObj)

    def onHide():
        pickedObj.setProperty('Visible', False)

    def onSelect():
        om.setActiveObject(pickedObj)

    reachFrame = getAsFrame(pickedObj)
    collisionParent = getCollisionParent(pickedObj)
    def onReachLeft():
        reachToFrame(reachFrame, 'left', collisionParent)
    def onReachRight():
        reachToFrame(reachFrame, 'right', collisionParent)

    def flipHandSide():
        for obj in [pickedObj] + pickedObj.children():
            if not isGraspSeed(obj):
                continue
            side = 'right' if obj.side == 'left' else 'left'
            obj.side = side
            color = [1.0, 1.0, 0.0]
            if side == 'right':
                color = [0.33, 1.0, 0.0]
            obj.setProperty('Color', color)

    def flipHandThumb():
        handFrame = pickedObj.children()[0]
        t = transformUtils.copyFrame(handFrame.transform)
        t.PreMultiply()
        t.RotateY(180)
        handFrame.copyFrame(t)
        pickedObj._renderAllViews()

    def onSplineLeft():
        splinewidget.planner.newSpline(pickedObj, 'left')
    def onSplineRight():
        splinewidget.planner.newSpline(pickedObj, 'right')


    def getPointCloud(obj):
        try:
            obj = obj.model.polyDataObj
        except AttributeError:
            pass
        try:
            obj.polyData
        except AttributeError:
            return None
        if obj and obj.polyData.GetNumberOfPoints():# and (obj.polyData.GetNumberOfCells() == obj.polyData.GetNumberOfVerts()):
            return obj


    pointCloudObj = getPointCloud(pickedObj)
    affordanceObj = pickedObj if isinstance(pickedObj, affordanceitems.AffordanceItem) else None

    def onSegmentGround():
        groundPoints, scenePoints =  segmentation.removeGround(pointCloudObj.polyData)
        vis.showPolyData(groundPoints, 'ground points', color=[0,1,0], parent='segmentation')
        vis.showPolyData(scenePoints, 'scene points', color=[1,0,1], parent='segmentation')
        pickedObj.setProperty('Visible', False)


    def onCopyPointCloud():
        global lastRandomColor
        polyData = vtk.vtkPolyData()
        polyData.DeepCopy(pointCloudObj.polyData)
        
        if pointCloudObj.getChildFrame():
            polyData = segmentation.transformPolyData(polyData, pointCloudObj.getChildFrame().transform)
        polyData = segmentation.addCoordArraysToPolyData(polyData)

        # generate random color, and average with a common color to make them generally similar
        lastRandomColor = lastRandomColor + 0.1 + 0.1*random.random()
        rgb = colorsys.hls_to_rgb(lastRandomColor, 0.7, 1.0)
        obj = vis.showPolyData(polyData, pointCloudObj.getProperty('Name') + ' copy', color=rgb, parent='point clouds')

        t = vtk.vtkTransform()
        t.PostMultiply()
        t.Translate(filterUtils.computeCentroid(polyData))
        segmentation.makeMovable(obj, t)
        om.setActiveObject(obj)
        pickedObj.setProperty('Visible', False)

    def onMergeIntoPointCloud():
        allPointClouds = om.findObjectByName('point clouds')
        if allPointClouds:
            allPointClouds = [i.getProperty('Name') for i in allPointClouds.children()]
        sel =  QtGui.QInputDialog.getItem(None, "Point Cloud Merging", "Pick point cloud to merge into:", allPointClouds, current=0, editable=False)
        sel = om.findObjectByName(sel)

        # Make a copy of each in same frame
        polyDataInto = vtk.vtkPolyData()
        polyDataInto.ShallowCopy(sel.polyData)
        if sel.getChildFrame():
            polyDataInto = segmentation.transformPolyData(polyDataInto, sel.getChildFrame().transform)

        polyDataFrom = vtk.vtkPolyData()
        polyDataFrom.DeepCopy(pointCloudObj.polyData)
        if pointCloudObj.getChildFrame():
            polyDataFrom = segmentation.transformPolyData(polyDataFrom, pointCloudObj.getChildFrame().transform)

        # Actual merge
        append = filterUtils.appendPolyData([polyDataFrom, polyDataInto])
        if sel.getChildFrame():
            polyDataInto = segmentation.transformPolyData(polyDataInto, sel.getChildFrame().transform.GetInverse())

        # resample
        append = segmentationroutines.applyVoxelGrid(append, 0.01)
        append = segmentation.addCoordArraysToPolyData(append)

        # Recenter the frame
        sel.setPolyData(append)
        t = vtk.vtkTransform()
        t.PostMultiply()
        t.Translate(filterUtils.computeCentroid(append))
        segmentation.makeMovable(sel, t)

        # Hide the old one
        if pointCloudObj.getProperty('Name') in allPointClouds:
            pointCloudObj.setProperty('Visible', False)


    def onSegmentTableScene():
        data = segmentation.segmentTableScene(pointCloudObj.polyData, pickedPoint)
        vis.showClusterObjects(data.clusters + [data.table], parent='segmentation')

    def onSegmentDrillAlignedWithTable():
        segmentation.segmentDrillAlignedWithTable(pickedPoint, pointCloudObj.polyData)

    def onCachePickedPoint():
        ''' Cache the Picked Point for general purpose use'''
        global lastCachedPickedPoint
        lastCachedPickedPoint = pickedPoint
        #data = segmentation.segmentTableScene(pointCloudObj.polyData, pickedPoint)
        #vis.showClusterObjects(data.clusters + [data.table], parent='segmentation')


    def onLocalPlaneFit():
        planePoints, normal = segmentation.applyLocalPlaneFit(pointCloudObj.polyData, pickedPoint, searchRadius=0.1, searchRadiusEnd=0.2)
        obj = vis.showPolyData(planePoints, 'local plane fit', color=[0,1,0])
        obj.setProperty('Point Size', 7)

        fields = segmentation.makePolyDataFields(obj.polyData)

        pose = transformUtils.poseFromTransform(fields.frame)
        desc = dict(classname='BoxAffordanceItem', Name='local plane', Dimensions=list(fields.dims), pose=pose)
        box = segmentation.affordanceManager.newAffordanceFromDescription(desc)

    def onOrientToMajorPlane():
        polyData, planeFrame = segmentation.orientToMajorPlane(pointCloudObj.polyData, pickedPoint=pickedPoint)
        pointCloudObj.setPolyData(polyData)


    def onDiskGlyph():
        result = segmentation.applyDiskGlyphs(pointCloudObj.polyData)
        obj = vis.showPolyData(result, 'disks', color=[0.8,0.8,0.8])
        om.setActiveObject(obj)
        pickedObj.setProperty('Visible', False)

    def onArrowGlyph():
        result = segmentation.applyArrowGlyphs(pointCloudObj.polyData)
        obj = vis.showPolyData(result, 'disks')

    def onSegmentationEditor():
        segmentationpanel.activateSegmentationMode(pointCloudObj.polyData)

    def addNewFrame():
        t = transformUtils.copyFrame(affordanceObj.getChildFrame().transform)
        t.PostMultiply()
        t.Translate(np.array(pickedPoint) - np.array(t.GetPosition()))
        newFrame = vis.showFrame(t, '%s frame %d' % (affordanceObj.getProperty('Name'), len(affordanceObj.children())), scale=0.2, parent=affordanceObj)
        affordanceObj.getChildFrame().getFrameSync().addFrame(newFrame, ignoreIncoming=True)

    def copyAffordance():
        desc = dict(affordanceObj.getDescription())
        del desc['uuid']
        desc['Name'] = desc['Name'] + ' copy'
        aff = robotSystem.affordanceManager.newAffordanceFromDescription(desc)
        aff.getChildFrame().setProperty('Edit', True)

    def onPromoteToAffordance():
        affObj = affordanceitems.MeshAffordanceItem.promotePolyDataItem(pickedObj)
        robotSystem.affordanceManager.registerAffordance(affObj)

    actions = [
      (None, None),
      ('Hide', onHide),
      ('Delete', onDelete),
      ('Select', onSelect)
      ]


    if affordanceObj:
        actions.extend([
            ('Copy affordance', copyAffordance),
            ('Add new frame', addNewFrame),
        ])

    elif type(pickedObj) == vis.PolyDataItem:
        actions.extend([
            ('Promote to Affordance', onPromoteToAffordance),
        ])

    if isGraspSeed(pickedObj):
        actions.extend([
            (None, None),
            ('Flip Side', flipHandSide),
            ('Flip Thumb', flipHandThumb),
        ])

    if reachFrame is not None:
        actions.extend([
            (None, None),
            ('Reach Left', onReachLeft),
            ('Reach Right', onReachRight),
            #('Spline Left', onSplineLeft),
            #('Spline Right', onSplineRight),
            ])

    if pointCloudObj:
        actions.extend([
            (None, None),
            ('Copy Pointcloud', onCopyPointCloud),
            ('Merge Pointcloud Into', onMergeIntoPointCloud),
            ('Segment Ground', onSegmentGround),
            ('Segment Table', onSegmentTableScene),
            ('Segment Drill Aligned', onSegmentDrillAlignedWithTable),
            ('Local Plane Fit', onLocalPlaneFit),
            ('Orient with Horizontal', onOrientToMajorPlane),
            ('Arrow Glyph', onArrowGlyph),
            ('Disk Glyph', onDiskGlyph),
            ('Cache Pick Point', onCachePickedPoint),
            (None, None),
            ('Open Segmentation Editor', onSegmentationEditor)
            ])

    for actionName, func in actions:
        if not actionName:
            menu.addSeparator()
        else:
            action = menu.addAction(actionName)
            action.connect('triggered()', func)


    selectedAction = menu.popup(globalPos)
Example #7
0
from PythonQt import QtCore, QtGui, example

# call our new constructor of QSize
size = QtCore.QSize(QtCore.QPoint(1, 2))

# call our new QPushButton constructor
button = QtGui.QPushButton("sometext")

# call the move slot (overload1)
button.move(QtCore.QPoint(0, 0))

# call the move slot (overload2)
button.move(0, 0)

# call the static method
print(QtGui.QWidget.mouseGrabber())

# create a CPP object via constructor
yourCpp = example.YourCPPObject(2, 11.5)

# call the wrapped method on CPP object
print(yourCpp.doSomething(3))

# show slots available on yourCpp
print(dir(yourCpp))

# destructor will be called:
yourCpp = None
Example #8
0
 def showHelpTooltip(self):
     QtGui.QToolTip.showText(self.helpButton.mapToGlobal(QtCore.QPoint(0, 0)), self.helpButton.toolTip)