def init(self, treeWidget, propertiesPanel): self._treeWidget = treeWidget self._propertiesPanel = propertiesPanel propertiesPanel.clear() propertiesPanel.setBrowserModeToWidget() treeWidget.setColumnCount(2) treeWidget.setHeaderLabels(['Name', '']) treeWidget.headerItem().setIcon(1, Icons.getIcon(Icons.Eye)) treeWidget.header().setVisible(True) treeWidget.header().setStretchLastSection(False) if int(re.search(r'^([0-9]+).*', QtCore.qVersion()).group(1)) < 5: treeWidget.header().setResizeMode(0, QtGui.QHeaderView.Stretch) treeWidget.header().setResizeMode(1, QtGui.QHeaderView.Fixed) else: treeWidget.header().setSectionResizeMode(0, QtGui.QHeaderView.Stretch) treeWidget.header().setSectionResizeMode(1, QtGui.QHeaderView.Fixed) treeWidget.setColumnWidth(1, 24) treeWidget.connect('itemSelectionChanged()', self._onTreeSelectionChanged) treeWidget.connect('itemClicked(QTreeWidgetItem*, int)', self._onItemClicked) treeWidget.connect('customContextMenuRequested(const QPoint&)', self._onShowContextMenu) treeWidget.setContextMenuPolicy(PythonQt.QtCore.Qt.CustomContextMenu); self._eventFilter = PythonQt.dd.ddPythonEventFilter() self._eventFilter.addFilteredEventType(QtCore.QEvent.KeyPress) self._eventFilter.connect('handleEvent(QObject*, QEvent*)', self._filterEvent) treeWidget.installEventFilter(self._eventFilter)
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 __init__(self, view): self.view = view loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddScreenGrabber.ui') assert uifile.open(uifile.ReadOnly) self.frameCount = 0 self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.ui.lockViewSizeCheck.connect('clicked()', self.onLockViewSize) self.ui.screenshotOutputBrowseButton.connect('clicked()', self.onChooseScreenshotOutputDir) self.ui.movieOutputBrowseButton.connect('clicked()', self.onChooseMovieOutputDir) self.ui.saveScreenshotButton.connect('clicked()', self.onSaveScreenshot) self.ui.recordMovieButton.connect('clicked()', self.onRecordMovie) self.ui.viewSizeCombo.connect('currentIndexChanged(const QString&)', self.updateViewSize) self.ui.viewHeightSpin.connect('valueChanged(int)', self.onViewSizeChanged) self.ui.viewWidthSpin.connect('valueChanged(int)', self.onViewSizeChanged) self.updateViewSize() self.onLockViewSize() self.recordTimer = QtCore.QTimer() self.recordTimer.connect('timeout()', self.onRecordTimer) self.fpsCounter = FPSCounter() self.eventFilter = PythonQt.dd.ddPythonEventFilter() self.ui.scrollArea.installEventFilter(self.eventFilter) self.eventFilter.addFilteredEventType(QtCore.QEvent.Resize) self.eventFilter.connect('handleEvent(QObject*, QEvent*)', self.onEvent)
def set_animation_path_list(self, flag): folder_path = QtGui.QFileDialog.getExistingDirectory(None, "Animation Folder", QtGui.QFileDialog.ShowDirsOnly) filter = self.mdsa.convert_qstring_to_py(str(raw_input(self.animation_ext_comboBox.currentText()))) print(filter) self.mdsa.set_animation_folder(folder_path, filter) file_list = self.mdsa.open_animation_file_list for char in file_list: fileInfo = QtCore.QFileInfo(char) fileName = fileInfo.fileName() item = QtGui.QListWidgetItem(self.animation_listWidget) item.setData(32, char) item.setText(fileName)
def __init__(self, windowTitle='Task Panel'): loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddTaskUserPanel.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.widget.setWindowTitle(windowTitle) self.manualButtons = {} self.imageViewLayout = QtGui.QHBoxLayout(self.ui.imageFrame) self._setupParams() self._setupPropertiesPanel() self._initTaskPanel()
def keyPressEvent(self, event): if (event.key() == 0x01000012): self.runLaunched = True self.player.turn(1) elif (event.key() == 0x01000014): self.runLaunched = True self.player.turn(0) elif (event.key() == 0x01000013): self.runLaunched = True self.moveDirection_ = 1 elif (event.key() == 0x01000015): self.runLaunched = True self.moveDirection_ = -1 elif (event.key() == 0x20): self.runLaunched = False self.player.reset() self.currentTime = QtCore.QTimer(0, 0)
def showDialog(mainWindow, grid): loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/VelodyneHDLPlugin/vvGridAdjustmentDialog.ui') if not uifile.open(uifile.ReadOnly): print 'error opening file' return dialog = loader.load(uifile, mainWindow) uifile.close() def w(name): for widget in dialog.children(): if widget.objectName == name: return widget w('SensorUpX').setValue(grid.Normal[0]) w('SensorUpY').setValue(grid.Normal[1]) w('SensorUpZ').setValue(grid.Normal[2]) w('SensorOriginX').setValue(-grid.Origin[0]) w('SensorOriginY').setValue(-grid.Origin[1]) w('SensorOriginZ').setValue(-grid.Origin[2]) w('GridResolution').setValue(grid.Scale) w('GridWidth').setValue(grid.Scale * grid.GridSize) accepted = dialog.exec_() if not accepted: return False grid.Normal = [ w('SensorUpX').value, w('SensorUpY').value, w('SensorUpZ').value ] grid.Origin = [ -w('SensorOriginX').value, -w('SensorOriginY').value, -w('SensorOriginZ').value ] grid.Scale = w('GridResolution').value grid.GridSize = int( math.ceil(w('GridWidth').value / w('GridResolution').value)) return True
def buildTabWidget(self, jointGroups): self.slidersMap = {} self.labelMap = {} for group in jointGroups: groupName = group['name'] joints = group['joints'] labels = group['labels'] if groupName.lower() == 'base': continue if len(labels) != len(joints): print 'error, joints/labels mismatch for joint group:', name continue jointGroupWidget = QtGui.QWidget() gridLayout = QtGui.QGridLayout(jointGroupWidget) gridLayout.setColumnStretch(0, 1) for jointName, labelText in zip(joints, labels): label = QtGui.QLabel(labelText) numericLabel = QtGui.QLabel('0.0') slider = QtGui.QSlider(QtCore.Qt.Vertical) column = gridLayout.columnCount() gridLayout.addWidget(label, 0, column) gridLayout.addWidget(slider, 1, column) gridLayout.addWidget(numericLabel, 2, column) self.slidersMap[jointName] = slider self.labelMap[slider] = numericLabel gridLayout.setColumnStretch(gridLayout.columnCount(), 1) self.widget.addTab(jointGroupWidget, groupName) self.widget.usesScrollButtons = False self.signalMapper = QtCore.QSignalMapper() self.sliderMax = 1000.0 for jointName, slider in self.slidersMap.iteritems(): slider.connect('valueChanged(int)', self.signalMapper, 'map()') self.signalMapper.setMapping(slider, jointName) slider.setMaximum(self.sliderMax) self.signalMapper.connect('mapped(const QString&)', self.sliderChanged)
def __init__(self, driver): self.driver = driver loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddAtlasDriverPanel.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.widget.setWindowTitle('Atlas Driver Panel') self.ui = WidgetDict(self.widget.children()) # Main Panel self.ui.calibrateEncodersButton.connect('clicked()', self.onCalibrateEncoders) self.ui.prepButton.connect('clicked()', self.onPrep) self.ui.combinedStandButton.connect('clicked()', self.onCombinedStand) self.ui.stopButton.connect('clicked()', self.onStop) self.ui.freezeButton.connect('clicked()', self.onFreeze) self.ui.calibrateNullBiasButton.connect('clicked()', self.onCalibrateNullBias) self.ui.calibrateElectricArmsButton.connect('clicked()', self.onCalibrateElectricArms) self.ui.tareFTButton.connect('clicked()', self.onTareFT) self.ui.initNavButton.connect('clicked()', self.onInitNav) self.ui.standButton.connect('clicked()', self.onStand) self.ui.mitStandButton.connect('clicked()', self.onMITStand) self.ui.userButton.connect('clicked()', self.onUser) self.ui.manipButton.connect('clicked()', self.onManip) self.ui.recoveryOnButton.connect('clicked()', self.driver.sendRecoveryEnable) self.ui.recoveryOffButton.connect('clicked()', self.driver.sendRecoveryDisable) self.ui.bracingOnButton.connect('clicked()', self.driver.sendBracingEnable) self.ui.bracingOffButton.connect('clicked()', self.driver.sendBracingDisable) for psi in [1000, 1500, 2000, 2400, 2650]: self.ui.__dict__['setPressure' + str(psi) + 'Button'].connect('clicked()', partial(self.driver.sendDesiredPumpPsi, psi)) self.ui.sendCustomPressureButton.connect('clicked()', self.sendCustomPressure) self.setupElectricArmCheckBoxes() PythonQt.dd.ddGroupBoxHider(self.ui.calibrationGroupBox) PythonQt.dd.ddGroupBoxHider(self.ui.pumpStatusGroupBox) PythonQt.dd.ddGroupBoxHider(self.ui.electricArmStatusGroupBox) self.updateTimer = TimerCallback(targetFps=5) self.updateTimer.callback = self.updatePanel self.updateTimer.start() self.updatePanel()
def __init__(self, jointController, footstepDriver): self.jointController = jointController self.footstepDriver = footstepDriver loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddMapping.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.ui.startMappingButton.connect("clicked()", self.onStartMappingButton) self.ui.stopMappingButton.connect("clicked()", self.onStopMappingButton) self.ui.showMapButton.connect("clicked()", self.onShowMapButton) self.ui.hideMapButton.connect("clicked()", self.onHideMapButton) self.queue = PythonQt.dd.ddBotImageQueue(lcmUtils.getGlobalLCMThread()) self.queue.init(lcmUtils.getGlobalLCMThread(), drcargs.args().config_file)
def __init__(self, robotSystem): loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddJointCommandPanel.ui') assert uifile.open(uifile.ReadOnly) self.robotSystem = robotSystem self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.ui.streamingButton.connect('clicked()', self.onStreamingClicked) self.ui.resetButton.connect('clicked()', self.onResetClicked) self.ui.hidePreviewButton.connect('clicked()', self.onHidePreviewClicked) self.ui.previewSlider.connect('valueChanged(int)', self.onPreviewSliderChanged) self.ui.speedSpinBox.connect('valueChanged(double)', self.onSpeedChanged) self.hidePreviewModels() self.throttleControlEnabled = False self.steeringControlEnabled = False
def __init__(self, multisenseDriver, neckDriver): self.multisenseDriver = multisenseDriver self.neckDriver = neckDriver self.neckPitchChanged = False self.multisenseChanged = False loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddMultisense.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.updateTimer = TimerCallback(targetFps=2) self.updateTimer.callback = self.updatePanel self.updateTimer.start() self.widget.headCamGainSpinner.setEnabled(False) self.widget.headCamExposureSpinner.setEnabled(False) #connect the callbacks self.widget.neckPitchSpinner.valueChanged.connect(self.neckPitchChange) self.widget.spinRateSpinner.valueChanged.connect(self.spinRateChange) self.widget.scanDurationSpinner.valueChanged.connect( self.scanDurationChange) self.widget.headCamFpsSpinner.valueChanged.connect( self.headCamFpsChange) self.widget.headCamGainSpinner.valueChanged.connect( self.headCamGainChange) self.widget.headCamExposureSpinner.valueChanged.connect( self.headCamExposureChange) self.widget.headAutoGainCheck.clicked.connect( self.headCamAutoGainChange) self.widget.ledOnCheck.clicked.connect(self.ledOnCheckChange) self.widget.ledBrightnessSpinner.valueChanged.connect( self.ledBrightnessChange) self.widget.sendButton.clicked.connect(self.sendButtonClicked) self.updatePanel()
def __init__(self, parent=KnossosModule.knossos_global_mainwindow): #Qt.QApplication.processEvents() super(main_class, self).__init__(parent, Qt.Qt.WA_DeleteOnClose) try: exec( KnossosModule.scripting.getInstanceInContainerStr(__name__) + " = self") except KeyError: # Allow running from __main__ context pass # get port while True: inputter = InputDialog(parent) inputter.exec_() if inputter.aborted: return port = int(inputter.text.text.decode()) host = inputter.text_ip.text.decode() self._synthresh = float(inputter.text_synthresh.text.decode()) self._axodend_only = inputter.axodend_button.isChecked() self.syconn_gate = None self.host = host self.port = port self.ssv_selected1 = 0 self.syn_selected1 = None self.obj_tree_ids = set() self.obj_id_offs = 2000000000 self.all_syns = None try: self.init_syconn() self.build_gui() self.timer = QtCore.QTimer() self.timer.timeout.connect( self.exploration_mode_callback_check) self.timer.start(1000) break except requests.exceptions.ConnectionError as e: print("Failed to establish connection to SyConn Server.", str(e)) pass
def __init__(self, jointController, footstepDriver): self.jointController = jointController self.footstepDriver = footstepDriver loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddNavigation.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.ui.captureButton.connect("clicked()", self.onCaptureButton) self.ui.visualizeButton.connect("clicked()", self.onVisualizeButton) self.ui.planButton.connect("clicked()", self.onPlanButton) self.ui.reversePlanButton.connect("clicked()", self.onReversePlanButton) self.ui.initAtZeroButton.connect("clicked()", self.onInitAtZeroButton) self.ui.restartNavButton.connect("clicked()", self.onRestartNavButton) self.ui.showMapButton.connect("clicked()", self.onShowMapButton) self.ui.hideMapButton.connect("clicked()", self.onHideMapButton) self.ui.disableLaserButton.connect("clicked()", self.onDisableLaserButton) self.ui.enableLaserButton.connect("clicked()", self.onEnableLaserButton) self.ui.startNewMapButton.connect("clicked()", self.onStartNewMapButton) self.ui.useNewMapButton.connect("clicked()", self.onUseNewMapButton) self.ui.disableContinuousButton.connect("clicked()", self.onDisableContinuousButton) self.ui.enableContinuousButton.connect("clicked()", self.onEnableContinuousButton) # Data Variables: self.goal = dict() self.init_frame = None self.octomap_cloud = None # used by continuousWalkingDemo self.automaticContinuousWalkingEnabled = False
def __init__(self, driver, robotModel, jointController, irisDriver): self.driver = driver self.robotModel = robotModel self.jointController = jointController loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddFootsteps.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.placer = None self.irisDriver = irisDriver self.region_seed_frames = [] self.ui = WidgetDict(self.widget.children()) self.ui.walkingGoalButton.connect("clicked()", self.onNewWalkingGoal) self.ui.walkingPlanButton.connect("clicked()", self.onShowWalkingPlan) self.ui.stopButton.connect("clicked()", self.onStop) self.ui.simulateDrakeButton.connect("clicked()", self.onSimulateDrake) self.ui.haltSimulationDrakeButton.connect("clicked()", self.onHaltSimulationDrake) self.ui.restoreDefaultsButton.connect("clicked()", lambda: self.applyDefaults()) self.ui.showWalkingVolumesCheck.connect("clicked()", self.onShowWalkingVolumes) ### BDI frame logic self.ui.hideBDIButton.setVisible(False) self.ui.showBDIButton.setVisible(False) self.ui.hideBDIButton.connect("clicked()", self.onHideBDIButton) self.ui.showBDIButton.connect("clicked()", self.onShowBDIButton) self.ui.newRegionSeedButton.connect("clicked()", self.onNewRegionSeed) self.ui.autoIRISSegmentationButton.connect("clicked()", self.onAutoIRISSegmentation) self._setupPropertiesPanel()
def convert(self): uiFile = self.uiNameEdit.text if (len(uiFile) < 3): #nothing inserted QtGui.QMessageBox.critical( 0, "Error", "ui file name is not inserted! I don't know, what to handle. Sorry." ) return self.insertMessageBox = QtGui.QMessageBox( QtGui.QMessageBox.Information, "Insert", "Place cursor where you would like the code to be pasted") self.insertMessageBox.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) self.insertMessageBox.setModal(False) # don't block QtCore.QObject.connect( self.insertMessageBox.button(self.insertMessageBox.Ok), QtCore.SIGNAL("clicked()"), self.insertText) self.insertMessageBox.setWindowFlags( self.insertMessageBox.windowFlags() | QtCore.Qt.WindowStaysOnTopHint) # on top until a buttin is pressed self.insertMessageBox.show()
def __init__(self): loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddSensorDataRequest.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self._updateBlocked = True self.groups = {} self.registerType('camHead', data_request_t.CAMERA_IMAGE_HEAD_LEFT) self.registerType('camChestLeft', data_request_t.CAMERA_IMAGE_LCHEST) self.registerType('camChestRight', data_request_t.CAMERA_IMAGE_RCHEST) self.registerType('mapSceneHeight', data_request_t.HEIGHT_MAP_SCENE) self.registerType('mapSceneDepth', data_request_t.DEPTH_MAP_SCENE) self.registerType('mapWorkspaceDepth', data_request_t.DEPTH_MAP_WORKSPACE_C) self.registerType('mapFusedStereoHeight', data_request_t.FUSED_HEIGHT) self.widget.applyAllButton.clicked.connect(self.applyAllButtonClicked)
def main(): filenames = ctx.pluginfilenames() headers = [ "timestamp (int)", "thumbnail (QByteArray)", "filename (QString)" ] ctx.gui_set_headers(headers) ctx.gui_setMainProgressBar(0) ctx.gui_setMainLabel("Status: Converting image to thumbnail") i = 0 for fsname in filenames: ret = thumbnail.generate(ctx, fsname) if (ret != -1): ctx.gui_set_data(i, 0, ret[0]) ctx.gui_set_data(i, 1, QtCore.QByteArray(bytes(ret[1]))) ctx.gui_set_data(i, 2, ret[2]) i = i + 1 ctx.gui_update() ctx.gui_setMainLabel("Status: Idle.") ctx.gui_setMainProgressBar(0) return "Finished running plugin."
def __init__(self, view, robotSystem): self.view = view loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(":/ui/ddFrameVisualization.ui") assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) # self.botFrameUpdater = BotFrameUpdater(self.ui.botFramesListWidget) self.linkFrameUpdater = LinkFrameUpdater(robotSystem.robotStateModel, self.ui.linkFramesListWidget) self.eventFilter = PythonQt.dd.ddPythonEventFilter() self.ui.scrollArea.installEventFilter(self.eventFilter) self.ui.allFramesCheckBox.connect("stateChanged(int)", self.toggleAllFrames) self.eventFilter.addFilteredEventType(QtCore.QEvent.Resize) self.eventFilter.connect("handleEvent(QObject*, QEvent*)", self.onEvent)
def __init__(self, pfgrasper, _prevParent, imageView, imagePicker, cameraview): loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddPFGrasp.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self._updateBlocked = True # main states self.pfgrasper = pfgrasper # for image overlay function self._prevParent = _prevParent self.imageView = imageView self.imagePicker = imagePicker self.cameraview = cameraview #Connect signals self.ui.showLHandCameraButton.clicked.connect( self.showLHandCameraButtonClicked) self.ui.showRHandCameraButton.clicked.connect( self.showRHandCameraButtonClicked) self.ui.startStepButton.clicked.connect(self.startStepButtonClicked) self.ui.startAutoButton.clicked.connect(self.startAutoButtonClicked) self.ui.runOneIterButton.clicked.connect(self.runOneIterButtonClicked) self.ui.stopButton.clicked.connect(self.stopButtonClicked) self.ui.startGraspButton.clicked.connect(self.startGraspButtonClicked) self.ui.spawnDrillButton.clicked.connect(self.spawnDrillButtonClicked) self.ui.projectDrillButton.clicked.connect( self.projectDrillButtonClicked) self.ui.reachDrillButton.clicked.connect(self.reachDrillButtonClicked) self.ui.graspDrillButton.clicked.connect(self.graspDrillButtonClicked) self.ui.apply3DFitButton.clicked.connect(self.apply3DFitButtonClicked)
def __init__(self, view, affordanceManager, jointController=None, raycastDriver=None): self.view = view self.affordanceManager = affordanceManager self.jointController = jointController self.raycastDriver = raycastDriver loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddAffordancePanel.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.ui.affordanceListWidget.hide() self.ui.spawnBoxButton.connect('clicked()', self.onSpawnBox) self.ui.spawnSphereButton.connect('clicked()', self.onSpawnSphere) self.ui.spawnCylinderButton.connect('clicked()', self.onSpawnCylinder) self.ui.spawnCapsuleButton.connect('clicked()', self.onSpawnCapsule) self.ui.spawnRingButton.connect('clicked()', self.onSpawnRing) self.ui.spawnMeshButton.connect('clicked()', self.onSpawnMesh) self.ui.getRaycastTerrainButton.connect('clicked()', self.onGetRaycastTerrain) if not self.raycastDriver: self.ui.getRaycastTerrainButton.hide() self.eventFilter = PythonQt.dd.ddPythonEventFilter() self.ui.scrollArea.installEventFilter(self.eventFilter) self.eventFilter.addFilteredEventType(QtCore.QEvent.Resize) self.eventFilter.connect('handleEvent(QObject*, QEvent*)', self.onEvent)
def init(self, treeWidget, propertiesPanel): self._treeWidget = treeWidget self._propertiesPanel = propertiesPanel propertiesPanel.clear() propertiesPanel.setBrowserModeToWidget() propertiesPanel.connect('propertyValueChanged(QtVariantProperty*)', self.onPropertyChanged) treeWidget.setColumnCount(2) treeWidget.setHeaderLabels(['Name', '']) treeWidget.headerItem().setIcon(1, Icons.getIcon(Icons.Eye)) treeWidget.header().setVisible(True) treeWidget.header().setStretchLastSection(False) if int(re.search(r'^([0-9]+).*', QtCore.qVersion()).group(1)) < 5: treeWidget.header().setResizeMode(0, QtGui.QHeaderView.Stretch) treeWidget.header().setResizeMode(1, QtGui.QHeaderView.Fixed) else: treeWidget.header().setSectionResizeMode(0, QtGui.QHeaderView.Stretch) treeWidget.header().setSectionResizeMode(1, QtGui.QHeaderView.Fixed) treeWidget.setColumnWidth(1, 24) treeWidget.connect('itemSelectionChanged()', self._onTreeSelectionChanged) treeWidget.connect('itemClicked(QTreeWidgetItem*, int)', self._onItemClicked) treeWidget.connect('customContextMenuRequested(const QPoint&)', self._onShowContextMenu) treeWidget.setContextMenuPolicy(PythonQt.QtCore.Qt.CustomContextMenu) self._eventFilter = PythonQt.dd.ddPythonEventFilter() self._eventFilter.addFilteredEventType(QtCore.QEvent.KeyPress) self._eventFilter.connect('handleEvent(QObject*, QEvent*)', self._filterEvent) treeWidget.installEventFilter(self._eventFilter)
def __init__(self, view): self.view = view self.trackerManager = cameracontrol.CameraTrackerManager() self.trackerManager.setView(view) loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(":/ui/ddCameraControlPanel.ui") assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.ui = WidgetDict(self.widget.children()) self.ui.targetNameLabel.setText("None") self.ui.setTargetButton.connect("clicked()", self.onSetTarget) for modeName in self.trackerManager.trackers.keys(): self.ui.trackModeCombo.addItem(modeName) self.ui.trackModeCombo.connect( "currentIndexChanged(const QString&)", self.onTrackModeChanged ) self.ui.controlFrame.setEnabled(False) l = self.ui.propertiesFrame.layout() self.propertiesPanel = PythonQt.dd.ddPropertiesPanel() self.propertiesPanel.setBrowserModeToWidget() l.addWidget(self.propertiesPanel) self.panelConnector = None self.objectPicker = pointpicker.ObjectPicker(self.view) self.objectPicker.callbackFunc = self.onPickObject self.objectPicker.abortFunc = self.onAbortPick self.picking = False om.getDefaultObjectModel().connectObjectClicked(self.onTreeClicked)
def __init__(self): self.applicationInstance().setOrganizationName('RobotLocomotionGroup') self.applicationInstance().setApplicationName('drake-visualizer') om.init() self.view = PythonQt.dd.ddQVTKWidgetView() # init grid self.gridObj = vis.showGrid(self.view, parent='scene') self.gridObj.setProperty('Surface Mode', 'Surface with edges') self.gridObj.setProperty('Color', [0, 0, 0]) self.gridObj.setProperty('Alpha', 0.1) # init view options self.viewOptions = vis.ViewOptionsItem(self.view) om.addToObjectModel(self.viewOptions, parentObj=om.findObjectByName('scene')) self.viewOptions.setProperty('Background color', [0.3, 0.3, 0.35]) self.viewOptions.setProperty('Background color 2', [0.95, 0.95, 1]) # setup camera applogic.setCameraTerrainModeEnabled(self.view, True) applogic.resetCamera(viewDirection=[-1, 0, -0.3], view=self.view) # This setting improves the near plane clipping resolution. # Drake often draws a very large ground plane which is detrimental to # the near clipping for up close objects. The trade-off is Z buffer # resolution but in practice things look good with this setting. self.view.renderer().SetNearClippingPlaneTolerance(0.0005) # add view behaviors self.viewBehaviors = viewbehaviors.ViewBehaviors(self.view) applogic._defaultRenderView = self.view self.mainWindow = QtGui.QMainWindow() self.mainWindow.setCentralWidget(self.view) self.mainWindow.resize(768 * (16 / 9.0), 768) self.mainWindow.setWindowTitle('Drake Visualizer') self.mainWindow.setWindowIcon(QtGui.QIcon(':/images/drake_logo.png')) self.settings = QtCore.QSettings() self.fileMenu = self.mainWindow.menuBar().addMenu('&File') self.viewMenu = self.mainWindow.menuBar().addMenu('&View') self.viewMenuManager = PythonQt.dd.ddViewMenu(self.viewMenu) self.drakeVisualizer = DrakeVisualizer(self.view) self.lcmglManager = lcmgl.LCMGLManager( self.view) if lcmgl.LCMGL_AVAILABLE else None model = om.getDefaultObjectModel() model.getTreeWidget().setWindowTitle('Scene Browser') model.getPropertiesPanel().setWindowTitle('Properties Panel') self.sceneBrowserDock = self.addWidgetToDock( model.getTreeWidget(), QtCore.Qt.LeftDockWidgetArea, visible=False) self.propertiesDock = self.addWidgetToDock( self.wrapScrollArea(model.getPropertiesPanel()), QtCore.Qt.LeftDockWidgetArea, visible=False) self.addViewMenuSeparator() self.screenGrabberPanel = ScreenGrabberPanel(self.view) self.screenGrabberDock = self.addWidgetToDock( self.screenGrabberPanel.widget, QtCore.Qt.RightDockWidgetArea, visible=False) self.cameraBookmarksPanel = camerabookmarks.CameraBookmarkWidget( self.view) self.cameraBookmarksDock = self.addWidgetToDock( self.cameraBookmarksPanel.widget, QtCore.Qt.RightDockWidgetArea, visible=False) self.cameraControlPanel = cameracontrolpanel.CameraControlPanel( self.view) self.cameraControlDock = self.addWidgetToDock( self.cameraControlPanel.widget, QtCore.Qt.RightDockWidgetArea, visible=False) act = self.fileMenu.addAction('&Quit') act.setShortcut(QtGui.QKeySequence('Ctrl+Q')) act.connect('triggered()', self.applicationInstance().quit) self.fileMenu.addSeparator() act = self.fileMenu.addAction('&Open Data...') act.setShortcut(QtGui.QKeySequence('Ctrl+O')) act.connect('triggered()', self._onOpenDataFile) applogic.addShortcut(self.mainWindow, 'F1', self._toggleObjectModel) applogic.addShortcut(self.mainWindow, 'F8', applogic.showPythonConsole) self.applicationInstance().connect('aboutToQuit()', self._onAboutToQuit) for obj in om.getObjects(): obj.setProperty('Deletable', False) self.mainWindow.show() self._saveWindowState('MainWindowDefault') self._restoreWindowState('MainWindowCustom')
def showOnlineKeyboardShortcuts(self): QtGui.QDesktopServices.openUrl( QtCore.QUrl( 'https://openhumanoids.github.io/director/user_guide/keyboard_shortcuts.html#director' ))
def showOnlineDocumentation(self): QtGui.QDesktopServices.openUrl( QtCore.QUrl('https://openhumanoids.github.io/director/'))
def __init__(self, planPlayback, playbackRobotModel, playbackJointController, robotStateModel, robotStateJointController, manipPlanner): self.planPlayback = planPlayback self.playbackRobotModel = playbackRobotModel self.playbackJointController = playbackJointController self.robotStateModel = robotStateModel self.robotStateJointController = robotStateJointController self.manipPlanner = manipPlanner manipPlanner.connectPlanCommitted(self.onPlanCommitted) manipPlanner.connectUseSupports(self.updateButtonColor) self.autoPlay = True #self.useOperationColors() self.useDevelopmentColors() self.planFramesObj = None self.plan = None self.poseInterpolator = None self.startTime = 0.0 self.endTime = 1.0 self.animationTimer = TimerCallback() self.animationTimer.targetFps = 60 self.animationTimer.callback = self.updateAnimation self.animationClock = SimpleTimer() loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddPlaybackPanel.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) uifile.close() self.ui = WidgetDict(self.widget.children()) self.ui.viewModeCombo.connect('currentIndexChanged(const QString&)', self.viewModeChanged) self.ui.playbackSpeedCombo.connect( 'currentIndexChanged(const QString&)', self.playbackSpeedChanged) self.ui.interpolationCombo.connect( 'currentIndexChanged(const QString&)', self.interpolationChanged) self.ui.samplesSpinBox.connect('valueChanged(int)', self.numberOfSamplesChanged) self.ui.playbackSlider.connect('valueChanged(int)', self.playbackSliderValueChanged) self.ui.animateButton.connect('clicked()', self.animateClicked) self.ui.hideButton.connect('clicked()', self.hideClicked) self.ui.executeButton.connect('clicked()', self.executeClicked) self.ui.executeButton.setShortcut(QtGui.QKeySequence('Ctrl+Return')) self.ui.stopButton.connect('clicked()', self.stopClicked) self.ui.executeButton.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.ui.executeButton.connect( 'customContextMenuRequested(const QPoint&)', self.showExecuteContextMenu) self.setPlan(None) self.hideClicked()
def getSettings(self): return QtCore.QSettings("mitdrc", "RobotPoseGUI")
def onOpenOnlineHelp(): QtGui.QDesktopServices.openUrl(QtCore.QUrl('https://github.com/RobotLocomotion/director/blob/master/docs/director/README.md'))
def setupUi(self): #set Main Window Title. self.setWindowTitle("xg Texture Exporter") self.setObjectName("xgTextureExportGUI") self.setEnabled(True) self.resize(545, 702) ##===================================== CentralLayout ============================ self.centralwidget = QtGui.QWidget() self.centralwidget.setObjectName("centralwidget") ##===================================== MasterLayout ============================ self.master_GridLayout = QtGui.QGridLayout(self.centralwidget) self.master_GridLayout.setObjectName("master_GridLayout") ##===================================== TopLayout ============================ self.top_GridLayout = QtGui.QGridLayout() self.top_GridLayout.setObjectName("top_GridLayout") ##=======exportPathLine======## self.exportPathLineEdit = QtGui.QLineEdit(self.centralwidget) self.exportPathLineEdit.setMinimumSize(QtCore.QSize(0, 30)) self.exportPathLineEdit.setObjectName("exportPathLineEdit") self.top_GridLayout.addWidget(self.exportPathLineEdit, 2, 0, 1, 1) ##=======FolderLable=======## self.outputFolderLabel = QtGui.QLabel("Output Folder", self.centralwidget) setBold(self.outputFolderLabel) self.outputFolderLabel.setObjectName("outputFolderLabel") self.top_GridLayout.addWidget(self.outputFolderLabel, 0, 0, 1, 1) ##=======BrowseButton=======## self.browseButton = xgPushButton("browseButton", "Browse", 0, "Choose texture output directory.") self.browseButton.setMinimumSize(QtCore.QSize(0, 30)) self.top_GridLayout.addWidget(self.browseButton, 2, 1, 1, 1) self.master_GridLayout.addLayout(self.top_GridLayout, 0, 0, 1, 1) ##===================================== MidLayout ============================ self.mid_HBoxLayout = QtGui.QHBoxLayout() self.mid_HBoxLayout.setObjectName("mid_HBoxLayout") self.midLeft_GridLayout = QtGui.QGridLayout() self.midLeft_GridLayout.setObjectName("midLeft_GridLayout") ##=======channelsLable=======## self.channels_Label = QtGui.QLabel("Channels", self.centralwidget) setBold(self.channels_Label) self.channels_Label.setObjectName("channels_Label") self.midLeft_GridLayout.addWidget(self.channels_Label, 0, 0, 1, 1) ##=======ChannelButtons=======## self.removeChannel_Button = xgPushButton( "removeChannel_Button", "-", 0, "remove selected channels from export list.") self.removeChannel_Button.setMinimumSize(QtCore.QSize(0, 45)) self.addChannel_Button = xgPushButton( "addChannel_Button", "+", 0, "add selected channels to export list.") self.addChannel_Button.setMinimumSize(QtCore.QSize(0, 45)) self.midLeft_GridLayout.addWidget(self.addChannel_Button, 2, 0, 1, 1) self.midLeft_GridLayout.addWidget(self.removeChannel_Button, 2, 1, 1, 1) ##=======ChannelList=======## self.channelsList_ListWidget = ChannelsToExportList() self.channelsList_ListWidget.isSortingEnabled() self.channelsList_ListWidget.setSortingEnabled(False) self.channelsList_ListWidget.setObjectName("channelsList_ListWidget") QtGui.QListWidgetItem(self.channelsList_ListWidget) self.midLeft_GridLayout.addWidget(self.channelsList_ListWidget, 1, 0, 1, 2) self.mid_HBoxLayout.addLayout(self.midLeft_GridLayout) self.options_GroupBox = QtGui.QGroupBox("Options", self.centralwidget) self.options_GroupBox.setObjectName("options_GroupBox") self.outputFormat_Label = QtGui.QLabel("Output Format :", self.options_GroupBox) self.outputFormat_Label.setGeometry(QtCore.QRect(20, 40, 121, 21)) self.outputFormat_Label.setObjectName("outputFormat_Label") self.resolution_Label = QtGui.QLabel("Resolution:", self.options_GroupBox) self.resolution_Label.setGeometry(QtCore.QRect(20, 70, 121, 21)) self.resolution_Label.setObjectName("resolution_Label") self.processTextures_Label = QtGui.QLabel("process textures:", self.options_GroupBox) self.processTextures_Label.setGeometry(QtCore.QRect(20, 130, 121, 21)) self.processTextures_Label.setObjectName("processTextures_Label") ##=======Options=======## self.outFormat_ComboBox = QtGui.QComboBox(self.options_GroupBox) self.outFormat_ComboBox.setToolTip("define output texture format.") self.outFormat_ComboBox.setGeometry(QtCore.QRect(130, 40, 81, 25)) self.outFormat_ComboBox.setEditable(False) self.outFormat_ComboBox.setObjectName("outFormat_ComboBox") self.outFormat_ComboBox.addItem("exr") self.outFormat_ComboBox.addItem("tif") self.outFormat_ComboBox.setCurrentIndex(1) self.resolution_ComboBox = QtGui.QComboBox(self.options_GroupBox) self.resolution_ComboBox.setToolTip( "define output texture resolution.") self.resolution_ComboBox.setGeometry(QtCore.QRect(100, 70, 111, 25)) self.resolution_ComboBox.setObjectName("resolution_ComboBox") self.resolution_ComboBox.addItem("channel res") self.resolution_ComboBox.addItem("full (8K)") self.resolution_ComboBox.addItem("heigh (4K)") self.resolution_ComboBox.addItem("mid (2K)") self.resolution_ComboBox.addItem("low (1K)") self.clearExpChan_CheckBox = QtGui.QCheckBox("Clear export channels", self.options_GroupBox) self.clearExpChan_CheckBox.setGeometry(QtCore.QRect(20, 100, 181, 23)) self.clearExpChan_CheckBox.setChecked(True) self.clearExpChan_CheckBox.setObjectName("clearExpChan_CheckBox") self.clearExpChan_CheckBox.setToolTip( "delete the flattened channels after export.") self.processTextures_ComboBox = QtGui.QComboBox(self.options_GroupBox) self.processTextures_ComboBox.setToolTip( "define textures processing method.") self.processTextures_ComboBox.setGeometry( QtCore.QRect(135, 130, 105, 25)) self.processTextures_ComboBox.setObjectName("processTextures_ComboBox") self.processTextures_ComboBox.addItem("None") self.processTextures_ComboBox.addItem("Local process") #self.processTextures_ComboBox.addItem("Farm process") #self.texturePublish_CheckBox = QtGui.QCheckBox("Publish farm Textures", self.options_GroupBox) #self.texturePublish_CheckBox.setToolTip("process textures on the farm via texturePublish. \n (convert only will not publish.)") #self.texturePublish_CheckBox.setGeometry(QtCore.QRect(20, 160, 181, 23)) #self.texturePublish_CheckBox.setCheckable(False) #self.texturePublish_CheckBox.setObjectName("texturePublish_CheckBox") ''' self.linear_CheckBox = QtGui.QCheckBox("Local process textures.", self.options_GroupBox) self.linear_CheckBox.setToolTip("convert textures to Mipmap exr localy.") self.linear_CheckBox.setGeometry(QtCore.QRect(20, 130, 181, 23)) #self.linear_CheckBox.setChecked(True) self.linear_CheckBox.setObjectName("linear_CheckBox") self.publish_CheckBox = QtGui.QCheckBox("Publish After Export", self.options_GroupBox) self.publish_CheckBox.setGeometry(QtCore.QRect(20, 190, 181, 23)) self.publish_CheckBox.setCheckable(False) self.publish_CheckBox.setObjectName("publish_CheckBox") ''' self.mid_HBoxLayout.addWidget(self.options_GroupBox) self.master_GridLayout.addLayout(self.mid_HBoxLayout, 1, 0, 1, 1) self.bottom_VBoxLayout = QtGui.QVBoxLayout() self.bottom_VBoxLayout.setObjectName("bottom_VBoxLayout") self.exportChannels_Label = QtGui.QLabel("Channels For Export", self.centralwidget) self.exportChannels_Label.setObjectName("exportChannels_Label") setBold(self.exportChannels_Label) self.bottom_VBoxLayout.addWidget(self.exportChannels_Label) ##======table=======## self.exportChannelsList_tableWidget = QtGui.QTableWidget( self.centralwidget) self.exportChannelsList_tableWidget.setWordWrap(True) self.exportChannelsList_tableWidget.setCornerButtonEnabled(True) #self.exportChannelsList_tableWidget.setRowCount(2) self.exportChannelsList_tableWidget.setObjectName( "exportChannelsList_tableWidget") self.exportChannelsList_tableWidget.setColumnCount(5) self.exportChannelsList_tableWidget.setRowCount(0) self.exportChannelsList_tableWidget.setSelectionBehavior( QtGui.QAbstractItemView.SelectRows) self.exportChannelsList_tableWidget.setSelectionMode( QtGui.QAbstractItemView.SingleSelection) self.exportChannelsList_tableWidget.horizontalHeader().setVisible(True) self.exportChannelsList_tableWidget.horizontalHeader( ).setCascadingSectionResizes(False) self.exportChannelsList_tableWidget.horizontalHeader( ).setMinimumSectionSize(25) self.exportChannelsList_tableWidget.horizontalHeader( ).setSortIndicatorShown(False) #self.exportChannelsList_tableWidget.horizontalHeader().setStretchLastSection(True) self.exportChannelsList_tableWidget.verticalHeader( ).setCascadingSectionResizes(False) self.exportChannelsList_tableWidget.verticalHeader( ).setDefaultSectionSize(28) self.exportChannelsList_tableWidget.verticalHeader( ).setMinimumSectionSize(10) self.itemLine0 = QtGui.QLineEdit("channel") self.item0 = QtGui.QTableWidgetItem(self.itemLine0.text) self.exportChannelsList_tableWidget.setHorizontalHeaderItem( 0, self.item0) self.itemLine1 = QtGui.QLineEdit("type") self.item1 = QtGui.QTableWidgetItem(self.itemLine1.text) self.exportChannelsList_tableWidget.setHorizontalHeaderItem( 1, self.item1) self.itemLine2 = QtGui.QLineEdit("version") self.item2 = QtGui.QTableWidgetItem(self.itemLine2.text) self.exportChannelsList_tableWidget.setHorizontalHeaderItem( 2, self.item2) self.itemLine3 = QtGui.QLineEdit("non_color") self.item3 = QtGui.QTableWidgetItem(self.itemLine3.text) self.exportChannelsList_tableWidget.setHorizontalHeaderItem( 3, self.item3) self.itemLine4 = QtGui.QLineEdit("variation") self.item4 = QtGui.QTableWidgetItem(self.itemLine4.text) self.exportChannelsList_tableWidget.setHorizontalHeaderItem( 4, self.item4) self.exportChannelsList_tableWidget.horizontalHeader( ).setCascadingSectionResizes(False) self.bottom_VBoxLayout.addWidget(self.exportChannelsList_tableWidget) self.exportButton_HBoxLayout = QtGui.QHBoxLayout() self.exportButton_HBoxLayout.setObjectName("exportButton_HBoxLayout") self.cancel_Button = xgPushButton("cancel_Button", "Cancel", 1) self.cancel_Button.setMinimumSize(QtCore.QSize(0, 45)) self.exportButton_HBoxLayout.addWidget(self.cancel_Button) self.exportPatch_Button = xgPushButton("exportPatch_Button", "Export Selected Patches", 1) self.exportPatch_Button.setMinimumSize(QtCore.QSize(200, 45)) self.exportButton_HBoxLayout.addWidget(self.exportPatch_Button) self.export_Button = xgPushButton("export_Button", "Export", 0) self.export_Button.setMinimumSize(QtCore.QSize(200, 45)) self.exportButton_HBoxLayout.addWidget(self.export_Button) self.bottom_VBoxLayout.addLayout(self.exportButton_HBoxLayout) self.master_GridLayout.addLayout(self.bottom_VBoxLayout, 2, 0, 1, 1) self.setLayout(self.master_GridLayout)
def alignShapes(self): # - Helpers def getShapeBounds(work_shapes): tmp_bounds = [shape.bounds() for shape in work_shapes] shape_min_X, shape_min_Y, shape_max_X, shape_max_Y = map( set, zip(*tmp_bounds)) return (min(shape_min_X), min(shape_min_Y), max(shape_max_X), max(shape_max_Y)) def getAlignDict(bounds_tuple): align_dict = { 'L': bounds_tuple[0], 'R': bounds_tuple[2], 'C': bounds_tuple[2] / 2, 'B': bounds_tuple[1], 'T': bounds_tuple[3], 'E': bounds_tuple[3] / 2 } return align_dict # - Init user_mode = self.align_mode[self.cmb_align_mode.currentText] user_x = self.align_x[self.cmb_align_x.currentText] user_y = self.align_y[self.cmb_align_y.currentText] keep_x, keep_y = True, True if user_x == 'K': keep_x = False user_x = 'L' if user_y == 'X': keep_y = False user_y = 'B' process_glyphs = getProcessGlyphs(pMode) # - Process for glyph in process_glyphs: selection = glyph.selectedAtShapes(deep=False) wLayers = glyph._prepareLayers(pLayers) for layerName in wLayers: glyph_shapes = glyph.shapes(layerName, extend=eShape) work_shapes = [ glyph_shapes[index] for index in list(set([item[0] for item in selection])) ] if user_mode == 'CC': # Align shapes to shapes if 1 < len(work_shapes) < 3: sh1, sh2 = work_shapes sh1.alignTo(sh2, user_x + user_y, (keep_x, keep_y)) elif len(work_shapes) > 2: shape_bounds = getShapeBounds(work_shapes) align_type = getAlignDict(shape_bounds) target = Coord(align_type[user_x], align_type[user_y]) for shape in work_shapes: shape.alignTo(target, user_x + user_y, (keep_x, keep_y)) elif user_mode == 'RC': # Align shapes to shapes in reverse order if 1 < len(work_shapes) < 3: sh1, sh2 = work_shapes sh2.alignTo(sh1, user_x + user_y, (keep_x, keep_y)) elif len(work_shapes) > 2: shape_bounds = getShapeBounds(work_shapes) align_type = getAlignDict(shape_bounds) target = Coord(align_type[user_x], align_type[user_y]) for shape in reversed(work_shapes): shape.alignTo(target, user_x + user_y, (keep_x, keep_y)) # !!! To be implemented elif user_mode == 'CN': # Align shape to node pass elif user_mode == 'NN': # Align a node on shape to node on another pass else: metrics = pFontMetrics(glyph.package) max_layer_y = max([ metrics.getXHeight(layerName), metrics.getCapsHeight(layerName), metrics.getAscender(layerName) ]) min_layer_y = min([0, metrics.getDescender(layerName)]) layer_bounds = QtCore.QRect( 0, 0, glyph.getAdvance(layerName), abs(max_layer_y) + abs(min_layer_y)) if user_mode == 'CL': # Align all shapes in given Layer shape_bounds = (layer_bounds.x(), layer_bounds.y(), layer_bounds.x() + layer_bounds.width(), layer_bounds.y() + layer_bounds.height()) elif user_mode == 'CMX': # Align all shapes to X height height = metrics.getXHeight(layerName) shape_bounds = (layer_bounds.x(), 0., layer_bounds.x() + layer_bounds.width(), height) elif user_mode == 'CMC': # Align all shapes to Caps height height = metrics.getCapsHeight(layerName) shape_bounds = (layer_bounds.x(), 0., layer_bounds.x() + layer_bounds.width(), height) elif user_mode == 'CMA': # Align all shapes to Ascender height height = metrics.getAscender(layerName) shape_bounds = (layer_bounds.x(), 0., layer_bounds.x() + layer_bounds.width(), height) elif user_mode == 'CMD': # Align all shapes to Ascender height height = metrics.getDescender(layerName) shape_bounds = (layer_bounds.x(), 0., layer_bounds.x() + layer_bounds.width(), height) align_type = getAlignDict(shape_bounds) target = Coord(align_type[user_x], align_type[user_y]) for shape in glyph_shapes: shape.alignTo(target, user_x + user_y, (keep_x, keep_y)) glyph.update() glyph.updateObject( glyph.fl, 'Glyph: %s;\tAction: Align Shapes @ %s.' % (glyph.name, '; '.join(wLayers)))