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)))
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 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)