예제 #1
0
    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)
예제 #2
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)
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
    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()
예제 #6
0
 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)
예제 #7
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
예제 #8
0
    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)
예제 #9
0
    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()
예제 #10
0
    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)
예제 #11
0
    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
예제 #12
0
    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()
예제 #13
0
    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
예제 #14
0
    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
예제 #15
0
    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()
예제 #16
0
    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()
예제 #17
0
    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)
예제 #18
0
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."
예제 #19
0
    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)
예제 #20
0
    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)
예제 #21
0
    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)
예제 #22
0
    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)
예제 #23
0
    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')
예제 #25
0
 def showOnlineKeyboardShortcuts(self):
     QtGui.QDesktopServices.openUrl(
         QtCore.QUrl(
             'https://openhumanoids.github.io/director/user_guide/keyboard_shortcuts.html#director'
         ))
예제 #26
0
 def showOnlineDocumentation(self):
     QtGui.QDesktopServices.openUrl(
         QtCore.QUrl('https://openhumanoids.github.io/director/'))
예제 #27
0
    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()
예제 #28
0
 def getSettings(self):
     return QtCore.QSettings("mitdrc", "RobotPoseGUI")
예제 #29
0
def onOpenOnlineHelp():

    QtGui.QDesktopServices.openUrl(QtCore.QUrl('https://github.com/RobotLocomotion/director/blob/master/docs/director/README.md'))
예제 #30
0
    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)
예제 #31
0
파일: Element.py 프로젝트: kateliev/TypeRig
    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)))