Example #1
0
    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)))
Example #2
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)
Example #3
0
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Create UI with QtDesigner"))
        Dialog.setMinimumSize(QtCore.QSize(300, 200))
        self.frame = QtGui.QFrame(Dialog)
        self.frame.setGeometry(QtCore.QRect(4, 4, 268, 63))
        self.frame.setObjectName(_fromUtf8("frame"))
        self.keepPyBox = QtGui.QCheckBox(Dialog)
        self.keepPyBox.setGeometry(QtCore.QRect(166, 98, 117, 21))
        self.keepPyBox.setObjectName(_fromUtf8("keepPyBox"))
        self.addPyrunBox = QtGui.QCheckBox(Dialog)
        self.addPyrunBox.setGeometry(QtCore.QRect(21, 98, 141, 21))
        self.addPyrunBox.setObjectName(_fromUtf8("addPyrunBox"))
        self.convertButton = QtGui.QCommandLinkButton(Dialog)
        self.convertButton.setGeometry(QtCore.QRect(70, 130, 168, 41))
        self.convertButton.setObjectName(_fromUtf8("convertButton"))
        self.line = QtGui.QFrame(Dialog)
        self.line.setGeometry(QtCore.QRect(21, 80, 262, 16))
        self.line.setFrameShape(QtGui.QFrame.HLine)
        self.line.setFrameShadow(QtGui.QFrame.Sunken)
        self.line.setObjectName(_fromUtf8("line"))
        self.layoutWidget = QtGui.QWidget(Dialog)
        self.layoutWidget.setGeometry(QtCore.QRect(20, 20, 260, 53))
        self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
        self.gridLayout = QtGui.QGridLayout(self.layoutWidget)
        self.gridLayout.setMargin(0)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.label = QtGui.QLabel(self.layoutWidget)
        self.label.setObjectName(_fromUtf8("label"))
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.uiNameEdit = QtGui.QLineEdit(self.layoutWidget)
        self.uiNameEdit.setObjectName(_fromUtf8("uiNameEdit"))
        self.gridLayout.addWidget(self.uiNameEdit, 0, 1, 1, 3)
        self.newButton = QtGui.QPushButton(self.layoutWidget)
        icon = QtGui.QIcon.fromTheme(_fromUtf8("document-new"))
        self.newButton.setIcon(icon)
        self.newButton.setObjectName(_fromUtf8("newButton"))
        self.gridLayout.addWidget(self.newButton, 1, 0, 1, 2)
        self.openButton = QtGui.QPushButton(self.layoutWidget)
        icon = QtGui.QIcon.fromTheme(_fromUtf8("document-open"))
        self.openButton.setIcon(icon)
        self.openButton.setObjectName(_fromUtf8("openButton"))
        self.gridLayout.addWidget(self.openButton, 1, 2, 1, 1)
        self.designButton = QtGui.QPushButton(self.layoutWidget)
        self.designButton.setToolTip(_fromUtf8(""))
        self.designButton.setWhatsThis(_fromUtf8(""))
        icon = QtGui.QIcon.fromTheme(_fromUtf8("applications-engineering"))
        self.designButton.setIcon(icon)
        self.designButton.setObjectName(_fromUtf8("designButton"))
        self.gridLayout.addWidget(self.designButton, 1, 3, 1, 1)
        self.layoutWidget1 = QtGui.QWidget(Dialog)
        self.layoutWidget1.setGeometry(QtCore.QRect(0, 0, 2, 2))
        self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1"))
        self.verticalLayout = QtGui.QVBoxLayout(self.layoutWidget1)
        self.verticalLayout.setMargin(0)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.splitter = QtGui.QSplitter(Dialog)
        self.splitter.setGeometry(QtCore.QRect(0, 0, 0, 0))
        self.splitter.setOrientation(QtCore.Qt.Horizontal)
        self.splitter.setObjectName(_fromUtf8("splitter"))

        self.retranslateUi(Dialog)
        QtCore.QObject.connect(self.designButton,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               self.runDesigner)
        QtCore.QObject.connect(self.convertButton,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               self.convert)
        QtCore.QObject.connect(self.openButton,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               self.openDialog)
        QtCore.QObject.connect(self.newButton,
                               QtCore.SIGNAL(_fromUtf8("clicked()")),
                               self.newDialog)