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)
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)
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)
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 = ''
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)
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
def showHelpTooltip(self): QtGui.QToolTip.showText(self.helpButton.mapToGlobal(QtCore.QPoint(0, 0)), self.helpButton.toolTip)