def shuffleSlice(self,*args): getSel = pm.ls(sl=1,fl=1) cols = pm.intSliderGrp("colsSlider",q=1,v=1) if len(getSel)>=1 and len(getSel)>=cols: array = getSel self.result = randomSplitList().randListFunc(array,cols) if pm.radioButtonGrp("radioBtnGrp",q=1,sl=1) == 1: pm.text("warningText",e=1,l="---===List All Parts===---") pm.textScrollList("listScroll",e=1,ra=1) for i in range(0,len(self.result)): pm.textScrollList("listScroll",e=1,append="{0}{1}".format("ShuffledPart_",(i+1))) elif pm.radioButtonGrp("radioBtnGrp",q=1,sl=1) == 2: pm.textScrollList("listScroll",e=1,ra=1) allGrps=[] for i in range(0,len(self.result)): grp = pm.group(n=("{0}{1}".format("ShuffledPart_",(i+1))),em=1) pm.parent(self.result[i],grp) allGrps.append(grp) pm.select(allGrps,r=1) elif len(getSel)==0: pm.textScrollList("listScroll",e=1,ra=1) pm.text("warningText",e=1,l="---===Select Something!!!===---") elif len(getSel)>0 and len(getSel)<cols: pm.textScrollList("listScroll",e=1,ra=1) pm.text("warningText",e=1,l="---===Too Much Parts!!!===---")
def options_box_setup(self): self.optvars.add('zSplitBlendShapesBlendDistance', 'float', 2) self.optvars.add('zSplitBlendShapesPlane', 'int', 2) self.optvars.add('zSplitBlendShapesPlaneOrigin', 'float', 0) self.optvars.add('zSplitBlendShapesNamingPattern', 'string', '<name>_<L|R>') parent = pm.columnLayout(adjustableColumn=1) pm.optionMenuGrp('sbsList', label='Blend shape:', cc=self.fill_blend_target) self.fill_blend_shapes('sbsList|OptionMenu', False) pm.optionMenuGrp('sbsLeftOutput', label='Left output:') self.fill_blend_shapes('sbsLeftOutput|OptionMenu', True) pm.optionMenuGrp('sbsRightOutput', label='Right output:') self.fill_blend_shapes('sbsRightOutput|OptionMenu', True) # If something is selected, try to find a blend shape to select by default. selection = pm.ls(sl=True) if selection: history = pm.listHistory(selection) blend_shapes = pm.ls(history, type='blendShape') if blend_shapes: default_blend_shape = blend_shapes[0] self.select_blend_shape(default_blend_shape) pm.optionMenuGrp('sbsTargetList', label='Blend target:') self.fill_blend_target() pm.floatSliderGrp('sbsBlendDistance', label='Blend distance', field=True, min=0, max=10, fieldMinValue=0, fieldMaxValue=1000) pm.radioButtonGrp('sbsPlane', label='Plane:', numberOfRadioButtons=3, labelArray3=('XY', 'YZ', 'XZ')) pm.floatSliderGrp('sbsPlaneOrigin', label='Plane origin', v=0, min=0, max=1000) pm.textFieldGrp('sbsNamingPattern', label='Naming pattern')
def createRadioBtnObj( self ): """ creates a RadioButton Element """ if mel.scrollLayout(self._scrollField, ex=True): mel.setParent( self._ActionCol) mel.separator(h=10,style="none") ObjUIpath = mel.frameLayout(mw=10,l="Radio Buttons") mel.columnLayout('sampleCol') mel.separator(h=10,style="none") mel.radioButtonGrp('rbg',nrb=3, l="Big Options", select=self.gSampleState['rbg'], la3=("Option 1", "Option 2", "Option 3")) mel.radioButtonGrp('rbg2',nrb=3, l="Little Options", select=self.gSampleState['rbg'], la3=("Option 4", "Option 5", "Option 6")) mel.separator(h=10,style="none") return ObjUIpath
def setFingerSetup(self, fingerSetup): fingers = ['Thumb', 'Index', 'Middle', 'Ring', 'Pinky'] for finger in fingers: if finger in fingerSetup[0]: pm.checkBox(self.handFingersInterface[finger]['checkBox'], e=True, v=1) pm.radioButtonGrp( self.handFingersInterface[finger]['radioBtn'], e=True, sl=fingerSetup[0][finger]) else: pm.checkBox(self.handFingersInterface[finger]['checkBox'], e=True, v=0) if finger in fingerSetup[1]: pm.checkBox(self.footFingersInterface[finger]['checkBox'], e=True, v=1) pm.radioButtonGrp( self.footFingersInterface[finger]['radioBtn'], e=True, sl=fingerSetup[1][finger]) else: pm.checkBox(self.footFingersInterface[finger]['checkBox'], e=True, v=0)
def armTypeVis(): armType=pm.radioButtonGrp("armType_Btn",q=True, sl=True) if armType == 1: ik_val = 1 fk_val = 0 ikfk_val = 0 if armType == 2: ik_val = 0 fk_val = 1 ikfk_val = 0 if armType == 3: ik_val = 1 fk_val = 1 ikfk_val = 1 pm.text('ikStyleText', e=True, vis=ik_val) pm.optionMenu('ikIcon_Menu',e=True, vis=ik_val) pm.text('fkStyle_Text', e=True, vis=fk_val) pm.optionMenu('fkIcon_Menu',e=True, vis=fk_val) pm.optionMenu('handIcon_menu',e=True, vis=ikfk_val) pm.text('handStyle_Text',e=True,vis=ikfk_val) pm.text('pvStyle_Text',e=True, vis=ikfk_val) pm.optionMenu('pvIcon_menu',e=True,vis=ikfk_val) pm.text('PV_text',e=True,vis=ik_val) pm.radioButtonGrp('addPVElbow_btn',e=True,vis=ik_val)
def ui(): columnWidth1st = 120 if pm.window('AlembicMasterUI', q=True, exists=True) : pm.deleteUI('AlembicMasterUI') with pm.window('AlembicMasterUI',menuBar=True, s=True): with pm.columnLayout(adj=True): with pm.frameLayout( label='Export Alembic', mw=3, mh=3,cll=True, bs='etchedIn'): with pm.columnLayout(adj=True): with pm.rowLayout(nc=3, adj=2): pm.text(label='file :', w=columnWidth1st, align='right') pm.textField('path_TFG', text="D:/") pm.symbolButton( image='navButtonBrowse.png', c=pm.Callback( browseIt, 'path_TFG', 0, 'Alembic (*.abc)' ) ) with pm.rowLayout(nc=2, adj=2 ): startFrame=pm.animation.playbackOptions(q=1, minTime=1) EndFrame=pm.animation.playbackOptions(q=1, maxTime=1) with pm.rowLayout(nc=2, adj=2): pm.text(l='',w=columnWidth1st) pm.button(l='Export',bgc=(0.19,0.29,0.19),c=pm.Callback(exportScene)) pm.radioButtonGrp( 'timeRange_RBG', label='Time range :', labelArray3=['Camera Setting','Time Slider', 'Start/End'], numberOfRadioButtons=3, select=1, cw = [1,columnWidth1st], on1=pm.Callback( callback_timerangeSelect, 1), on2=pm.Callback( callback_timerangeSelect, 2), on3=pm.Callback( callback_timerangeSelect, 3), ) pm.floatFieldGrp( 'timeRange_FFG', label='Start / End : ', value1=1, value2=24, numberOfFields=2, cw = [1,117], en=False) with pm.frameLayout( label='Rebuild Scene', mw=3, mh=3,cll=True, bs='etchedIn'): with pm.columnLayout(adj=True): with pm.rowLayout(nc=2, adj=2): pm.text(l='',w=columnWidth1st) pm.button(l='New Scene', bgc=(0.24,0.49,0.24), c=pm.Callback(buildscene)) with pm.frameLayout( label='Import Alembic', mw=3, mh=3,cll=True, bs='etchedIn'): with pm.columnLayout(adj=True): with pm.rowLayout(nc=3, adj=2): pm.text(label='file :', w=columnWidth1st, align='right') pm.textField('path_ABC2', text="D:/") pm.symbolButton( image='navButtonBrowse.png', c=pm.Callback( browseIt, 'path_ABC2', 1, 'Alembic (*.abc)' ) ) with pm.rowLayout(nc=2, adj=2): pm.text(l='',w=columnWidth1st) pm.button(l='Import', bgc=(0.19,0.19,0.28), c=pm.Callback(importAbcFile)) with pm.frameLayout( label='Save Scene', mw=3, mh=3,cll=True, bs='etchedIn'): with pm.columnLayout(adj=True): with pm.rowLayout(nc=3, adj=2): pm.text(label='file :', w=columnWidth1st, align='right') pm.textField('path_TFG2', text="D:/") pm.symbolButton( image='navButtonBrowse.png', c=pm.Callback( browseIt, 'path_TFG2', 0 ) ) with pm.rowLayout(nc=2, adj=2): pm.text(l='',w=columnWidth1st) pm.button(l='Save Scene', w=64, bgc=(0.22,0.23,0.43), c=pm.Callback(saveScene))
def rh_dynamicJoint(): #Create a variable for the window name winName = 'DynamicJoint' winTitle = 'rh_DynamicJoint_prototype_v0.23' #Delete the window if it exists if pm.window(winName, exists = True): pm.deleteUI(winName, window = True) #Build the main window pm.window(winName, title = winTitle, sizeable = True) #name field pm.textFieldGrp('NameTFG',label = 'Set up name:', text = 'Ribbon45hp', ed = True) pm.columnLayout(adjustableColumn = True) #side pm.radioButtonGrp('ColSel',nrb = 3,label = 'Side:',la3 = ['l','m','r'],sl = 1) pm.columnLayout(adjustableColumn = True) #axis pm.radioButtonGrp('AxisSel',nrb = 3,label = 'Axis:',la3 = ['x','y','z'],sl = 1) pm.columnLayout(adjustableColumn = True) #ccSize pm.floatSliderGrp('Cc_Size',label = 'Control Size:',f = True,min = 1,max = 10,fmn = 1,fmx = 100,v = 1) pm.columnLayout(adjustableColumn = True) #joint number pm.intSliderGrp('Joint_Num',label = 'Number Of Joints:',f = True,min = 4,max = 49,fmn = 1,fmx = 100,v = 4) pm.columnLayout(adjustableColumn = True) #inbound pm.button(label = 'Ready For Tasking', command = 'inbound()') pm.columnLayout(adjustableColumn = True) #bringTheRain pm.button(label = 'Target Acquire', command = 'bringTheRain()') pm.columnLayout(adjustableColumn = True) #Show the window pm.showWindow(winName) pm.window(winName, edit = True, width = 378, height = 210)
def exportButton(self, mayaFalse): if pm.radioButtonGrp(self.exportOptionGrp, q=True, select=True) == 1: #print 'rig' self.exporter_rig() elif pm.radioButtonGrp(self.exportOptionGrp, q=True, select=True) == 2: #print 'anim' self.exporter_anim() elif pm.radioButtonGrp(self.exportOptionGrp, q=True, select=True) == 0: pm.confirmDialog(title = u'Prism 出力ツール', message = u'種類を選んで下さい \n Please select rig or motion')
def __init__(self, inst): self.armModuleFrame = pm.frameLayout( parent = inst.simpleSetup_layout, w =244, label='simpleArm', borderStyle='out', cll = True, cl = True ) self.armSide_RBGRP = pm.radioButtonGrp( label='Choose Arm Side', labelArray3=['Left', 'Center', 'Right'], numberOfRadioButtons=3 ) self.armSpace_RBGRP = pm.radioButtonGrp( label='Choose Arm Space', labelArray3=['Top', 'Middle', 'Bottom'], numberOfRadioButtons=3 ) self.armAttribute_ChkBoxGRP = pm.checkBoxGrp( parent = self.armModuleFrame, label = 'Arm Attributes ', cw = ( [ 1, 90 ], [ 2, 70 ], [ 3, 100 ], [ 4, 60 ] ),numberOfCheckBoxes=3, labelArray3=['Stretchy', 'Elbow Pinning', 'Bendy Arms'], v1 = 1, v2 = 1, v3 = 1 ) self.armModulebutton_layout = pm.rowColumnLayout(parent = self.armModuleFrame, nc = 3 ) self.buildArm_Btn = pm.button(parent = self.armModulebutton_layout, w = 120, h = 24, label="Build Arm", command = self.build_armMod) self.mirrorArm_Btn = pm.button( parent = self.armModulebutton_layout, w = 120, h = 24, label = 'Mirror Arm', c = self.exe_MirrorArm ) self.collapseArmModule_Btn = pm.button( parent = self.armModulebutton_layout, w = 120, h = 24, label = 'Collapse Arm Module', c = self.exe_collapseArmModule )
def getFingerSetup(self): handFingerSetup = [] footFingerSetup = [] fingers = ['Thumb', 'Index', 'Middle', 'Ring', 'Pinky'] for finger in fingers: if pm.checkBox(self.handFingersInterface[finger]['checkBox'], q=True, v=True): folds = pm.radioButtonGrp(self.handFingersInterface[finger]['radioBtn'], q=True, sl=True) handFingerSetup.append((finger, folds)) if pm.checkBox(self.footFingersInterface[finger]['checkBox'], q=True, v=True): folds = pm.radioButtonGrp(self.footFingersInterface[finger]['radioBtn'], q=True, sl=True) footFingerSetup.append((finger, folds)) return handFingerSetup, footFingerSetup
def create(self): # this creates the actual GUI components #** returns the last component (the separator) so that the next group can be attached to it if self.control == '': # radioButtonGrp self.row01 = pm.radioButtonGrp( numberOfRadioButtons = 3, label = '%s' % self.name, labelArray3=['A+ -A', 'B+ -B', 'C+ -C'], onCommand = pm.Callback(self.radioCommand)) self.row02 = pm.radioButtonGrp( numberOfRadioButtons = 2, shareCollection = self.row01, label='', labelArray2=['D', 'F'], onCommand = pm.Callback(self.radioCommand)) pm.formLayout( self.layout , edit=1, attachForm=[[self.row01, "top", 5], [self.row01, "left", 5]]) pm.formLayout( self.layout , edit=1, attachForm=[self.row02, "left", 5, ], attachControl=[self.row02, "top", 5, self.row01]) # intField for Grade self.intField = pm.intFieldGrp( numberOfFields = 1, label = 'Grade', changeCommand = pm.Callback(self.totalCommand), backgroundColor = [1,0,0]) self.comments = pm.text( label = 'comments') # comment scrollField #scrollField = self.scrollField.create() self.separator = pm.separator( height=15, width=460, style='in' ) # arranging components pm.formLayout( self.layout , edit=1, attachForm=[self.intField, "top", 5], attachControl=[self.intField, "top", 10, self.row02]) pm.formLayout( self.layout , edit=1, attachForm=[self.scrollField, "left", 140], attachControl=[self.scrollField, "top", 10, self.intField]) pm.formLayout( self.layout , edit=1, attachForm=[self.comments, "left", 60], attachControl=[self.comments, "top", 10, self.intField]) pm.formLayout( self.layout , edit=1, attachForm=[self.separator, "left", 60], attachControl=[self.separator, "top", 10, self.scrollField]) return self.separator else: # radioButtonGrp self.row01 = pm.radioButtonGrp( numberOfRadioButtons = 3, label = '%s' % self.name, labelArray3=['A+ -A', 'B+ -B', 'C+ -C'], onCommand = pm.Callback(self.radioCommand)) self.row02 = pm.radioButtonGrp( numberOfRadioButtons = 2, shareCollection = self.row01, label='', labelArray2=['D', 'F'], onCommand = pm.Callback(self.radioCommand)) pm.formLayout( self.layout , edit=1, attachForm=[[self.row01, "top", 5], [self.row01, "left", 5]] , attachControl=[self.row01, "top", 5, self.control]) pm.formLayout( self.layout , edit=1, attachForm=[self.row02, "left", 5, ], attachControl=[self.row02, "top", 5, self.row01]) # intField for Grade self.intField = pm.intFieldGrp( numberOfFields = 1, label = 'Grade', cc = pm.Callback(self.totalCommand) , backgroundColor = [1,0,0]) self.comments = pm.text( label = 'comments') # comment scrollField #scrollField = self.scrollField.create() self.separator = pm.separator( height=15, width=460, style='in' ) # arranging components pm.formLayout( self.layout , edit=1, attachForm=[self.intField, "top", 5], attachControl=[self.intField, "top", 10, self.row02]) pm.formLayout( self.layout , edit=1, attachForm=[self.scrollField, "left", 140], attachControl=[self.scrollField, "top", 10, self.intField]) pm.formLayout( self.layout , edit=1, attachForm=[self.comments, "left", 60], attachControl=[self.comments, "top", 10, self.intField]) pm.formLayout( self.layout , edit=1, attachForm=[self.separator, "left", 60], attachControl=[self.separator, "top", 10, self.scrollField]) return self.separator
def option_box_load(self): pm.floatSliderGrp('sbsBlendDistance', edit=True, v=self.optvars['zSplitBlendShapesBlendDistance']) pm.radioButtonGrp('sbsPlane', edit=True, select=self.optvars['zSplitBlendShapesPlane']) pm.floatSliderGrp('sbsPlaneOrigin', edit=True, v=self.optvars['zSplitBlendShapesPlaneOrigin']) pm.textFieldGrp('sbsNamingPattern', edit=True, text=self.optvars['zSplitBlendShapesNamingPattern'])
def loadBtn(self, *a): home_team = pm.textFieldGrp('home_team_txt', q=True, text=True) diag = pm.checkBox('diagnose_tgl', q=True, value=True) if home_team == '': pm.warning( 'Build Scene ERROR Please enter a team name / tricode before proceeding.' ) if (pm.radioButtonGrp('matchup_toggle', q=True, sl=True)) == 1: build.loadTeamsStadium(home_team, diagnostic=diag) elif (pm.radioButtonGrp('matchup_toggle', q=True, sl=True)) == 2: away_team = pm.textFieldGrp('away_team_txt', q=True, text=True) build.loadTeamsStadium(home_team, away_team, diagnostic=diag)
def displayOptions( self ): """Build the interface""" self.interface['TimeRange'] = cmds.radioButtonGrp( numberOfRadioButtons=2, label='Time Range', labelArray2=['Time Slider', 'Start/End'], onCommand=self.disableTimeRange ) self.interface['StartTime'] = cmds.intFieldGrp( label='Start Time' ) self.interface['EndTime'] = cmds.intFieldGrp( label='End Time' ) self.interface['Focals'] = cmds.textFieldGrp( label='Focals' ) self.interface['Cameras'] = cmds.textScrollList( allowMultiSelection=True, width=200, height=100 ) # self.interface['CamerasLabel'] = cmds.text( label='Cameras' ) self.formAttachPosition() cmds.formLayout( self.optionsForm, e=True, attachForm=( [ self.interface['TimeRange'], 'top', 10 ], [ self.interface['Cameras'], 'bottom', 100 ], [ self.interface['Cameras'], 'left', 150 ], ), attachControl=( [ self.interface['StartTime'], 'top', 0, self.interface['TimeRange'] ], [ self.interface['EndTime'], 'top', 0, self.interface['StartTime'] ], [ self.interface['Focals'], 'top', 0, self.interface['EndTime'] ], [ self.interface['Cameras'], 'top', 10, self.interface['Focals'] ], # [ self.interface['CamerasLabel'], 'top', 10, self.interface['Focals'] ], # [ self.interface['CamerasLabel'], 'right', -90, self.interface['Cameras'] ], ), attachNone=( [ self.interface['Cameras'], 'left' ], [ self.interface['Cameras'], 'right' ], ) ) self.editMenuResetCmd() # Set the default values in the interface
def set_json_location(self): json_location = pm.fileDialog2(dialogStyle=2, fileFilter="JSON File (*.json);;", fileMode=0, okc=u"选择文件", cc=u"取消") if os.path.isfile(json_location[0]): pm.textFieldButtonGrp("ARFileLocationField", e=True, text=json_location[0]) self.ar_file_location = json_location[0] else: dict_data = {} mode = pm.radioButtonGrp(self.work_mode_control, q=True, sl=True) if mode == 1: dict_data = channel.face_unity_channels elif mode == 2: dict_data = channel.arkit_channels write_json(dict_data=dict_data, file_path=json_location[0]) pm.textFieldButtonGrp("ARFileLocationField", e=True, text=json_location[0]) self.ar_file_location = json_location[0] self.init_ar_channel_options(json_file=json_location[0]) pm.optionVar(sv=('ARFaceEditor_jsonFileLocation', self.ar_file_location)) if pm.textScrollList(self.ar_item_scroll, q=True, ni=True) > 1: pm.textScrollList(self.ar_item_scroll, e=True, sii=1) self.selected_ar_item_in_scroll() return
def __init__(self): global offsetCurveOptions with pdil.ui.singleWindow(self.id): with columnLayout(): self.mode = radioButtonGrp( nrb=3, la3=['Playback Range', 'User Defined', 'All'], on1=Callback(self.setPlaybackMode), on2=Callback(self.setUserMode), on3=Callback(self.setAllMode), ) with rowColumnLayout(nc=2) as self.range: self.start = intField() self.end = intField() with rowColumnLayout(nc=2): #checkBox(l='Autokey', en=False) button(label='Apply', c=Callback(self.apply)) if offsetCurveOptions.uiMode == 1: self.setPlaybackMode() elif offsetCurveOptions.uiMode == 2: self.setUserMode() elif offsetCurveOptions.uiMode == 3: self.setAllMode()
def selected_ar_channel(self): u"""选择AR通道 :return: """ current_channel = pm.optionMenuGrp(self.ar_channel_options, q=True, value=True) pm.textScrollList(self.ar_item_scroll, e=True, ra=True) if len(self.ar_data.get_channel_joints(current_channel)) > 0: pm.textScrollList( self.ar_item_scroll, e=True, a=self.ar_data.get_channel_joints(current_channel)) pm.textScrollList(self.ar_item_scroll, e=True, sii=1) self.selected_ar_item_in_scroll() # print(u"已选择通道:{}".format(current_channel)) work_mode = [ "FaceUnityPoseLib", "ArkitPoseLib" ][pm.radioButtonGrp(self.work_mode_control, q=True, sl=True) - 1] if pm.objExists(work_mode): pm.connectControl('arIDControlSlider', '{}.{}'.format(work_mode, current_channel)) return
def setColor(color, *args): # Get current AOV name aov = pc.radioButtonGrp(uiWidgets['aovs'], q=1, select=1) if aov == 1: aovName = 'mtoa_constant_rgbMask' elif aov == 2: aovName = 'mtoa_constant_rgbMask1' elif aov == 3: aovName = 'mtoa_constant_rgbMask2' elif aov == 4: aovName = 'mtoa_constant_rgbMask3' if aovName is None: raise Exception('Error while determining which AOV to focus on.') print "AOV Name: %s" % aovName listSel = pc.ls(sl=1) if len(listSel) == 0: pc.confirmDialog(t="Error", message="Nothing selected.", icon='critical') else: for sel in listSel: recursiveAssign(aovName, sel, color)
def inbound(): global jointGuides,setUpName,jointGuidesGrp,side setUpName = pm.textFieldGrp('NameTFG', tx = True,q = True) colorSel = pm.radioButtonGrp('ColSel',q = True,sl = True) if colorSel == 1: side = 'l' elif colorSel == 2: side = 'm' elif colorSel == 3: side = 'r' numOfJoints = pm.intSliderGrp('Joint_Num',q = True,v = True) jointGuidesGrp = pm.group(em = 1,n = getUniqueName(side,setUpName + 'Gud', 'grp')) for num in range(numOfJoints): loc = pm.spaceLocator(n = getUniqueName(side,setUpName,'loc')) pm.move(0,num * 2,0,loc) jointGuides.append(loc) loc.setParent(jointGuidesGrp) jointGuides.reverse() for num,loc in enumerate(jointGuides): if num < (len(jointGuides) - 1): jointGuides[num].setParent(jointGuides[num + 1]) jointGuides.reverse()
def populateList(): # Get shader type shaderSel = pc.radioButtonGrp(uiWidgets['shaderType'], q=1, select=1) if shaderSel == 1: shaderType = 'lambert' elif shaderSel == 2: shaderType = 'blinn' elif shaderSel == 3: shaderType = 'phong' # Get shader prefix shaderPrefix = pc.textField(uiWidgets['shadersPrefix'], q=1, text=1) if len(shaderPrefix) == 0: listShaders = pc.ls(exactType=shaderType) else: listShaders = pc.ls(shaderPrefix+'*', exactType=shaderType) if len(listShaders) == 0: pc.confirmDialog(t="Error", message="No shaders fitting the given paramaters has been found.", icon='critical') exit(1) elif len(listShaders) > 0: pc.confirmDialog(t="Shaders found", message=str(len(listShaders))+" shader(s) found. Click confirm to continue.") else: exit("Unknown error.") # for info in infos.keys(): # print "#######################" # print "### Shader: '%s'" % info # print " - Found %s shape(s)" % len(infos[info]) # print "Shapes list: %s " % infos[info] return listShaders
def MakeRadioButtonGroup(label, buttonTitlesTuple, onChangeCommand, vertical, leftColumnWidth=__LEFT_COLUMN_WIDTH__, annotation=None): """ Creates a radio button group. :param label: text label for the group as a whole. :param buttonTitlesTuple: tuple (or list) of titles for each button. :param onChangeCommand: bound method to be called when a button is selected. :param vertical: True = group will be laid out vertically, False = horizontally. :param leftColumnWidth: float, width of label column. :param annotation: toolTip annotation, or None. """ numberOfButtons = len(buttonTitlesTuple) if(numberOfButtons < 1 or numberOfButtons > 4): raise ValueError("Attempt to create radioButtonGrp with %d buttons (expected 1-4)." % numberOfButtons) buttonKwargs = { "label" : label, ("labelArray%d" % numberOfButtons) : buttonTitlesTuple, "numberOfRadioButtons" : numberOfButtons, "columnAttach" : (2, "left", 0), "vertical" : vertical, "select" : 1 } if(onChangeCommand is not None): buttonKwargs["changeCommand"] = onChangeCommand if(annotation is not None): buttonKwargs["annotation"] = annotation buttonGroup = pm.radioButtonGrp(**buttonKwargs) buttonGroup.columnWidth((1, leftColumnWidth)) for index in xrange(numberOfButtons - 1): buttonGroup.columnWidth((index + 2, 80)) return buttonGroup
def renaming(): preName = pm.textFieldGrp('pre',q = 1,tx = 1) sideB = pm.radioButtonGrp('side',q = 1,sl = 1) sideList = ['l','r','m'] objName = pm.textFieldGrp('obj',q = 1,tx = 1) startNum = pm.textFieldGrp('starNum',q = 1,tx = 1) paddingNum = pm.textFieldGrp('paddingNum',q = 1,tx = 1) suffixName = pm.textFieldGrp('suffix',q = 1,tx = 1) jointEnd = pm.checkBox('je',q = 1,v = 1) sels = pm.ls(sl = 1) for num,sel in enumerate(sels): if len(str(startNum)) < paddingNum: number = str(0) + str(startNum) preNames = '' if preName != '': preNames = preName + '_' name = preNames + objName + '_' + sideList[sideB] + '_' + number + '_' + suffixName pm.rename(sel,name) if jointEnd == 1: name = preNames + objName + '_' + sideList[sideB] + '_' + number + '_' + 'je' pm.rename(sels[-1],name) print name startNum = int(startNum) + 1
def UI_exporter(self, *mayaFalse): #setting basic UI height and width winWidth = 500 winHeight = 300 # checking for duplicate windows windowID = 'AdvSkeExporter' if pm.window(windowID, exists=True): pm.deleteUI(windowID) #re-adjusting UI if UI is not correct if pm.windowPref('AdvSkeExporter', q=True, height = True) != winHeight or pm.windowPref('AdvSkeExporter', q=True, width = True) != winWidth: pm.windowPref('AdvSkeExporter', remove=True) # creating window pm.window(windowID, title=u'Prism Exporter | Ver 2018 / 06 / 06', widthHeight=(winWidth, winHeight)) rigExportFrame = pm.frameLayout(u'出力', width=500, nch = 10, labelIndent = 20) nameFormLayout = pm.formLayout('nameForm', parent = rigExportFrame, nch = 30, width = 500, height = 500, numberOfDivisions = 100) self.exportPathText = pm.text(label = u'出力先:' , parent = nameFormLayout, align = 'right', width = 50) self.exportPathField = pm.textField('exportPath', placeholderText = u'export path', width = 370) dirButton = pm.button(label='', width=20, height=20, command= self.dirChange) pm.formLayout(nameFormLayout, edit=True, attachForm = [(self.exportPathText, 'top', 40.5), (self.exportPathText, 'left', 40),#all text have an offset of 3 from top (self.exportPathField, 'top', 37.5), (self.exportPathField, 'left', 100), (dirButton, 'top', 37.5), (dirButton, 'left', 475)]) self.fbxNameText = pm.text(label = u'ファイル名:', parent = nameFormLayout, align = 'right', width = 50) self.fbxNameField = pm.textField('fbxName', placeholderText = u'file name', width = 370) pm.formLayout(nameFormLayout, edit=True, attachForm = [(self.fbxNameText, 'top', 68), (self.fbxNameText, 'left', 40), (self.fbxNameField, 'top', 65), (self.fbxNameField, 'left', 100)]) self.exportOptionGrp = pm.radioButtonGrp('expRadioGrp', numberOfRadioButtons = 2, parent = nameFormLayout, label1 = u'リグ', label2 = u'モーション', width = 300, label = u'出力設定:', columnAlign = [1, 'right'], columnWidth = [(1, 90), (2, 100), (3, 100)], columnAttach = [(2, 'left', 15)]) pm.formLayout(nameFormLayout, edit=True, attachForm = [(self.exportOptionGrp, 'top', 100), (self.exportOptionGrp, 'left', 0)]) self.expButton = pm.button(label = u'出力', parent = nameFormLayout, command = self.exportButton, width = 250) pm.formLayout(nameFormLayout, edit=True, attachForm=[(self.expButton, 'top', 200), (self.expButton, 'left', 100)]) self.projectList() self.projListUI = pm.optionMenu(numberOfItems = len(self.prj_data), changeCommand = self.projectChange) for i in self.prj_data: pm.menuItem(i.split()[0], label = i.split()[0], parent = self.projListUI, annotation = i.split()[1].replace('\\', '/')) #pm.optionMenu(self.projListUI, edit = True, visibleChangeCommand = partial(self.projectChange, i.split()[1])) prjText = pm.text(label = u'案件:', align = 'right', parent = nameFormLayout, width = 50) pm.formLayout(nameFormLayout, edit=True, attachForm=[(self.projListUI, 'top', 10), (self.projListUI, 'left', 99), (prjText, 'top', 13), (prjText, 'left', 40)]) pm.showWindow()
def get_selected_surface_association_idx(self): for i in xrange(1, 5): if pm.radioButtonGrp('mpwSurfaceAssociation%i' % i, q=True, select=True): return i return 1
def get_types_cmd(self, *args): """Collects the selected type part when the radio button switched or selected :param args: :return: None """ self.type_selection = ( pm.radioButtonGrp(self.type_radio_btn, q=True, sl=True) - 1) self.infix = self.infix_list[self.type_selection]
def bike_start_gui(): nodes = mc.ls() if 'Character' in nodes: window = 'bike_ui' window_title = 'NIH/NASA Bike Rigger' width_height = (300, 100) if py.window(window, exists=True): py.deleteUI(window, window=True) window_obj = py.window(window, title=window_title, widthHeight=width_height, sizeable=False) py.columnLayout('main_col', p=window) py.button('import', label='1) Import the bike', width=width_height[0], command=py.Callback(import_bike)) py.text('2) Place the character on the bike.') py.radioButtonGrp('gender_radio', label='Gender', labelArray2=['Male', 'Female'], numberOfRadioButtons=2) py.button('rig', label='3) Connect the Character and Save', width=width_height[0], command=py.Callback(rig_bike)) window_obj.show() else: mc.warning('Character node not found! Cannot start bike rig without a Character node!')
def toggleMatchup(self, *a): get_bool = pm.radioButtonGrp('matchup_toggle', q=True, sl=True) if get_bool == 1: pm.textFieldGrp('away_team_txt', e=True, enable=False) elif get_bool == 2: pm.textFieldGrp('away_team_txt', e=True, enable=True) else: pm.warning( 'SORT CONTROL ERROR: Please select single-team or matchup.') return
def get_parts_cmd(self, *args): """Collects the selected part when the radio button switched or selected :param args: :return: None """ # fk ik ikd self.part_selection = ( pm.radioButtonGrp(self.part_radio_btn, q=True, sl=True) - 1) self.name = self.name_list[self.part_selection] self.name_end = self.name_end_list[self.part_selection]
def reNamerUI(): winName = 'reName_Tool' if(pm.window(winName,q=1,ex=1)): pm.deleteUI(winName) pm.window(winName,ret=1,mb=1) pm.columnLayout('reNameLayout',adj = 1) pm.textFieldGrp('pre',l = 'Prefix Name : ',tx = '',adj = 1,cl2 = ('left','left')) pm.radioButtonGrp('side',nrb = 3,la3 = ['left','center','right'],adj = 1,ad3 = 1) pm.textFieldGrp('obj',l = 'Object Name : ',tx = '',adj = 1,cl2 = ('left','left')) pm.textFieldGrp('starNum',l = 'Start Number : ',tx = 1,adj = 1,cl2 = ('left','left')) pm.textFieldGrp('paddingNum',l = 'Padding Number : ',tx = 0,adj = 1,cl2 = ('left','left')) pm.textFieldGrp('suffix',l = 'Suffix Name : ',tx = 'jj',adj = 1,cl2 = ('left','left')) pm.checkBox('je',l = 'make Last joint je',v = 1) pm.button('Select hierachy',c = 'selHierachy()') pm.button('Achtung!',c = 'renaming()') pm.showWindow(winName)
def rig_bike(): """ Sets up constraints necessary for the character to be connected to the bikes. Also creates a male node for the male bike. Saves the scene to the file directory provided """ if py.radioButtonGrp('gender_radio', q=True, sl=True) == 1: df.parent_constraint([('rt_hand_grp', 'RightHand_IK_CTRL'), ('lf_hand_grp', 'LeftHand_IK_CTRL'), ('rt_foot_locator', 'RightFoot_IK_CTRL'), ('lf_foot_locator', 'LeftFoot_IK_CTRL')]) df.save_file(save_as=True, ext='_bike', path=mi.GelUtil.file_path) mc.select(cl=True) mc.group(em=True, n='male') mc.parent('Character', 'male') elif py.radioButtonGrp('gender_radio', q=True, sl=True) == 2: df.parent_constraint([('rt_hand_ctrl_null', 'RightHand_IK_CTRL'), ('lf_hand_ctrl_null', 'LeftHand_IK_CTRL'), ('rt_foot_ctrl_null', 'RightFoot_IK_CTRL'), ('lf_foot_ctrl_null', 'LeftFoot_IK_CTRL')]) df.save_file(save_as=True, ext='_bike', path=mi.GelUtil.file_path) else: mc.warning('Must select a gender!')
def _UI(self): if pm.window("mainWin",exists=1): pm.deleteUI("mainWin",window=1) w=280 window=pm.window("mainWin",t="Shuffle Slice Tool",s=0,mb=1,mnb=0,mxb=0,rtf=1,w=w) pm.columnLayout("mainColumn",p="mainWin",columnAttach=('both', 2), rowSpacing=10, columnWidth=w) pm.text("warningText",p="mainColumn",l="---===Select something to slice===---",al="center") pm.intSliderGrp("colsSlider",p="mainColumn",cw3=(30,45,50),field=True,label='Parts',minValue=1,fieldMinValue=1,value=1,fs=1,ss=1) pm.radioButtonGrp("radioBtnGrp",l=" ",labelArray2=['List', 'Group'],cw3=[60,90,80],numberOfRadioButtons=2,sl=1) pm.textScrollList("listScroll",p="mainColumn",numberOfRows=5, allowMultiSelection=False,sc=self.selPart) pm.popupMenu("listPopUp",p="listScroll") pm.menuItem(p="listPopUp",l="Create Group for the parts",c=self.groupPartsFunc) pm.button(p="mainColumn",l="Shuffle Slice",c=self.shuffleSlice) pm.showWindow("mainWin")
def __init__(self, opts): self.opts = opts with pm.frameLayout('Physics', collapsable=True, cl=False, bs='out'): with pm.columnLayout(width=250): pm.text(l='Collision Type:') self.phyType = pm.radioButtonGrp(labelArray3=['Convex Hull', 'Box', 'Sphere'], sl=self.opts['phyType'], nrb=3, cc=self.save, cw3=[94, 64, 64], width=250) self.maxVerts = pm.intSliderGrp(field=True, l='Max Vertices:', v=self.opts['maxVerts'], cl3=['left', 'left', 'left'], cw3=[64, 48, 128], cc=self.save) pm.button(l='Add Hull', w=250, c=self._addHull) self.save()
def __init__(self): title="joints_on_curve" if(pm.windowPref(title, q=True, ex=True)): pm.windowPref(title, remove=True) if(pm.window(title, q=True, ex=True)): pm.deleteUI(title) #splineIK UI self.win = pm.window(title, title="Joints on Curve") self.layout = pm.rowColumnLayout() self.jntPlaceBtn = pm.radioButtonGrp(parent=self.layout, numberOfRadioButtons=2, label="Joint Placement", labelArray2=("CV's", "Even"), cc=self.jntPlaceBtn_change) self.jntSnapBtn = pm.radioButtonGrp(parent=self.layout, enable=False, numberOfRadioButtons=2, sl = 1, label="Snap To", labelArray2=("CV", "Closest Point On Curve")) self.jntLayoutBtn = pm.radioButtonGrp(parent=self.layout, enable=False, numberOfRadioButtons=2, sl = 1, label="Joint Layout", labelArray2=("Solo", "Hierarchy"), on1 = self.jntLayoutBtn_on) self.jntNumSlider = pm.intSliderGrp(enable=False, field=True, label='number of joints', minValue=4, maxValue=100, fieldMinValue=4, fieldMaxValue=100, value=0) self.crvNameField = pm.textFieldButtonGrp(enable=False, label='Target Curve', placeholderText='Enter Curve Name Here', buttonLabel='load selected', buttonCommand=self.crvNameField_load) self.jntNameFeild = pm.textFieldGrp(parent=self.layout,enable=False, label='Joint Base Name', placeholderText="name your joints", editable=True, tcc=self.jntNameFeild_change) self.chkboxGrp = pm.checkBoxGrp(enable=False, numberOfCheckBoxes=3, label='Add', labelArray3=['splineIK', 'CTRLs', 'stretchy']) self.goBtn = pm.button(parent=self.layout, enable=False,w = 100, h = 24, label="GO!", command=self.execute) self.noBtn = pm.button(parent=self.layout, enable=False,w = 100, h = 24, label="NO DONT DO IT!", command=self.close) self.format_string = "{PREFIX}_{INDEX}_{SUFFIX}" self.delete = [] self.win.show()
def window(self): win = pm.window(title='Frustum Selection', width=400, s=True, resizeToFitChildren=True) pm.columnLayout(adj=True) radio = pm.radioButtonGrp(nrb=3, l1='Use Time Slider', l2='Start/End', l3='Current Time', sl=1) frameRange = pm.intFieldGrp(nf=2, l='Frame Range: Start', cw1=100, v1=1001, el='End', v2=1100, en=False) radio.onCommand2(pm.Callback(frameRange.setEnable, True)) radio.offCommand2(pm.Callback(frameRange.setEnable, False)) screen_size = pm.intFieldGrp(nf=2, l='Screen Size', cw1=100, v1=2048, el='Height', v2=858) offset = pm.floatFieldGrp(nf=1, l='Selection Offset', cw1=100, el='%', v1=0) invert = pm.checkBoxGrp(ncb=1, l='Invert Selection', cw1=100, v1=0) auto = pm.checkBoxGrp(ncb=1, l='Auto Get Camera', cw1=100, v1=1) pm.text( label= 'Help: it is possible to select multiple cameras.\nfilmTranslate attribute on camera is NOT in effect on selecting, use filmOffset instead.\nPositive offset shrink selection while negative expanding.', align='left', fn='boldLabelFont', recomputeSize=True, wordWrap=True) #autoFunc, widthFunc, heightFunc, modeFunc, offsetFunc, invertFunc, startFunc, endFunc): pm.button(l='Select', command=pm.Callback(self.getObjectInFrustumShell, auto.getValue1, screen_size.getValue1, screen_size.getValue2, radio.getSelect, offset.getValue1, invert.getValue1, frameRange.getValue1, frameRange.getValue2)) pm.button(l='Tag', command=pm.Callback(self.tagMasters)) pm.button(l='Delete All Tags', command=pm.Callback(self.deleteAllTags)) pm.separator(style='in', h=10) pm.button(label='Close', command=pm.Callback(pm.deleteUI, win.name())) pm.showWindow(win.name())
def getUIData(self, *args): self.prefix = pm.textFieldGrp(self.nameFld, query=True, text=True) self.loc1 = pm.textFieldButtonGrp(self.loc1Fld, query=True, text=True) self.loc2 = pm.textFieldButtonGrp(self.loc2Fld, query=True, text=True) self.loc3 = pm.textFieldButtonGrp(self.loc3Fld, query=True, text=True) self.shoulder = pm.textFieldButtonGrp(self.upperTorsoFld, query=True, text=True) self.cog = pm.textFieldButtonGrp(self.lowerTorsoFld, query=True, text=True) self.world = pm.textFieldButtonGrp(self.worldFld, query=True, text=True) self.hand_cnt = pm.textFieldButtonGrp(self.handCntFld, query=True, text=True) self.aim = pm.radioButtonGrp(self.aimFld, q=True, sl=True) self.aimPolarity = pm.radioButtonGrp(self.aimPolarityFld, q=True, sl=True) self.up = pm.radioButtonGrp(self.upFld, q=True, sl=True) self.upPolarity = pm.radioButtonGrp(self.upPolarityFld, q=True, sl=True) self.normal = pm.radioButtonGrp(self.nrFld, query=True, sl=True) self.radius = pm.floatFieldGrp(self.rFld, query=True, value1=True) self.build = pm.radioButtonGrp(self.buildFld, query=True, sl=True)
def __init__(self): with pm.frameLayout(l='Transform:', cll=True, cl=False, bs='out'): with pm.columnLayout(): with pm.gridLayout(nc=5): pm.iconTextButton(image1='pbUV/tRot90CCW.png', c=lambda *args: self.rotate(angle=90, dir='ccw'), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tRotCCW.png', c=lambda *args: self.rotate(dir='ccw'), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tTranslateUp.png', c=lambda *args: self.move(v=1), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tRotCW.png', c=lambda *args: self.rotate(dir='cw')) pm.iconTextButton(image1='pbUV/tRot90CW.png', c=lambda *args: self.rotate(angle=90, dir='cw'), commandRepeatable=True) flipuv = pm.iconTextButton(image1='pbUV/tFlipUV.png', c=lambda *args: self.flip(axis='u'), commandRepeatable=True) pm.popupMenu(button=3, p=flipuv, pmc=lambda *args: self.flip(axis='v')) pm.iconTextButton(image1='pbUV/tTranslateLeft.png', c=lambda *args: self.move(u=-1), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tTranslateDown.png', c=lambda *args: self.move(v=-1), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tTranslateRight.png', c=lambda *args: self.move(u=1), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tRot180CCW.png', c=lambda *args: self.rotate(angle=180, dir='ccw'), commandRepeatable=True) with pm.rowColumnLayout(nc=4): self.manipValue = pm.floatField(v=1.0) pm.iconTextButton(image1='pbUV/tScaleU.png', c=lambda *args: self.scale(axis='u'), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tScaleV.png', c=lambda *args: self.scale(axis='v'), commandRepeatable=True) pm.iconTextButton(image1='pbUV/tScaleUV.png', c=lambda *args: self.scale(), commandRepeatable=True) pm.separator(st='in', width=160, height=8) with pm.rowLayout(nc=2): pm.button(l='Orient Edge', c=self.orient_edge) pm.button(l='Orient Bounds', c=self.orient_bounds) pm.separator(st='in', width=160, height=8) with pm.columnLayout(cal='left'): pm.text(l='Pivot:') self.pivType = pm.radioButtonGrp(nrb=2, labelArray2=['Selection', 'Custom'], cw2=[64, 64], cc=self._piv_change, sl=1) with pm.rowLayout(nc=3, en=False) as self.pivPos: pm.text('POS:') self.pivU = pm.floatField() self.pivV = pm.floatField() self.sampleSel = pm.button(l='Sample Selection', height=18, en=False, c=self.sample_sel_cmd)
def execRemap(*args): remapType = pm.optionMenu(match_mnu, q= 1, v= 1) tirm = tirm_mqsb.isChecked() sel_src = not hSrc_mqsb.isChecked() sel_dis = not hTrg_mqsb.isChecked() scale = pm.floatField(scale_flt, q= 1, v= 1) mirror = [None, 'X', 'Z', 'Y'][pm.radioButtonGrp('mirror_radioBtnGrp' , q= 1, sl= 1) - 1] if maya_mqsb.isChecked(): if _setConn: mr.remoteRemap(beam, remapType, tirm, sel_src, sel_dis, scale, mirror) else: dis = [str(i) for i in pm.textScrollList(trg_sls, q= 1, ai= 1)] mr.localRemap(dis, remapType, tirm, sel_src, sel_dis, scale, mirror)
def __init__(self): self.mainLayout = pm.columnLayout(adjustableColumn = True) pm.button(label = 'new fields', command = pm.Callback(self.createFields)) self.openButtons = pm.radioButtonGrp(numberOfRadioButtons = 2 , columnAlign = [ 1 , 'center' ],label = ' Choose Program ', label1 = 'Preview',label2 = 'Photoshop') pm.button(label = 'open images', command = pm.Callback(self.openImage)) pm.button(label = 'open reference', command = pm.Callback(self.openReference)) self.layout = pm.rowColumnLayout(nc=2 , cw =[(1, 400) ,(2, 80)]) # self.num is a number, which will be used to give unique names to the dynamically created fields self.num = 1 # the list of the paths for the images self.imageList = [] # this list will have the base name of all the images self.nameList = []
def option_box_apply(self): kwargs = {} blend_shape = pm.optionMenuGrp('sbsList', q=True, v=True) blend_shape = pm.ls(blend_shape)[0] leftOutput = None rightOutput = None if pm.optionMenuGrp('sbsLeftOutput', q=True, sl=True) != 1: # "Same deformer as source" leftOutput = pm.optionMenuGrp('sbsLeftOutput', q=True, v=True) leftOutput = pm.ls(leftOutput)[0] if pm.optionMenuGrp('sbsRightOutput', q=True, sl=True) != 1: # "Same deformer as source" rightOutput = pm.optionMenuGrp('sbsRightOutput', q=True, v=True) rightOutput = pm.ls(rightOutput)[0] blendShapeTarget = '' if pm.optionMenuGrp('sbsTargetList', q=True, sl=True) != 1: # "All" blendShapeTarget = pm.optionMenuGrp('sbsTargetList', q=True, v=True) distance = pm.floatSliderGrp('sbsBlendDistance', q=True, v=True) origin = pm.floatSliderGrp('sbsPlaneOrigin', q=True, v=True) plane = pm.radioButtonGrp('sbsPlane', q=True, sl=True) kwargs['naming_pattern'] = pm.textFieldGrp('sbsNamingPattern', q=True, text=True) plane_to_axis = { 1: 2, 2: 0, 0: 1, } axis = plane_to_axis[plane] if blendShapeTarget != "": func = split_blend_shape_from_deformer kwargs['blendTarget'] = blendShapeTarget else: func = split_all_blend_shape_targets kwargs['blend_shape'] = blend_shape if leftOutput: kwargs['outputBlendShapeLeft'] = leftOutput if rightOutput: kwargs['outputBlendShapeRight'] = rightOutput split_args = {} kwargs['split_args'] = split_args split_args['fade_distance'] = distance split_args['axis'] = axis split_args['axis_origin'] = origin func(**kwargs)
def createRigCallback(self, *args): reaply = pm.checkBox(self.reapplySkinCheckbox, q=True, v=True) armRibChk = pm.checkBox(self.hasArmRibbonsCheckbox, q=True, v=True) armRibbons = pm.intField(self.armRibbonJointsIntField, q=True, v=True) armOffset = pm.floatFieldGrp(self.armRibbonFirstJointOffsetFloatField, q=True, v1=True) legRibChk = pm.checkBox(self.hasLegRibbonsCheckbox, q=True, v=True) legRibbons = pm.intField(self.legRibbonJointsIntField, q=True, v=True) legOffset = pm.floatFieldGrp(self.legRibbonFirstJointOffsetFloatField, q=True, v1=True) parentModulesSel = pm.radioButtonGrp(self.modulesConnectionRadioButton, q=True, sl=True) spineJnts = pm.intField(self.spineJointsIntField, q=True, v=True) print 'parent', parentModulesSel if parentModulesSel == 1: parentModules = True else: parentModules = False print armRibbons, legRibbons if not legRibChk: legRibbons = 0 if not armRibChk: armRibbons = 0 if reaply: self.quadrupedInstance.saveSkin() self.quadrupedInstance.generateRig(armRibbons=armRibbons, armOffsetStart=armOffset, armOffsetEnd=armOffset, legRibbons=legRibbons, legOffsetStart=legOffset, legOffsetEnd=legOffset, parentModules=parentModules, spineJnts=spineJnts) if reaply: try: self.quadrupedInstance.loadSkin() except: logger.error('nao tem rig ainda...')
def displayOptions(self): """Build the interface""" self.interface['TimeRange'] = cmds.radioButtonGrp( numberOfRadioButtons=2, label='Time Range', labelArray2=['Time Slider', 'Start/End'], onCommand=self.disableTimeRange) self.interface['StartTime'] = cmds.intFieldGrp(label='Start Time') self.interface['EndTime'] = cmds.intFieldGrp(label='End Time') self.interface['Focals'] = cmds.textFieldGrp(label='Focals') self.interface['Cameras'] = cmds.textScrollList( allowMultiSelection=True, width=200, height=100) # self.interface['CamerasLabel'] = cmds.text( label='Cameras' ) self.formAttachPosition() cmds.formLayout( self.optionsForm, e=True, attachForm=( [self.interface['TimeRange'], 'top', 10], [self.interface['Cameras'], 'bottom', 100], [self.interface['Cameras'], 'left', 150], ), attachControl=( [ self.interface['StartTime'], 'top', 0, self.interface['TimeRange'] ], [ self.interface['EndTime'], 'top', 0, self.interface['StartTime'] ], [ self.interface['Focals'], 'top', 0, self.interface['EndTime'] ], [ self.interface['Cameras'], 'top', 10, self.interface['Focals'] ], # [ self.interface['CamerasLabel'], 'top', 10, self.interface['Focals'] ], # [ self.interface['CamerasLabel'], 'right', -90, self.interface['Cameras'] ], ), attachNone=( [self.interface['Cameras'], 'left'], [self.interface['Cameras'], 'right'], )) self.editMenuResetCmd() # Set the default values in the interface
def to_repr(cls, repr_name): """replaces the related references with the given representation :param str repr_name: Desired representation name """ # get apply to apply_to = \ pm.radioButtonGrp('repr_apply_to_radio_button_grp', q=1, sl=1) if apply_to == 1: # work on every selected object selection = pm.ls(sl=1) # collect reference files first references = [] for node in selection: ref = node.referenceFile() # get the topmost parent ref = ref.topmost_parent() if ref is not None and ref not in references: references.append(ref) from anima.env.mayaEnv.repr_tools import RepresentationGenerator # now go over each reference for ref in references: if not ref.is_repr(repr_name): parent_ref = ref while parent_ref is not None: # check if it is a look dev node v = parent_ref.version if v: task = v.task if RepresentationGenerator.is_look_dev_task(task) \ or RepresentationGenerator.is_vegetation_task(task): # convert it to repr parent_ref.to_repr(repr_name) break else: # go to parent ref parent_ref = parent_ref.parent() else: parent_ref = parent_ref.parent() elif apply_to == 2: # apply to all references for ref in pm.listReferences(): ref.to_repr(repr_name)
def UI_exporter(self): #setting basic UI height and width winWidth = 500 winHeight = 300 # checking for duplicate windows windowID = 'AdvSkeExporter' if pm.window(windowID, exists=True): pm.deleteUI(windowID) #re-adjusting UI if UI is not correct if pm.windowPref('AdvSkeExporter', q=True, height = True) != winHeight or pm.windowPref('AdvSkeExporter', q=True, width = True) != winWidth: pm.windowPref('AdvSkeExporter', remove=True) # creating window pm.window(windowID, title=u'Prism Exporter | Ver 2018 / 06 / 06', widthHeight=(winWidth, winHeight)) rigExportFrame = pm.frameLayout(u'出力', width=500, nch = 10, labelIndent = 20) nameFormLayout = pm.formLayout('nameForm', parent = rigExportFrame, nch = 30, width = 500, height = 500, numberOfDivisions = 100) self.exportPathText = pm.text(label = u'出力先:' , parent = nameFormLayout, align = 'right', width = 50) self.exportPathField = pm.textField('exportPath', placeholderText = u'export path', width = 300) pm.formLayout(nameFormLayout, edit=True, attachForm = [(self.exportPathText, 'top', 25.5), (self.exportPathText, 'left', 40),#all text have an offset of 3 from top (self.exportPathField, 'top', 22.5), (self.exportPathField, 'left', 100)]) self.fbxNameText = pm.text(label = u'ファイル名:', parent = nameFormLayout, align = 'right', width = 50) self.fbxNameField = pm.textField('fbxName', placeholderText = u'file name', width = 300) pm.formLayout(nameFormLayout, edit=True, attachForm = [(self.fbxNameText, 'top', 53), (self.fbxNameText, 'left', 40), (self.fbxNameField, 'top', 50), (self.fbxNameField, 'left', 100)]) self.exportOptionGrp = pm.radioButtonGrp('expRadioGrp', numberOfRadioButtons = 2, parent = nameFormLayout, label1 = u'リグ', label2 = u'モーション', width = 300, label = u'出力設定:', columnAlign = [1, 'right'], columnWidth = [(1, 90), (2, 100), (3, 100)], columnAttach = [(2, 'left', 15)]) pm.formLayout(nameFormLayout, edit=True, attachForm = [(self.exportOptionGrp, 'top', 80), (self.exportOptionGrp, 'left', 0)]) self.expButton = pm.button(label = u'出力', parent = nameFormLayout, command = self.exportButton, width = 250) pm.formLayout(nameFormLayout, edit=True, attachForm=[(self.expButton, 'top', 200), (self.expButton, 'left', 100)]) pm.showWindow()
def __init__(self): self.mainLayout = pm.columnLayout(adjustableColumn=True) pm.button(label='new fields', command=pm.Callback(self.createFields)) self.openButtons = pm.radioButtonGrp(numberOfRadioButtons=2, columnAlign=[1, 'center'], label=' Choose Program ', label1='Preview', label2='Photoshop') pm.button(label='open images', command=pm.Callback(self.openImage)) pm.button(label='open reference', command=pm.Callback(self.openReference)) self.layout = pm.rowColumnLayout(nc=2, cw=[(1, 400), (2, 80)]) # self.num is a number, which will be used to give unique names to the dynamically created fields self.num = 1 # the list of the paths for the images self.imageList = [] # this list will have the base name of all the images self.nameList = []
def prepareBatch(transfert, *args): # Retrieving values from UI subdivType = pc.radioButtonGrp(uiWidgets["subdivType"], q=1, sl=1) subdivIt = pc.intSliderGrp(uiWidgets["subdivIterations"], q=1, value=1) autobump = pc.checkBox(uiWidgets["autobump"], q=1, value=1) # Get the selected objects selections = pc.ls(sl=1) # If none, execution stops here if len(selections) == 0: pc.confirmDialog(t="Error", message="Nothing selected.", icon="critical") # Else, we batch set the primary visibility else: print "BATCH SET SMOOTH" for sel in selections: applySmooth(sel, subdivType, subdivIt, autobump, transfert)
def bringTheRain(): global jointGuides,setUpName,axis,size,side axisSel = pm.radioButtonGrp('AxisSel',q = True,sl = True) size = pm.floatSliderGrp('Cc_Size',q = True,v = True) if axisSel == 1: axis = 'x' elif axisSel == 2: axis = 'y' elif axisSel == 3: axis = 'z' jointGuidesGrp.v.set(0) guidePos = [x.getTranslation(space = 'world') for x in jointGuides] guideRot = [x.getRotation(space = 'world') for x in jointGuides] bc = BoneChain(baseName = setUpName,side = side,type = 'jj') bc.fromList(guidePos,guideRot,autoOrient = 1) fk = FkChain(baseName = setUpName + 'Fk',side = side,size = size,type = 'fk',aimAxis = axis) fk.fromList(guidePos,guideRot,autoOrient = 1) ik = dynamicIkChain(baseName = setUpName + 'DynIk',side = side,type = 'ik') ik.fromList(guidePos,guideRot,autoOrient = 1) #create main Cc mainCtrl = Control(side,setUpName,size = size * 1.5,aimAxis = axis) mainCtrl.circleCtrl() pm.xform(mainCtrl.controlGrp,ws = 1,matrix = ik.chain[0].worldMatrix.get()) # jjPos = pm.xform(ik.chain[0],query=1,ws=1,rp=1) # pm.move(jjPos[0],jjPos[1],jjPos[2],mainCtrl.controlGrp) blendData = BoneChain.blendTwoChains(fk.chain,ik.chain,bc.chain, mainCtrl.control,'Dynamic',setUpName,side) lockAndHideAttr(mainCtrl.control , ['sx','sy','sz']) jointGuidesGrp.setParent(ik.dynMainGrp) ik.hairFol[0].setParent(mainCtrl.control) ik.chain[0].setParent(mainCtrl.control) fk.chain[0].setParent(mainCtrl.control) bc.chain[0].setParent(mainCtrl.control)
def __init__(self, opts): self.opts = opts with pm.frameLayout('Physics', collapsable=True, cl=False, bs='out'): with pm.columnLayout(width=250): pm.text(l='Collision Type:') self.phyType = pm.radioButtonGrp( labelArray3=['Convex Hull', 'Box', 'Sphere'], sl=self.opts['phyType'], nrb=3, cc=self.save, cw3=[94, 64, 64], width=250) self.maxVerts = pm.intSliderGrp(field=True, l='Max Vertices:', v=self.opts['maxVerts'], cl3=['left', 'left', 'left'], cw3=[64, 48, 128], cc=self.save) pm.button(l='Add Hull', w=250, c=self._addHull) self.save()
def build(self): #splineIK UI self.win = pm.window(self.title, title=self.title) self.layout = pm.rowColumnLayout() self.control_scheme_options = ['fk', 'ik', '...something else'] self.tf_obj_start = self._build_name_input(label='Load Start Object', parent=self.layout) self.tf_obj_end = self._build_name_input(label='Load End Object', parent=self.layout) self.tf_obj_aim = self._build_name_input(label='Load Aim Object', parent=self.layout) self.tf_obj_parent = self._build_name_input(label='Load Parent Transform', parent=self.layout) self.slider_joints = pm.intSliderGrp(enable=True, field=True, label='number of joints', minValue=3, fieldMinValue=3, fieldMaxValue=50, value=5, parent=self.layout) self.slider_controls = pm.intSliderGrp(enable=True, field=True, label='number of controls', minValue=3, fieldMinValue=2, fieldMaxValue=20, value=3, parent=self.layout) self.tfg_ribbon_name = pm.textFieldGrp(enable=True, label='ribbon', placeholderText='name of ribbon', editable=True, tcc=self._on_change_tfg_ribbon_name, parent=self.layout) self.rbg_control_scheme = pm.radioButtonGrp(label='Control Scheme', labelArray3=self.control_scheme_options, numberOfRadioButtons=3) self.rbg_control_scheme.setSelect(2) self.btn_execute = pm.button(parent=self.layout, enable=False,w = 100, h = 24, label="Build", command=self._build_ribbon) self.btn_cancel = pm.button(parent=self.layout, enable=False,w = 100, h = 24, label="Cancel", command=self.close) pm.setFocus(self.btn_execute) self.win.show()
def gui(): if (cmds.window(win, ex=1)): cmds.deleteUI(win) if (cmds.windowPref(win, ex=1)): cmds.windowPref(win, r=1) global polygon_choice, obj_no, area_no, scale_no cmds.window(win, s=1, vis=1, w=w, h=h) cmds.rowColumnLayout(w=w, h=h) cmds.text(l='') polygon_choice = pm.radioButtonGrp( la4=['Cube', 'Sphere', 'Cylinder', 'plane'], nrb=4, cw4=[67, 67, 67, 67], sl=1) cmds.text(l='', h=8) cmds.rowColumnLayout(nc=2) cmds.text(l='Number of Objects:') obj_no = pm.intField(v=10, w=w2) cmds.text(l='Area Scale:') area_no = pm.intField(v=11, w=w2) cmds.text(l='Max Object Scale:') scale_no = pm.intField(v=1, w=w2) cmds.text(l='') cmds.text(l='') cmds.button(l='do shit', c=do_shit) cmds.showWindow()
def __init__(self): title = 'curvyEdges' version = '1.01' self.ceObj = spline(self) if pm.window('curvyEdgesWin', exists=True): pm.deleteUI('curvyEdgesWin') with pm.window('curvyEdgesWin', title='{0} | {1}'.format(title, version), mnb=False, mxb=False, sizeable=False) as window: with pm.columnLayout(): # curve Frame with pm.frameLayout(l='Curve Settings', cll=True, cl=False, bs='out'): with pm.columnLayout(): self.curveType = pm.radioButtonGrp(l='Curve Type:', sl=0, nrb=2, cw3=[96, 96, 128], labelArray2=['BezierCurve', 'NurbsCurve']) self.spans = pm.intSliderGrp(field=True, l='Curve Spans:', minValue=2, maxValue=24, fieldMinValue=2, fieldMaxValue=128, value=2, cw3=[96, 64, 128]) with pm.rowColumnLayout(nc=2, cw=[1, 96], co=[1, 'right', 1]): self.selOnly = pm.checkBox(v=False, l='Selection Only') pm.button(l='Create Curve', c=self._create, width=201) # Deformer Frame with pm.frameLayout(l='Deformer Settings', bs='out', cl=False, cll=True): with pm.columnLayout(): self.currentCrv = pm.textFieldGrp(editable=False, l='Current Curve:', cw2=[96, 195]) self.deformers = [attrSlider(1, 0, 1, 'envelope', self.ceObj), attrSlider(1, -10, 10, 'tension', self.ceObj), attrSlider(0, 0, 256, 'dropoffDistance[0]', self.ceObj), attrSlider(1, 0, 2, 'scale[0]', self.ceObj), attrSlider(1, 0, 1, 'rotation', self.ceObj)] window.show() pm.scriptJob(event=['SelectionChanged', self.select], protected=True, p=window) self.select()
def start_export(self): model_selected = pm.radioButtonGrp(self.work_mode, q=True, sl=True) if not os.path.exists(self.output_path): os.makedirs(self.output_path) if len(self.output_files) < 1: pm.error(u"任务列表不能为空") else: if model_selected == 1: # 输出FBX self.export_to_fbx(self.output_files) if model_selected == 2: # FBX优化 self.start_optimize_fbx(self.output_files) if model_selected == 3: # 全流程 if self.export_to_fbx(self.output_files): self.move_to_task_scroll() self.output_files = pm.textScrollList( self.task_scroll, q=True, ai=True) self.start_optimize_fbx(self.output_files) print(u"输出成功") return
def build(self, *args): ''' Call methods to build the joints on nurbs plane setup ''' _name = 'build' pymelLogger.info('Started: %s' % _name) # Validate user input name = pm.textFieldGrp(self.nameFld, q=1, text=1) num = pm.intFieldGrp(self.numFld, q=1, v=1)[0] rad = pm.floatFieldGrp(self.radFld, q=1, v=1)[0] axis = pm.radioButtonGrp(self.buildFld, q=1, sl=1) objs = pm.ls(sl=1) if not name: pymelLogger.error('No name entered by user. Must enter a name. Exiting.') return if num < 1 or num > 50: pymelLogger.error('%s is an invalid value for number of joints. Must be between 3 - 50. Exiting.' % num) return if rad < 0.009 or rad > 10: pymelLogger.error('%s is an invalid value for joint radius. Must be between 0.01 - 10. Exiting.' % rad) return if not objs: pymelLogger.error('No objects selected. Must select objects to build curve along. Exiting.') return # Call build methods crv1, crv2 = self._createCurves(objs=objs, axis=axis, num=num) plane = self._createPlane(name=name, crv1=crv1, crv2=crv2) follicles = self._createFollicles(name=name, plane=plane, num=num) self._createJoints(name=name, follicles=follicles, rad=rad) pm.delete(crv1, crv2) pymelLogger.info('Ended: %s' % _name) pymelLogger.info('Build successful!')
def ui(self): ''' Create UI ''' _name = 'ui' pymelLogger.info('Started: %s' % _name) winName = 'ms_jointsOnNurbsPlaneWin' if(pm.window(winName, exists=True)): pm.deleteUI(winName, window=True) win = pm.window(winName) with pm.formLayout() as form: self.nameFld = pm.textFieldGrp(l='Name') self.numFld = pm.intFieldGrp(l='Joints (3-50)', v1=3) self.radFld = pm.floatFieldGrp(l='Radius (0.01 - 10)', v1=0.5, pre=2) self.buildFld = pm.radioButtonGrp(l='Plane Curve Duplicate', labelArray3=['x', 'y', 'z'], nrb=3, sl=3) pm.text('Select objects to create plane along, then press "Build"') pm.button(l='>> Build <<', c=self.build) form.redistribute() pm.showWindow() pymelLogger.info('Ended: %s' % _name)
def getUIData(self, *args): self.prefix = pm.textFieldGrp(self.nameFld, query=True, text=True) self.loc1 = pm.textFieldButtonGrp(self.loc1Fld, query=True, text=True) self.loc2 = pm.textFieldButtonGrp(self.loc2Fld, query=True, text=True) self.loc3 = pm.textFieldButtonGrp(self.loc3Fld, query=True, text=True) self.shoulder = pm.textFieldButtonGrp(self.upperTorsoFld, query=True, text=True) self.cog = pm.textFieldButtonGrp(self.lowerTorsoFld, query=True, text=True) self.world = pm.textFieldButtonGrp(self.worldFld, query=True, text=True) self.hand_cnt = pm.textFieldButtonGrp(self.handCntFld, query=True, text=True) self.aim = pm.radioButtonGrp(self.aimFld,q=True,sl=True) self.aimPolarity = pm.radioButtonGrp(self.aimPolarityFld,q=True,sl=True) self.up = pm.radioButtonGrp(self.upFld,q=True,sl=True) self.upPolarity = pm.radioButtonGrp(self.upPolarityFld,q=True,sl=True) self.normal = pm.radioButtonGrp(self.nrFld, query=True, sl=True) self.radius = pm.floatFieldGrp(self.rFld, query=True, value1=True) self.build = pm.radioButtonGrp(self.buildFld, query=True, sl=True)
def _get_settings_for_postproc(robot): """ Get program settings from the Mimic UI. :return program_settings: dictionary """ # Get all important settings using_time_interval = pm.radioCollection('sample_rate_radio_collection', query=True, select=True) == 'rb_timeInterval' using_keyframes_only = not using_time_interval # TODO: Clever, but not expandable time_interval_value = pm.textField('t_timeBetweenSamples', query=True, text=True) time_interval_units = 'seconds' \ if pm.radioButtonGrp('time_unit_radio_group', query=True, sl=True) == 1 \ else 'frames' ignore_warnings = pm.checkBox('cb_ignoreWarnings', value=True, query=True) processor_type = pm.optionMenu('postProcessorList', query=True, value=True) output_directory = pm.textField('t_programDirectoryText', text=True, query=True) output_filename = pm.textField('t_outputFileName', text=True, query=True) template_filename = pm.textField('t_templateFileName', text=True, query=True) overwrite_option = pm.checkBox('cb_overwriteFile', value=True, query=True) # Get time interval in seconds animation_settings = _get_settings_for_animation(robot) framerate = animation_settings['Framerate'] if time_interval_units == 'seconds': sample_rate_sec = float(time_interval_value) else: # time_interval_units == 'frames' sample_rate_sec = float(time_interval_value) / float(framerate) time_interval_in_seconds = sample_rate_sec # Check for warnings if using_time_interval: # Confirm that the time interval is valid try: time_interval_value = float(time_interval_value) assert time_interval_value > 0 except ValueError: if time_interval_units == 'seconds': warning = 'Time interval must be a float' raise Exception(warning) else: # time_interval_units == 'frames' warning = 'Time interval must be a float' raise Exception(warning) except AssertionError: if time_interval_units == 'seconds': warning = 'Time interval must be greater than zero' raise Exception(warning) else: # time_interval_units = 'frames' warning = 'Time interval must be greater than zero' raise Exception(warning) # Check if the robot-postproc compatibility warning was triggered processor = postproc_setup.POST_PROCESSORS[processor_type]() warning = _check_robot_postproc_compatibility(robot, processor) if warning != '': if not ignore_warnings: raise Exception(warning) else: warning += '\n' pm.scrollField(OUTPUT_WINDOW_NAME, insertText=warning, edit=True) # Assign values to output dict postproc_settings = { 'Using Time Interval': using_time_interval, 'Using Keyframes Only': using_keyframes_only, 'Time Interval Value': time_interval_value, 'Time Interval Units': time_interval_units, 'Time Interval in Seconds': time_interval_in_seconds, 'Ignore Warnings': ignore_warnings, 'Processor Type': processor_type, 'Output Directory': output_directory, 'Output Filename': output_filename, 'Template Filename': template_filename, 'Overwrite Option': overwrite_option } return postproc_settings
def AutoRig_UI(): if pm.window("AutoRig_JT", q=True, exists = True): pm.deleteUI("AutoRig_JT") windowUI = pm.window("AutoRig_JT",titleBarMenu=True, menuBar=True, mxb = False, t="AutoRig_JT", w = 300, h = 500, sizeable = False, bgc=[0.15,0.15,0.15],maximizeButton=False) pm.menu( label='File', tearOff=True ) pm.menuItem( label='Quit', c = partial(quit, "AutoRig_JT")) pm.menu( label='Help', helpMenu=True ) pm.menuItem( 'Application..."', label='About Creator', c = about ) pm.menuItem( 'Instructions', label='Instructions', c = instructions ) mainLayout = pm.columnLayout(adj = True, w=300, h=700) # unique UI stuff imagePath = pm.internalVar(upd = True) + "icons/autoRig_banner.jpg" pm.image(w = 300, h = 100,image = imagePath, parent = mainLayout) pm.separator(style = 'none', h=20) pm.rowColumnLayout(nc = 2, cw = [(1,100),(2,200)],parent = mainLayout, columnOffset = ([(1,"left",10),(2,"left",0)])) pm.text(l=' Rig_Prefix : ') RigPrefix = pm.textFieldGrp("RigPrefix",tx='Character_',w=80) pm.separator(style = 'none', h=20) pm.separator(style = 'none', h=20) pm.text(l='Spine Joints : ') spineNumberField = pm.intFieldGrp("spineNumberField",numberOfFields=1,v1=3,w=190) pm.setParent(u=True) pm.separator(style = 'none', h=20) pm.separator(style = 'none', h=20) pm.separator(style = 'none',h=20) pm.button(l='Create Reference Skeleton',c=referenceSkeleton, w=190,h=40,bgc=[0.2,0.2,0.2]) pm.separator(style = 'none', h=20) pm.button(l='Mirror Locators (X+ to -X) (edit)', c=mirrorLocators, w=190, h=40, bgc=[0.2, 0.2, 0.2]) pm.separator(style='none', h=20) pm.button(l='Create Joint Skeleton (edit)', c=jointSkeleton, w=190, h=40, bgc=[0.2, 0.2, 0.2]) pm.separator(style='none', h=20) pm.radioButtonGrp('ZAxisOption', label='Z Align Axis', labelArray3=['X', 'Y', 'Z'], numberOfRadioButtons=3,cw=[(1,70),(2,35),(3,35)] ) pm.radioButtonGrp('directionOption', label='+ or -', labelArray2=['+', '-'], numberOfRadioButtons=2,cw=[(1,70),(2,35)] ) pm.button(l='Align Joints (select joints in chain you want to align)', c=alignChain, w=190, h=40, bgc=[0.2, 0.2, 0.2]) pm.separator(style='none', h=20) pm.button(l='Finalize Rig',c=finalize, w=190,h=40,bgc=[0.2,0.2,0.2]) pm.separator(style = 'none', h=20) pm.button(l='Exit',c=partial(quit,"AutoRig_JT"), w=190,h=40,bgc=[0.2,0.2,0.2]) print windowUI pm.showWindow(windowUI) pm.window("AutoRig_JT", e=True,w=300,h=600)
def buildGUI(self,*args): """ Create the GUI """ if(pm.window("msArmRigWin", exists=True)): pm.deleteUI("msArmRigWin", window=True) with pm.window("msArmRigWin", title="Arm Rig v%s" % __version__, menuBar=True, w=400, h=600, rtf=1) as mainWin: with pm.menu(label="Help",helpMenu=True) as m: pm.menuItem( m, label='Directions', command=self.helpWin ) with pm.columnLayout(adj=0) as col: # UI elements self.nameFld = pm.textFieldGrp(l='Name:', text='r_arm', adj=1) pm.separator(w=500, style='out') self.loc1Fld = pm.textFieldButtonGrp(l="Shoulder Locator:", bl="Load", text='locator1', adj=1) pm.textFieldButtonGrp( self.loc1Fld, e=1, bc=partial(self.loadText, self.loc1Fld)) self.loc2Fld = pm.textFieldButtonGrp(l="Elbow Locator:", bl="Load", text='locator2', adj=1) pm.textFieldButtonGrp( self.loc2Fld, e=1, bc=partial(self.loadText, self.loc2Fld)) self.loc3Fld = pm.textFieldButtonGrp(l="Wrist Locator:", bl="Load", text='locator3', adj=1) pm.textFieldButtonGrp( self.loc3Fld, e=1, bc=partial(self.loadText, self.loc3Fld)) pm.separator(w=500, style='out') self.upperTorsoFld = pm.textFieldButtonGrp(l="Upper Torso:", bl="Load", text='joint4', adj=1) pm.textFieldButtonGrp( self.upperTorsoFld, e=1, bc=partial(self.loadText, self.upperTorsoFld)) self.lowerTorsoFld = pm.textFieldButtonGrp(l="Lower Torso:", bl="Load", text='joint2', adj=1) pm.textFieldButtonGrp( self.lowerTorsoFld, e=1, bc=partial(self.loadText, self.lowerTorsoFld)) self.worldFld = pm.textFieldButtonGrp(l="World Mover:", bl="Load", text='joint1', adj=1) pm.textFieldButtonGrp( self.worldFld, e=1, bc=partial(self.loadText, self.worldFld)) pm.separator(w=500, style='out') self.handCntFld = pm.textFieldButtonGrp(l="Switch Control:", bl="Load", text='nurbsCircle1', adj=1) pm.textFieldButtonGrp( self.handCntFld, e=1, bc=partial(self.loadText, self.handCntFld)) pm.separator(w=500, style='out') self.nrFld = pm.radioButtonGrp(l="FK Control Normal Axis:", nrb=3, labelArray3=('X', 'Y', 'Z'), sl=1, adj=1) self.rFld = pm.floatFieldGrp(l="FK Control radius:", numberOfFields=1, v1=3, adj=1) pm.separator(w=500, style='out') self.aimFld = pm.radioButtonGrp(l=' Aim Axis:', nrb=3, labelArray3=('X', 'Y', 'Z'), sl=1, adj=1) self.aimPolarityFld = pm.radioButtonGrp(l=' Aim Polarity:', nrb=2, labelArray2=('+', '-'), sl=1, adj=1) self.upFld = pm.radioButtonGrp(l=' Up Axis:', nrb=3, labelArray3=('X', 'Y', 'Z'), sl=2, adj=1) self.upPolarityFld = pm.radioButtonGrp(l=' Up Polarity:', nrb=2, labelArray2=('+', '-'), sl=1, adj=1) pm.separator(w=500, style='out') self.buildFld = pm.radioButtonGrp(l='Rig Build Type:', nrb=2, labelArray2=('Positive', 'Negative'), sl=2, adj=1) #self.stretchyFld = pm.radioButtonGrp(l="Stretchy?", nrb=2, labelArray2=('Yes', 'No'), sl=2, adj=1) pm.separator(w=500, style='out') pm.button(label="Build Rig", c=self.createArm, w=500) mainWin.show()
def ui(self): frameLayOpt = dict( cll=True, bs='etchedIn', mw=3, mh=3 ) rowLayOpt = dict( nc=2 ) textLabelOpt = dict( align='right', width=250) #with pm.frameLayout(lv=False, bv=False,mw=3, mh=3): with ui.stackLayout(adj=1, mw=3, mh=3): with pm.tabLayout( scr=True, cr=True ) as self.tabLay: # Arnold -------------------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3): with pm.columnLayout(adj=1): ''' with pm.tabLayout( tv=False ): with pm.columnLayout(adj=1): pm.text(l="Solid Angle Arnold", h= 32, en=False) pm.separator( h=6, style='none') ''' with pm.frameLayout(lv=False, bv=True, bs='etchedIn', mw=3, mh=3): with pm.columnLayout(adj=1): pm.checkBoxGrp( l='Arnold options : ', ncb=1, vr=True, l1='Set opaque (Shape node)', v1=self.setAiOpaque.get(), cc1=self.setAiOpaque.set, #l2='Assign To Object', v2=self.assignToObject.get(), cc2=self.assignToObject.set, #l3='self.boolAttr3', v3=self.boolAttr3.get(), cc3=self.boolAttr3.set ) pm.separator( h=6, style='none') #with pm.frameLayout( l=u'Maya Software → Arnold', **frameLayOpt): with pm.frameLayout( l=u'Maya Software → Arnold', cl=self.collapseFrames.get()[0], cc=pm.Callback( self.frameColCmd, 0, 1 ), ec=pm.Callback( self.frameColCmd, 0, 0 ), **frameLayOpt): with pm.columnLayout(adj=1): with pm.rowLayout( **rowLayOpt ): pm.text(l=u'Lambert, Blinn, Phong, PhongE → aiStandard : ', **textLabelOpt ) pm.button(l='Convert', c=pm.Callback( self.mayaShader_to_aiStandard ) ) #with pm.frameLayout( l=u'Mentalray → Arnold', **frameLayOpt): with pm.frameLayout( l=u'Mentalray → Arnold', cl=self.collapseFrames.get()[1], cc=pm.Callback( self.frameColCmd, 1, 1 ), ec=pm.Callback( self.frameColCmd, 1, 0 ), **frameLayOpt): with pm.columnLayout(adj=1): with pm.rowLayout( en=False, **rowLayOpt ): pm.text(l=u'mia_material_x → aiStandard : ', **textLabelOpt ) pm.button(l='Convert') with pm.rowLayout( en=False, **rowLayOpt ): pm.text(l=u'mia_car_paint_phen_x → aiStandard : ', **textLabelOpt ) pm.button(l='Convert') #with pm.frameLayout( l=u'Vray → Arnold', **frameLayOpt): with pm.frameLayout( l=u'Vray → Arnold', cl=self.collapseFrames.get()[2], cc=pm.Callback( self.frameColCmd, 2, 1 ), ec=pm.Callback( self.frameColCmd, 2, 0 ), **frameLayOpt): with pm.columnLayout(adj=1): with pm.rowLayout( **rowLayOpt ): pm.text(l=u'VRayMtl → aiStandard : ', **textLabelOpt ) pm.button(l='Convert', c=pm.Callback( self.VRayMtl_to_aiStandard ) ) # Vray -------------------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3, en=False): with pm.columnLayout(adj=True): pm.button() # Mentalray --------------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3, en=False): with pm.columnLayout(adj=True): pm.button() # Maya Software ----------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3, en=False): with pm.columnLayout(adj=True): pm.button() with pm.frameLayout( l=u'Advanced Options', cl=self.collapseFrames.get()[3], cc=pm.Callback( self.frameColCmd, 3, 1 ), ec=pm.Callback( self.frameColCmd, 3, 0 ), **frameLayOpt): with pm.columnLayout(adj=True): pm.radioButtonGrp( l='Select : ', nrb=2, vr=True, cw4=(140,30,30,30), select=self.selectOpt.get(), l1='Selected shaders only', on1=pm.Callback( self.selectOpt.set, 1), l2='All Shaders in this scene', on2=pm.Callback( self.selectOpt.set, 2), #l3='3', on3=pm.Callback( self.selectOpt.set, 3), ) pm.separator( h=8, style='in') pm.checkBoxGrp( l='Options : ', numberOfCheckBoxes=4, vertical=True, l1='Delete old shader', v1=self.deleteOldShader.get(), cc1=self.deleteOldShader.set, l2='Assign to object', v2=self.assignToObject.get(), cc2=self.assignToObject.set, l3='Add subfix', v3=self.addSubfix.get(), cc3=self.addSubfix.set, l4='Reconnect Hardware Texture', v4=self.reconnectHwTx.get(), cc4=self.reconnectHwTx.set, ) pm.checkBoxGrp( l='', numberOfCheckBoxes=1, vertical=True, l1='Display process (slow)', v1=self.processDisplay.get(), cc1=self.processDisplay.set, #l2='Assign to object', v2=self.assignToObject.get(), cc2=self.assignToObject.set, #l3='Add subfix', v3=self.addSubfix.get(), cc3=self.addSubfix.set, #l4='Display process (slow)', v4=self.processDisplay.get(), cc4=self.processDisplay.set, ) # # 탭 조정 # self.tabLay.setTabLabel( [ ( self.tabLay.getChildren()[0], 'Arnold'), ( self.tabLay.getChildren()[1], 'VRay'), ( self.tabLay.getChildren()[2], 'Mentalray'), ( self.tabLay.getChildren()[3], 'Maya Software'), ] ) self.tabLay.changeCommand( lambda: self.selectedTab.set( self.tabLay.getSelectTabIndex() ) ) try: self.tabLay.setSelectTabIndex( self.selectedTab.get() ) except: self.selectedTab.set(1) self.tabLay.setSelectTabIndex( self.selectedTab.get() )