Exemple #1
2
def lcObj_exportObjs(*args, **kwargs):
  ''' Export .obj files from selected geometry, either as one combined file or as individual files per object.  Will recognize and convert poly smooth preview to geometry for export '''
  global prefix
  path = pm.textField(prefix+'_textField_export_path', query=True, text=True)
  objPrefix = pm.textField(prefix+'_textField_prefix', query=True, text=True)
  if objPrefix:
    objPrefix+='_'

  if path:

    sel = pm.ls(sl=True)

    if sel:
      sel = geometry.filterForGeometry(sel)
      print sel

      #undo is the easiest way to work on geometry temporarily
      pm.undoInfo(openChunk=True)

      if pm.checkBox(prefix+'_checkBox_use_smooth', query=True, v=True):
        for obj in sel:
          pm.select(obj)
          #find the objects currently displayed as smooth and create converted poly copies
          if pm.displaySmoothness(q=True, polygonObject=True)[0] == 3:
            pm.mel.performSmoothMeshPreviewToPolygon()

      if pm.checkBox(prefix+'_checkBox_export_indi', query=True, v=True):
        #export objects individually
        for obj in sel:
          pm.select(obj)
          name = str(obj)
          exportString = path+'/'+objPrefix+name+'.obj'
          pm.exportSelected(exportString, force=True, options='groups=1;ptgroups=1;materials=0;smoothing=1;normals=1', type='OBJexport', pr=True, es=True)

      else:
        #export as one object
        pm.select(sel)
        name = ''
        while name == '':
          dialog = pm.promptDialog(title='OBJ Name', message='Enter Name:', button=['OK', 'Cancel'], defaultButton='OK', cancelButton='Cancel', dismissString='Cancel')
          if dialog == 'OK':
            name = pm.promptDialog(query=True, text=True)
            if name:
              exportString = path+'/'+objPrefix+name+'.obj'
              pm.exportSelected(exportString, force=True, options='groups=1;ptgroups=1;materials=0;smoothing=1;normals=1', type='OBJexport', pr=True, es=True)
            else:
              pm.warning("You didn't type a name for your obj")
          if dialog == 'Cancel':
            break

      pm.undoInfo(closeChunk=True)
      pm.undo()
      pm.select(clear=True)

  else:
    pm.warning('Did you specify a path?')
def multi_BasicSettings():
	# Basic Settings
	pm.text(l='', h=5)
	multi_nameField = pm.textFieldGrp('hp3dNameField', l='Name', text='', cw=[2, 150], cc=fun.partial(multi_nameChange, 'hp3dNameField'), fcc=True)

	pm.rowColumnLayout(nc=2)
	pm.text(l='Basic Settings', w=75, al='left', en=False)
	pm.separator(w=marginWidth-75, h=14)
	pm.setParent(multiLight_layout)

	multi_color = pm.colorSliderGrp('hp3dColorSlider', label='Color', rgb=(1, 1, 1), cw=[3, 20], dc=fun.partial(multi_colorChange, '.color', 'all', 'hp3dColorSlider'))
	multi_intensity = pm.floatSliderGrp('hp3dIntensitySlider', label='Intensity', field=True, v=1.000, fmx=1000000000, pre=3, cw=[3, 20], dc=fun.partial(multi_floatChange, '.intensity', 'all', 'hp3dIntensitySlider'))

	# pm.text(l='', h=3) # GUI SPACER
	pm.rowColumnLayout(nc=2)
	pm.text(l='', w=142) # GUI SPACER
	global multi_illDefault_box
	multi_illDefault_box = pm.checkBox(l='Illuminates by Default', v=1, cc=multi_illDefault)
	pm.setParent(multiLight_layout)

	pm.rowColumnLayout(nc=3)
	pm.text(l='', w=142) # GUI SPACER
	multi_emitDiff_box = pm.checkBox('hp3dEmitDiffCheckbox', l='Emit Diffuse', v=1, w=120, cc=fun.partial(multi_checkboxChange, '.emitDiffuse', 'all', 'hp3dEmitDiffCheckbox'))
	multi_emitSpec_box = pm.checkBox('hp3dEmitSpecCheckbox', l='Emit Specular', v=1, cc=fun.partial(multi_checkboxChange, '.emitSpecular', 'all', 'hp3dEmitSpecCheckbox'))
	pm.setParent(multiLight_layout)

	pm.rowColumnLayout(nc=3)
	pm.text(l='Decay Rate', w=140, al='right')
	pm.text(l='', w=3)
	multi_decayRate_menu = pm.optionMenu('hp3dDecayRateMenu', bgc=primary_componentColor, cc=fun.partial(multi_menuChange, '.decayRate', 'not directional', 'hp3dDecayRateMenu'))
	pm.menuItem(l='No Decay', da=0)
	pm.menuItem(l='Linear', da=1)
	pm.menuItem(l='Quadratic', da=2)
	pm.menuItem(l='Cubic', da=3)
	pm.setParent(multiLight_layout)
	def UI_custom(self):
		
		numJoints = len(self.jointInfo)
		
		pm.rowLayout(numberOfColumns = 2, columnWidth = [1, 100], adjustableColumn = 2)
		pm.text(label = "Number of Joints: ")
		self.numberOfJointsField = pm.intField(value = numJoints, minValue = 2, changeCommand = self.ChangeNumberOfJoints)
		
		pm.setParent('..')
		
		joints = self.GetJoints()
		self.CreateRotationOrderUIControl(joints[0])
		
		pm.separator(style = 'in')
		
		pm.text(label = "Orientation: ", align = "left")
		pm.rowLayout(numberOfColumns = 3)
		pm.attrEnumOptionMenu(attribute = "%s:module_grp.sao_local" %self.moduleNamespace, label = "Local: ")
		pm.text(label = " will be oriented to ")
		pm.attrEnumOptionMenu(attribute = "%s:module_grp.sao_world" %self.moduleNamespace, label = "World: ")
		
		pm.setParent('..')
		
		pm.separator(style = 'in')
		
		interpolating = False
		if pm.objExists("%s:interpolation_container" %self.moduleNamespace):
			interpolating = True
		
		
		pm.rowLayout(numberOfColumns = 2, columnWidth = [1, 80], adjustableColumn = 2)
		pm.text(label = "Interpolate: ")
		pm.checkBox(label = "", value = interpolating, onCommand = partial(self.SetupInterpolation, True), offCommand = self.DeleteInterpolation)
def doExecution(*args):
    is_find = pm.checkBox( UI_name[0], q=True, value=True )
    is_fix = pm.checkBox( UI_name[1], q=True, value=True )
    is_fixLayer = pm.checkBox( UI_name[2], q=True, value=True )
    
    shader_info_all_layers = []   
    
    if( is_find ):
        findErrorShape()
    
    if( is_fixLayer ):
        #// collect shaders info in each layer
        shader_info_all_layers = collectShaderInfoInLayer()                        

    if( is_fix ):
        fixComponentShading()
        
        if( is_fixLayer ):
            for shd_layer in shader_info_all_layers:
                
                #// switch to a specified layer
                curr_layer = shd_layer[0]
                pm.editRenderLayerGlobals( currentRenderLayer=curr_layer )
                
                #// parsing string for mesh & shader from list
                #// assign shader to mesh from list
                for shd in shd_layer[1]:                 
                    obj = shd[0]
                    SG = shd[1]
                    pm.sets( SG, edit=True, forceElement=obj )
                    
    pm.editRenderLayerGlobals( currentRenderLayer='defaultRenderLayer' )                          
    return 1
    def __init__(self):
        title = 'pbRenderableCurve'
        version = 1.02

        if pm.window('pbRCurve', exists=True):
            pm.deleteUI('pbRCurve')

        with pm.window('pbRCurve', title='{0} | {1}'.format(title, version), s=False) as window:
            with pm.columnLayout():
                with pm.frameLayout(l='Selection:', cll=True, bs='out'):
                    with pm.columnLayout():
                        self.selField = pm.textFieldGrp(text='No Curves Selected', ed=False, l='Curve:', cw2=[72, 192])
                        with pm.rowLayout(nc=2):
                            self.bRenderable = pm.checkBox(l='Renderable', cc=self.bcRenderable)

                with pm.frameLayout(l='Mesh Settings:', cll=True, bs='out') as self.meshUI:
                    with pm.columnLayout():
                        with pm.rowLayout(nc=4):
                            self.useNormal = pm.checkBox(l='Use Normal', cc=self.bcUseNormal)
                            self.normalVector = [pm.intField(width=62, en=False, value=0, cc=self.setNormal),
                                                 pm.intField(width=62, en=False, value=1, cc=self.setNormal),
                                                 pm.intField(width=62, en=False, value=0, cc=self.setNormal)]
                        self.meshAttrs = [AttrSlider(maxValue=128, name='Thickness', obj=getCurves, type_='float', fmn=0.0001),
                                          AttrSlider(value=3, minValue=3, maxValue=64, name='Sides', obj=getCurves, fmn=3, fmx=100),
                                          AttrSlider(minValue=1, maxValue=32, name='Samples', obj=getCurves, fmn=1, fmx=128)]

                with pm.frameLayout('Shell Settings:', cll=True, bs='out') as self.shellUI:
                    with pm.columnLayout():
                        self.bShell = pm.checkBox(l='Enable Shell', cc=self.bcShell)
                        self.shellAttrs = [AttrSlider(value=1, minValue=-64, maxValue=64, name='ShellThickness', obj=getCurves, type_='float'),
                                           AttrSlider(value=1, minValue=1, maxValue=64, name='ShellDivisions', obj=getCurves, fmn=1, fmx=32)]

        window.show()
        pm.scriptJob(event=['SelectionChanged', self.refresh], protected=True, p=window)
        self.refresh()
Exemple #6
0
    def __init__(self, opts):
        self.opts = opts
        with pm.frameLayout('Export Meshes (.FBX)', collapsable=True, cl=False, bs='out'):
            with pm.columnLayout(width=250):
                pm.text(l='Export List:')
                pm.separator(height=4)
                self.meshList = pm.textScrollList(height=250, width=250, ams=True, dkc=self._remove)
                with pm.rowColumnLayout(nc=3, cw=[(1, 82), (2, 82), (3, 82)]):
                    pm.button(l='Add', c=self._add)
                    pm.button(l='Remove', c=self._remove)
                    pm.button(l='Clear', c=self._clear)

                with pm.rowColumnLayout(nc=2, cw=[(1, 124), (2,124)]):
                    self.prefix = pm.checkBox(label='Prefix', value=self.opts['prefix'], cc=self.save)
                    self.suffix = pm.checkBox(label='Suffix', value=self.opts['suffix'], cc=self.save)
                    self.prefix_text = pm.textField(en=self.prefix.getValue(), text=self.opts['prefix_text'], cc=self.save)
                    self.suffix_text = pm.textField(en=self.suffix.getValue(), text=self.opts['suffix_text'], cc=self.save)

                pm.text(l='Export Path:')
                with pm.rowColumnLayout(nc=2, cw=[(1, 215), (2, 32)]):
                    self.fbxPath = pm.textField(text=self.opts['fbxPath'], cc=self._pathRefreash)
                    pm.button(l='...', c=self._path)

                with pm.rowColumnLayout(nc=3):
                    self.center = pm.checkBox(label='Move to Orgin', v=self.opts['center'], cc=self.save)
                    self.child = pm.checkBox(label='Export Childern', v=self.opts['child'], cc=self.save)
                    pm.button(l='FBXPreset', c=self._fbxPreset)

                with pm.rowColumnLayout(nc=2, cw=[(1, 124), (2, 124)]):
                    pm.button(l='Selected', c=self._selected)
                    pm.button(l='All', c=self._all)

        self._refresh()
Exemple #7
0
    def __init__(self):
        respresets = [4096, 2048, 1024, 512, 256, 128, 64, 32]
        with pm.frameLayout(l='Options', cll=True, cl=False, bs='out'):
            with pm.columnLayout():
                pm.text('Map Size:')
                pm.separator(st='in', width=160, height=8)
                with pm.rowColumnLayout(nc=3, cw=[20, 60]):
                    pm.text(l='Width:')
                    self.width = pm.intField(v=1024, width=42)
                    with pm.optionMenu():
                        for i in respresets:
                            pm.menuItem(l=i)
                    pm.text(l='Height:')
                    self.height = pm.intField(v=1024, width=42)
                    with pm.optionMenu():
                        for i in respresets:
                            pm.menuItem(l=i)
                pm.button(l='Get Map Size')

                pm.separator(st='in', width=160, height=8)
                with pm.columnLayout():
                    self.compSpace = pm.checkBox(l='Retain Component Spaceing',
                                                 cc=lambda *args: pm.texMoveContext('texMoveContext', e=True,
                                                                                    scr=self.compSpace.getValue()),
                                                 v=pm.texMoveContext('texMoveContext', q=True, scr=True))
                    self.pixelUnits = pm.checkBox(l='Transform In Pixels')
 def __init__(self):
     '''
     # class to sort and give info on shaders
     '''
     
     self.layout = pm.rowColumnLayout(numberOfColumns= 3, columnWidth=([1, 150],
                                             [2, 150], [3, 250]))
     pm.columnLayout()
     pm.text(label= 'Shaders')
     self.shader_list = pm.textScrollList(width= 150, height= 200,
                    selectCommand= pm.Callback(self.update_connections_list))
     pm.button(label= 'Refresh', width= 150,
               command= pm.Callback(self.update_shader_list))
     
     pm.setParent(self.layout)
     pm.columnLayout()
     pm.text(label='Connections')
     self.connections_list = pm.textScrollList(width= 150, height= 200,
                    selectCommand= pm.Callback(self.write_info))
     self.check_box = pm.checkBox(label= 'Select Node')
     
     pm.setParent(self.layout)
     pm.columnLayout()
     pm.text(label='Node Info')
     self.info_field = pm.scrollField(wordWrap= True, width= 250, height= 200)
     
     self.attr_check_box = pm.checkBox(label= 'Show All')
     
     
     self.update_shader_list()
Exemple #9
0
def get_check_box_states_and_run(*args, **kwargs):
    """Gets the data from UI and runs the script
    """
    freeze = pm.checkBox("FBJ_checkBox1", q=True, v=True)
    apply_to_children = pm.checkBox("FBJ_checkBox2", q=True, v=True)
    selection_list = pm.ls(sl=1, type="joint")
    do_fix(selection_list, freeze, apply_to_children)
    pm.select(selection_list)
Exemple #10
0
 def __init__(self, opts):
     self.opts = opts
     with pm.frameLayout(l='UV Snapshot:', cll=True, cl=False, bs='out'):
         with pm.columnLayout(width=162):
             self.path = pm.textFieldButtonGrp(l='Path:', bl='...', cw3=[28, 104, 32], bc=self.set_path)
             self.col = pm.colorSliderGrp(l='Color:', cw3=[32, 48, 74])
             with pm.rowLayout(nc=2):
                 self.of = pm.checkBox(l='Open File')
                 self.aa = pm.checkBox(l='Anti-Alias', v=True)
             pm.button(l='Save Snapshot', width=156, c=self.snap_shot)
Exemple #11
0
 def value(self, value=None):
     """returns or set the check box value
     """
     from pymel.core import checkBox
     if value is not None:
         # set the value
         checkBox(self, e=1, v=value)
     else:
         # get the value
         return checkBox(self, q=1, v=1)
Exemple #12
0
    def create(self):
        
        
        
        self.main_layout = pm.columnLayout(adjustableColumn= True, width= 400)
       
        main_frame = pm.frameLayout( label='%s' % (self.light), collapsable= True)
        pm.frameLayout( label='Light Attributes', collapsable= True)
        pm.attrColorSliderGrp( at='%s.color' % (self.light), columnWidth4= [100, 75, 175, 50])
        pm.attrFieldSliderGrp(at='%s.intensity' % (self.light), columnWidth4= [100, 75, 175, 50])
        pm.attrFieldSliderGrp(at='%s.coneAngle' % (self.light), columnWidth4= [100, 75, 175, 50])
        pm.attrFieldSliderGrp(at='%s.penumbraAngle' % (self.light), columnWidth4= [100, 75, 175, 50])
        pm.attrFieldSliderGrp(at='%s.dropoff' % (self.light), columnWidth4= [100, 75, 175, 50])
        pm.attrEnumOptionMenu( label='Decay Rate', attribute='%s.decayRate' % (self.light) )
        
        pm.setParent(main_frame)
        pm.frameLayout(label= 'Shadows', collapsable= True)
        pm.attrColorSliderGrp( at='%s.shadowColor' % (self.light),
                              columnWidth4= [100, 75, 175, 50])
        self.check_box = pm.checkBox(label= 'Use Ray Trace Shadows',
                        changeCommand= pm.Callback(self.shadows))
        
        self.light_radius = pm.attrFieldSliderGrp( at='%s.lightRadius' % (self.light),
                                enable= False, columnWidth4= [100, 75, 175, 50])
        
        self.shadow_rays = pm.attrFieldSliderGrp( at='%s.shadowRays' % (self.light),
                                enable= False, columnWidth4= [100, 75, 175, 50])
        
        self.ray_depth = pm.attrFieldSliderGrp( at='%s.rayDepthLimit' % (self.light),
                                enable= False, columnWidth4= [100, 75, 175, 50])

        pm.setParent(main_frame)
        pm.frameLayout(label= 'Decay Regions', collapsable= True)
        # useDecayRegions
        decay_regions_value = pm.getAttr('%s.useDecayRegions' % (self.light))
        self.decay_check_box = pm.checkBox(label= 'Use Decay Regions',
                        value= decay_regions_value, 
                    changeCommand= pm.Callback(self.chane_decay_regions))

        pm.attrControlGrp(attribute= '%s.startDistance1' % (self.light))
        pm.attrControlGrp(attribute= '%s.endDistance1' % (self.light))

        pm.attrControlGrp(attribute= '%s.startDistance2' % (self.light))
        pm.attrControlGrp(attribute= '%s.endDistance2' % (self.light))

        pm.attrControlGrp(attribute= '%s.startDistance3' % (self.light))
        pm.attrControlGrp(attribute= '%s.endDistance3' % (self.light))
       
        pm.setParent(main_frame)
        pm.rowColumnLayout(numberOfColumns= 2, columnWidth= [200, 200])
        pm.button(label= 'Select Light', width= 200, command= pm.Callback(self.select))
        pm.button(label= 'Save Preset', width= 200, command= pm.Callback(self.preset))
        pm.button(label= 'Hide', command= pm.Callback(self.hide))
        pm.button(label= 'Show',  command= pm.Callback(self.show))
        return self.main_layout
def placeHighLight(*args):
    ### UI setup 
    global UI_name
    UI_name = [ 'txtBtn_light', 'txtBtn_camera', 'txtBtn_object', 'txtBtn_HLitPoint', 'btn_placeHLit', 'chk_interaction' ]
    
    if pm.window( 'winPlaceHLit', exists=True ):
        pm.deleteUI( 'winPlaceHLit', window=True )
        
    ui_layout['window'] = pm.window( 'winPlaceHLit', title='Place Highlight', sizeable=False, h=100, w=250 )
    ui_layout['mainLayout'] = pm.columnLayout( columnAlign='left', columnAttach=['left', 0] )
    
    #// get active camera
    activeViewCamera = getActiveCam()
    
    '''loc_light_probe = pm.createNode('locator', name='light_probe')
    pm.lockNode(loc_light_probe, lock=False)'''

    #// sub layout
    #// sub1
    ui_layout['ui_sub1'] = pm.rowLayout(nc=2, cw=[(1, 210), (2, 40)], p=ui_layout['mainLayout'] )
    pm.textFieldButtonGrp( UI_name[0], label='Light: ', text='', buttonLabel='Pick',editable=False, buttonCommand='pickLit()', cw=[(1,50), (2,120), (3,40)], p=ui_layout['ui_sub1'] )
    pm.button( 'btn_sel_light' ,label='Sel', command=pm.Callback( doSelItem, UI_name[0] ), p=ui_layout['ui_sub1'] )
    
    #// sub2
    ui_layout['ui_sub2'] = pm.rowLayout(nc=2, cw=[(1, 210), (2, 40)], p=ui_layout['mainLayout'] )
    pm.textFieldButtonGrp( UI_name[1], label='Camera: ', text=activeViewCamera, buttonLabel='Pick', editable=False, buttonCommand='pickCam()', cw=[(1,50), (2,120), (3,40)], p=ui_layout['ui_sub2'] )
    pm.button( 'btn_sel_camera' ,label='Sel', command=pm.Callback( doSelItem, UI_name[1] ), p=ui_layout['ui_sub2'] )
    
    #// sub3
    ui_layout['ui_sub3'] = pm.rowLayout(nc=2, cw=[(1, 210), (2, 40)], p=ui_layout['mainLayout'] )
    pm.textFieldButtonGrp( UI_name[2], label='Object: ', text='', buttonLabel='Pick', editable=False, buttonCommand='pickTgtObj()', cw=[(1,50), (2,120), (3,40)], p=ui_layout['ui_sub3'] )
    pm.button( 'btn_sel_obj' ,label='Sel', command=pm.Callback( doSelItem, UI_name[2] ), p=ui_layout['ui_sub3'] )
    
    #// sub4
    ui_layout['ui_sub4'] = pm.rowLayout(nc=2, cw=[(1, 210), (2, 40)], p=ui_layout['mainLayout'] )    
    pm.textFieldButtonGrp( UI_name[3], label='Point: ', text='', buttonLabel='Pick', editable=False, buttonCommand='pickHLitPt()', cw=[(1,50), (2,120), (3,40)], p=ui_layout['ui_sub4'] )
    pm.button( 'btn_sel_point' ,label='Sel', command=pm.Callback( doSelItem, UI_name[3] ), p=ui_layout['ui_sub4'] )
    
    #// sub5
    ui_layout['ui_sub5'] = pm.rowLayout(nc=2, cw=[(1, 70), (2, 50)], p=ui_layout['mainLayout'] )
    pm.button( UI_name[4] ,label='Place Light!', command='doPlaceHLight()', p=ui_layout['ui_sub5'] )    
    pm.checkBox( UI_name[5], label='interactive mode', onCommand=pm.Callback( doInteractionON ), offCommand=pm.Callback( doInteractionOFF ), p=ui_layout['ui_sub5'] )
    
    
    pm.showWindow( ui_layout['window'] )
    
    pm.spaceLocator( name='light_probe' )
    pm.lockNode( 'light_probe', lock=True )
    pm.textFieldButtonGrp( 'txtBtn_HLitPoint', edit=True, text='light_probe' )
    
    #// clean make live and scriptJob after exit script
    pm.scriptJob( uiDeleted=[ ui_layout['window'], pm.Callback( flushScript ) ] )
Exemple #14
0
                    def checkbox_state(*args):
                        check_cnt = 0
                        while pm.checkBox('%s%s' % ('shotCheckBox', str(check_cnt)), ex=1):
                            check_cnt += 1

                        for k in range(0, check_cnt):
                            state = pm.checkBox('shotCheckBox%s' % str(k), q=1, v=1)
                            if not state:
                                pm.textField('%s%s' % (shot_num_name, str(k)), e=1, en=0)
                                pm.textField('%s%s' % (shot_name_name, str(k)), e=1, en=0)
                            else:
                                pm.textField('%s%s' % (shot_num_name, str(k)), e=1, en=1)
                                pm.textField('%s%s' % (shot_name_name, str(k)), e=1, en=1)
Exemple #15
0
 def __init_window__(self):
     self.window = pm.window(menuBar=False, widthHeight=[200, 100], title="PYMHUD by Daniel S�nchez Quir�s")
     self.columna = pm.columnLayout(adjustableColumn=True)
     # Name row
     self.row1 = pm.rowLayout(numberOfColumns=3, adjustableColumn=True, parent=self.columna)
     pm.text("Name:", al="left", parent=self.row1)
     self.nameQ = pm.textField(parent=self.row1)
     pm.checkBox(
         label="", parent=self.row1, offCommand=Callback(self.nameHud, False), onCommand=Callback(self.nameHud, True)
     )
     # Scene row
     self.row2 = pm.rowLayout(numberOfColumns=3, adjustableColumn=True, parent=self.columna)
     pm.text("Scene Name:", al="left")
     self.sceneNameQ = pm.textField(parent=self.row2)
     pm.checkBox(
         label="",
         parent=self.row2,
         offCommand=Callback(self.sceneHud, False),
         onCommand=Callback(self.sceneHud, True),
     )
     # Date row
     self.row3 = pm.rowLayout(numberOfColumns=3, adjustableColumn=True, parent=self.columna)
     pm.text("Date:", al="left")
     pm.checkBox(
         label="", parent=self.row3, offCommand=Callback(self.dateHud, False), onCommand=Callback(self.dateHud, True)
     )
     # rame counter row
     self.row4 = pm.rowLayout(numberOfColumns=3, adjustableColumn=True, parent=self.columna)
     pm.text("Frame Counter:", al="left")
     pm.checkBox(label="", parent=self.row4, offCommand=Callback(self.frameHud), onCommand=Callback(self.frameHud))
     pm.showWindow(self.window)
Exemple #16
0
def binMeshTranslatorOpts(parent, action, initialSettings, resultCallback):
    print "Parent", parent
    print "Action", action
    print "InitialSettings", initialSettings
    print "ResultCallback", resultCallback
    
    useTransform = True
    oneFilePerMesh = False
    createProxies = True
    proxyRes = 0.1
    exportDir = ""
    
    if initialSettings is not None and len(initialSettings) > 0:
        #oneFilePerMesh=0;createProxies=1;proxyRes=0.1;exportDir=;createProxies=1
        opts = initialSettings.split(";")
        for opt in opts:
            name, value = opt.split("=")
            if name == "oneFilePerMesh":
                oneFilePerMesh = int(value)
            if name == "createProxies":
                createProxies = int(value)
            if name == "useTransform":
                useTransform = int(value)
            if name == "proxyRes":
                proxyRes = float(proxyRes)
                
    if action == "post":
        print "post action"
        
        pm.setParent(parent)
        with pm.columnLayout(adj = True):
            pm.checkBox("MSH_OPTS_DOTRANSFORM", label = "Use Transform", v=useTransform)
            pm.checkBox("MSH_OPTS_ONEFILE", label = "One File Per Mesh", v=oneFilePerMesh)
            pm.checkBox("MSH_OPTS_DOPROX", label = "Create ProxyFiles", v=createProxies)
            pm.floatFieldGrp("MSH_OPTS_PROXPERC", label="Proxy Resolution", v1 = proxyRes)
            #pm.textFieldGrp("MSH_OPTS_PATH", label="ExportDir:", text=exportDir) 
        
    if action == "query":
        resultOptions = ""
        print "Query action"
        oneFilePerMesh = pm.checkBox("MSH_OPTS_ONEFILE", query=True, v=True)
        resultOptions += "oneFilePerMesh={0}".format(int(oneFilePerMesh))
        doProx = pm.checkBox("MSH_OPTS_DOPROX", query=True, v=True)
        resultOptions += ";createProxies={0}".format(int(doProx))
        proxyRes = pm.floatFieldGrp("MSH_OPTS_PROXPERC", query=True, v1 = True)
        resultOptions += ";proxyRes={0}".format(proxyRes)
        #exportDir = pm.textFieldGrp("MSH_OPTS_PATH", query=True, text = True)
        #resultOptions += ";exportDir='{0}'".format(exportDir)
        doTransform = pm.checkBox("MSH_OPTS_DOTRANSFORM", query=True, v=True)
        resultOptions += ";useTransform={0}".format(int(doTransform))
        
        melCmd = '{0} "{1}"'.format(resultCallback,resultOptions)
        pm.mel.eval(melCmd)
        
    return 1
def toggleEnable(control, *args):
    
    # Get the state of the control
    state = pc.checkBox(uiWidgets[control], q=1, enable=1)
    
    if (state):
        # If enabled, we grey it
        state = pc.checkBox(uiWidgets[control], edit=1, enable=0)
        # Button update
        pc.button(uiWidgets[control+'Button'], edit=1, label='Unlock')
        
    else:
        state = pc.checkBox(uiWidgets[control], edit=1, enable=1)
        pc.button(uiWidgets[control+'Button'], edit=1, label='Lock')
Exemple #18
0
    def __init__(self, title, widthHeight, tabs_names, frameLayoutPerTab, collapseStyle=0, descr=''):
        super(Exporter, self).__init__(title, widthHeight, tabs_names, frameLayoutPerTab)
        self.localProject = os.environ[ 'MAYA_PROJECT' ]
        self.localUser=os.environ[ 'USER' ]
        self.path = os.path.join(self.localProject+ "/export/GEO")
        self.scene_name = cmds.file(q=True, sn=True, shn=True).split('.')[0]
        self.folder_path = os.path.join(self.path, 'OBJ', self.localUser, self.scene_name)
        self.type = 'OBJ'
        self.extension = 'obj'
        self.curFr=1001
        # GUI BUILDING #
        self.fl = self.frameLayouts[0][0].columnLayout
        col = pm.columnLayout(p=self.fl, h=self.wh[1]/2)
        flow_1=pm.flowLayout(p=col, w=self.wh[0])
        self.type_om = win.AW_optionMenu(label="File Type",
                                         options=['OBJ','ZBRUSH', 'MUDBOX', 'FBX', 'MB', 'MA', 'ALEMBIC'],
                                         parent=flow_1,
                                         cc=self._updateDirectory)
        self.autoCheck = pm.checkBox(l='Auto-detect Folder', p=flow_1, v=1)
        
        pm.flowLayout(p=col, w=self.wh[0])
        pm.text(l='Directory:')
        self.path_tf=pm.textField(w=self.wh[0]/1.3,cc=self._update_path_tf)
        pm.button(label='Browse',w=80, c=self._browser, bgc=self.col_fls[1])
        
        self.path_tf.setText(self.folder_path)

        flow_3 = pm.flowLayout(w=self.wh[0], p=col)
        self.combined_cb = pm.checkBox(l='Export Per Object', v=1, cc=self._change_combined_cb, p=flow_3)
        pm.text(l='Combined Name:',p=flow_3,w=200)
        self.combined_tf = pm.textField(tx='', p=flow_3,w=300, editable=False)
        
        flow_4 = pm.flowLayout(w=self.wh[0],p=col)
        self.framesCheck = pm.checkBox(l='Frame Range', w=200,p=flow_4, v=0, cc=self._framesCallback)
        self.fr_st = pm.textField(editable=False,w=100,tx=str(int(pm.playbackOptions(ast=True, q=True))),p=flow_4)
        self.fr_end = pm.textField(editable=False,w=100,tx=str(int(pm.playbackOptions(aet=True, q=True))),p=flow_4)
        
        pm.text(l='\n', p=col)
        flow_col = pm.flowLayout(p=col, w=self.wh[0])
        col_1 = pm.columnLayout(p=flow_col, w=self.wh[0]/2)
        col_2 = pm.columnLayout(p=flow_col, w=self.wh[0]/2)
        self.export_btn = pm.button(label='Export', bgc=self.col_fls[4], c=self._export, p=col_1, w=self.wh[0]/4)
        
        flow_5 = pm.flowLayout(w=self.wh[0],p=col_2)
        self.recursiveCheck = pm.checkBox(l='Check all folders inside', v=1, p=flow_5)
        self.list_btn = pm.button(label='List Files in Directory', bgc=self.col_fls[5], c=partial(self._getDirectoryFiles,True), p=flow_5, w=self.wh[0]/4)
        
        self.import_btn = pm.button(label='Import Directory', bgc=self.col_fls[5], c=self._customImport, p=col_2, w=self.wh[0]/2.5)
        pm.text(l='\n',p=col)
        pm.button(label='Swap Namespace with Name', bgc=self.col_fls[6], c=self._swapNamespace, p=col_2,w=self.wh[0]/2.5)
 def create_ui(self):
     self.layout = pm.columnLayout(adjustableColumn= True)
     self.root_joint = pm.checkBox(label='Create Root Joint')
     self.export = pm.checkBox(label='Export When Finished')
     self.delete = pm.checkBox(label='Delete When Finished')
     self.visibility = pm.checkBox(label='Visibility State', value= 1)
     self.start_end_fields = pm.intFieldGrp( numberOfFields=2,
                     label=u'Start & End Frames', value1=0, value2=100,
                     columnWidth3= [105,90,90])
     pm.text(label= '')
     pm.button(label= 'Bake Simulation', height= 190,
                         command= pm.Callback(self.bake_simulation))
     
     return self.layout
Exemple #20
0
    def _buildPrefUi(self):
       
        # delete previous UI
        if pmc.window(self.uiPrefName, exists=True):
            pmc.deleteUI(self.uiPrefName, window=True)
     
     
        # create UI
        self.uiPref['win']          = pmc.window(self.uiPrefName, title=self.uiPrefTitle, menuBar=True, width=300, height=200, sizeable=False)

        self.uiPref['mainLay']      = pmc.columnLayout()
        self.uiPref['titleTxt']     = pmc.text(label='Preferences', backgroundColor=[0,0,0], enableBackground=True, height=20, width=200)
       
        self.uiPref['optLay']       = pmc.rowLayout(numberOfColumns=2, columnWidth2=(125, 75))
        self.uiPref['optTxt']       = pmc.text(label='Format filter')
       
        self.uiPref['chkLay']       = pmc.columnLayout()
        
        v=False
        if '.obj' in self.filtersList:
            v=True
        self.uiPref['objChb']       = pmc.checkBox(label='Obj', value=v)
        v=False
        if '.ma' in self.filtersList:
            v=True
        self.uiPref['maChb']        = pmc.checkBox(label='Ma', value=v)
        v=False
        if '.mb' in self.filtersList:
            v=True
        self.uiPref['mbChb']        = pmc.checkBox(label='Mb', value=v)
        v=False
        if '.fbx' in self.filtersList:
            v=True
        self.uiPref['fbxChb']       = pmc.checkBox(label='Fbx', value=v)
        
        pmc.setParent('..')
        pmc.setParent('..')
        
        pmc.rowLayout(numberOfColumns=2, columnWidth2=(100, 100))
        self.uiPref['cancelBtn'] = pmc.button(label='Cancel', height=30, width=95)
        self.uiPref['saveBtn']   = pmc.button(label='Save',   height=30, width=95)
        
        
        # command
        self.uiPref['cancelBtn'].setCommand(pmc.Callback(self._deletePrefUi))
        self.uiPref['saveBtn'].setCommand(pmc.Callback(self._getNewFilter))
        
        
        # show main ui
        pmc.showWindow(self.uiPref['win'])
Exemple #21
0
def lcObjToolsUI(dockable=False, *args, **kwargs):
  ''' '''
  global prefix
  ci = 0 #color index iterator
  windowName = 'lcObjTools'
  shelfCommand = 'import lct.src.lcObjTools.lcObjTools as lcObj\nreload(lcObj)\nlcObj.lcObjToolsUI()'
  icon = basePath+'lcObjTools.png'
  winWidth  = 204
  winHeight = 158
  
  mainWindow = lcWindow(windowName=windowName, width=winWidth, height=winHeight, icon=icon, shelfCommand=shelfCommand, annotation=annotation, dockable=dockable, menuBar=True)
  mainWindow.create()

  #
  pm.columnLayout(prefix+'_columLayout_main')

  #
  pm.rowColumnLayout(nc=2, cw=([1,150], [2,50]) )
  pm.textField(prefix+'_textField_export_path', w=150)
  pm.button(prefix+'_button_browse_path', l='Browse', bgc=colorWheel.getColorRGB(ci), annotation='Choose an export directory', w=50, command=lambda *args: path.browsePathTextField(prefix+'_textField_export_path', "Wavefront Obj (*.obj)", 'Obj Export Location') )
  ci+=1
  pm.setParent(prefix+'_columLayout_main')

  #
  pm.checkBox(prefix+'_checkBox_export_indi', l='Export Individual', v=False)
  pm.checkBox(prefix+'_checkBox_use_smooth', l='Use Smooth Preview', v=True)

  #
  pm.rowColumnLayout(nc=2, cw=([1,100], [2,100]) )
  pm.textField(prefix+'_textField_prefix', w=100)
  pm.text(l='   Prefix_', al='left')
  pm.setParent(prefix+'_columLayout_main')

  #
  pm.rowColumnLayout(nc=2, cw=([1,169], [2,31]) )
  pm.columnLayout(w=169)
  pm.button(prefix+'_button_export', l='Export OBJ', bgc=colorWheel.getColorRGB(ci), annotation='Export the selected geometry', w=168, h=30, command=lambda *args: lcObj_exportObjs() )
  ci+=1
  pm.button(prefix+'_button_Import', l='Import Multiple OBJs', bgc=colorWheel.getColorRGB(ci), annotation='Clean import more than one obj', w=168, h=20, command=lambda *args: lcObj_importMultiple() )
  ci+=1
  pm.setParent('..')
  pm.columnLayout(w=31)
  pm.iconTextButton(prefix+'_button_open_folder', style='iconOnly', image=iconBasePath+'folder_30x50.png', annotation='Open the export folder', w=30, h=50, command=lambda *args: path.openFilePath(pm.textField(prefix+'_textField_export_path', query=True, text=True) ) )
  ci+=1
  
  #
  mainWindow.show()
  
  plugin.reloadPlugin(plugin='objExport', autoload=True)
	def __init__(self, lightTransform, lightType, lightShape):
		self.lightLinked = pm.lightlink(query=True, shapes=False, light=lightShape)
		self.lightTransform = lightTransform
		self.lightType = lightType
		self.lightShape = lightShape

		self.lightFrame_layout = pm.frameLayout(l='{0} ({1})'.format(lightTransform, lightType), cl=True, cll=True, w=marginWidth, bgc=frameColor, ann="Settings for {0}".format(lightTransform), p=lights_layout)
		self.indivLight_layout = pm.columnLayout()

		self.warningCheck()

		pm.text(l='', h=5)
		self.nameField = pm.textFieldGrp(l='Name', text=lightTransform, cw=[2, 150], cc=self.nameChange, fcc=True)

		pm.rowColumnLayout(nc=2)
		pm.text(l='Basic Settings', w=75, al='left', en=False)
		pm.separator(w=marginWidth-75, h=14)
		pm.setParent(self.indivLight_layout)

		pm.text(l='', h=2)

		pm.rowColumnLayout(nc=5)
		pm.button(l='Select', w=(marginWidth/3)-5, al='center', bgc=primary_componentColor, c=self.selectLight)
		pm.text(l='') # GUI SPACER
		pm.button(l='Delete', w=(marginWidth/3)-5, al='center', bgc=primary_componentColor, c=self.deleteLight)
		pm.text(l='') # GUI SPACER
		pm.button(l='Duplicate', w=(marginWidth/3)-5, al='center', bgc=primary_componentColor, c=self.duplicateLight)
		pm.setParent(self.indivLight_layout)
		pm.text(l='', h=2) # GUI SPACER

		pm.attrColorSliderGrp(at=lightShape+'.color', cw=[[2, 75], [3, 120]], sb=True)
		pm.attrFieldSliderGrp(at=lightShape+'.intensity', cw=[[2, 75], [3, 120]], hmb=False)

		# pm.text(l='', h=3) # GUI SPACER
		pm.rowColumnLayout(nc=2)
		pm.text(l='', w=142) # GUI SPACER
		self.illDefault_box = pm.checkBox(l='Illuminates by Default', v=self.check_illumByDefault(), cc=self.illumDefaultCommand)
		pm.setParent(self.indivLight_layout)

		pm.rowColumnLayout(nc=3)
		pm.text(l='', w=142) # GUI SPACER
		emitDif_box = pm.checkBox(l='Emit Diffuse', w=120)
		emitSpec_box = pm.checkBox(l='Emit Specular')
		pm.setParent(self.indivLight_layout)
		pm.connectControl(emitDif_box, lightShape+'.emitDiffuse')
		pm.connectControl(emitSpec_box, lightShape+'.emitSpecular')

		pm.setParent(lights_layout)
Exemple #23
0
	def __init__(self, baseUi, parent):
		BaseUi.__init__(self, parent)
		self.uiparent = parent
		self.baseUi = baseUi
		self.tmpJnts = []
		self.defaultAxis = 'y'

		#ui
		try:
			pm.deleteUI(self.rigCol)
		except: pass

		with pm.columnLayout(adj=True, rs=3, parent=self.uiparent) as self.rigCol:
			with pm.rowColumnLayout(nc=2, co=[(1, 'left', 155), (2, 'left', 5)]):
				pm.text(l='axis')
				with pm.optionMenu(w=60) as self.axisMenu:
					pm.menuItem(l='x')
					pm.menuItem(l='y')
					pm.menuItem(l='z')
			with pm.columnLayout(adj=True, rs=2, co=['left', 165]):	
				self.ribbonChkBox = pm.checkBox(l='Ribbon Lo/Hi', v=False)
			with pm.rowColumnLayout(nc=3, co=[(1, 'left', 30), (2, 'left', 5), (3, 'left', 5)]):
				pm.text(l='tmpJnts')
				self.tmpJntsTxtFld = pm.textField(w=230, ed=False)
				self.loadTmpJntButt = pm.button(l='<<', c=pm.Callback(self.loadTmpJnts))

			

		self.axisMenu.setValue(self.defaultAxis)
		self.baseUi.clearElemSideTxtFld()
def multi_MentalRaySettings():
	# Mental Ray Settings
	pm.rowColumnLayout(nc=2)
	pm.text(l='Mental Ray Settings', w=106, al='left', en=False)
	pm.separator(w=marginWidth-106, h=14)
	pm.setParent(multiLight_layout)

	pm.rowColumnLayout(nc=2)
	pm.text(l='', w=142) # GUI SPACER
	multi_MrAreaLight_box = pm.checkBox('hp3dUseShapeCheckbox', l='Use Light Shape', cc=fun.partial(multi_checkboxChange, '.areaLight', 'area & spot', 'hp3dUseShapeCheckbox'))
	pm.setParent(multiLight_layout)

	pm.rowColumnLayout(nc=3)
	pm.text(l='Type', w=140, al='right')
	pm.text(l='', w=3)
	multi_areaType_menu = pm.optionMenu('hp3dAreaTypeMenu', bgc=primary_componentColor, cc=fun.partial(multi_menuChange, '.areaType', 'area & spot', 'hp3dAreaTypeMenu'))
	pm.menuItem(l='Rectangle', da=0)
	pm.menuItem(l='Disc', da=1)
	pm.menuItem(l='Sphere', da=2)
	pm.menuItem(l='Cylinder', da=3)
	pm.menuItem(l='Custom', da=4)
	pm.setParent(multiLight_layout)

	multi_highSamples = pm.intFieldGrp('hp3dHighSamplesField', numberOfFields=1, label='High Samples', v1=8, cc=fun.partial(multi_samplesChange, 'highSamp'))
	multi_highSampLimit = pm.intFieldGrp('hp3dHighSampleLimitField', numberOfFields=1, label='High Sample Limit', v1=1, cc=fun.partial(multi_samplesChange, 'highSampLimit'))
	multi_lowSamples = pm.intFieldGrp('hp3dLowSamplesField', numberOfFields=1, label='Low Samples', v1=1, cc=fun.partial(multi_samplesChange, 'lowSamp'))
	pm.setParent(multiLight_layout)
Exemple #25
0
def lcBake_convert_lightmap(bakeSetListDropdown, cameraListDropdown, *args, **kwargs):
  ''' '''
  numItems = bakeSetListDropdown.getNumberOfItems()
  if numItems > 0:
    currentBakeSet = bakeSetListDropdown.getValue()
    if currentBakeSet:
      currentCamera = cameraListDropdown.getValue()
      outputDirectory = pm.textField(prefix+'_textField_texture_path', query=True, text=True)      
      if os.path.exists(outputDirectory):
        shadows = pm.checkBox(prefix+'_checkBox_shadows', query=True, value=True)
        
        if pm.control('bakeWindow', exists = True):
          pm.deleteUI('bakeWindow')          
        bakeWindow = pm.window('bakeWindow', t='Batch Bake', widthHeight=[100, 100], rtf=True, mnb=False, mxb=False, s=False)
        pm.columnLayout()
        pm.text(l='')
        pm.text(l='')
        pm.text(l='          Bake In Progress          ')
        pm.text(l='                  ......        ')
        pm.text(l='')
        pm.text(l='')
        bakeWindow.show()
        pm.refresh()
        #pm.pause(seconds=10)
        
        convertString = bake.convertLightmap(currentBakeSet, currentCamera, outputDirectory, shadows)
        
        print('Convert Command: {0}'.format(convertString) )
                
        pm.deleteUI('bakeWindow')    
        
        pm.select(clear=True)
      else:
        pm.warning('Path not found: {0}'.format(outputDirectory) )
Exemple #26
0
 def create(self):
    
     self.checkBox = pm.checkBox(label = 'Modify Weighting', onCommand = pm.Callback(self.editFields), offCommand = pm.Callback(self.editFields) )
     self.antiField = pm.intFieldGrp( numberOfFields=2, label='Antialias/Noise Quality', extraLabel = 'Weight %' , value2 = 45 , enable1 = False ,
                                     enable2 = False,  changeCommand=pm.Callback(self.updateTotal))
     self.compField = pm.intFieldGrp( numberOfFields=2, label='Composition/Focal Length', extraLabel = 'Weight %' , value2 = 45 , enable1 = False ,
                                     enable2 = False ,changeCommand=pm.Callback(self.updateTotal))
     self.proField = pm.intFieldGrp( numberOfFields=2, label='Professionalism', extraLabel = 'Weight %' ,value2 = 10 ,enable1 = False ,
                                    enable2 = False, changeCommand=pm.Callback(self.updateTotal))
     self.lateField = pm.intFieldGrp( numberOfFields=1, label='Late Deduction' , changeCommand=pm.Callback(self.updateTotal))
     self.totalField = pm.intFieldGrp( numberOfFields=1, label='Total Grade',enable1 = False, changeCommand=pm.Callback(self.updateTotal))
     
     # attaching the controls
     pm.formLayout( self.layout, edit=1, attachForm=[[self.checkBox, "left", 140], [self.checkBox, "top", 5]])
     pm.formLayout( self.layout, edit=1, attachOppositeControl=[[self.antiField ,"top", 40, self.checkBox], [self.antiField, "right", 10, self.checkBox]])
     pm.formLayout( self.layout, edit=1, attachOppositeControl=[[self.compField ,"top", 40, self.antiField], [self.compField, "right", 10, self.antiField]])
     pm.formLayout( self.layout, edit=1, attachOppositeControl=[[self.proField ,"top", 40, self.compField], [self.proField, "right", 10, self.compField]])
     pm.formLayout( self.layout, edit=1, attachOppositeControl=[[self.lateField ,"top", 40, self.proField], [self.lateField, "left", 0, self.proField]])
     pm.formLayout( self.layout, edit=1, attachOppositeControl=[[self.totalField ,"top", 40, self.lateField], [self.totalField, "left", 0, self.lateField]])
    
     pm.setParent(self.columnLayout)
     pm.text(label = '')
     self.warning = pm.text(label='')
     pm.text(label = '')
     #pm.button( label = 'Output Grade and Comment' , width = 480)
     return None 
Exemple #27
0
 def create(self):
      
      
      self.main_layout = pm.columnLayout(adjustableColumn= True, width= 400)
     
      main_frame = pm.frameLayout( label='%s' % (self.light), collapsable= True)
      pm.frameLayout( label='Light Attributes', collapsable= True)
      pm.attrColorSliderGrp( at='%s.color' % (self.light), columnWidth4= [100, 75, 175, 50])
      pm.attrFieldSliderGrp( at='%s.intensity' % (self.light), columnWidth4= [100, 75, 175, 50])
      pm.attrFieldSliderGrp(at='%s.ambientShade' % (self.light), columnWidth4= [100, 75, 175, 50])
     
      
      pm.setParent(main_frame)
      pm.frameLayout(label= 'Shadows', collapsable= True)
      pm.attrColorSliderGrp( at='%s.shadowColor' % (self.light),
                            columnWidth4= [100, 75, 175, 50])
      self.check_box = pm.checkBox(label= 'Use Ray Trace Shadows',
                      changeCommand= pm.Callback(self.shadows))
      
      self.shadow_radius = pm.attrFieldSliderGrp( at='%s.shadowRadius' %(self.light),
                              enable= False, columnWidth4= [100, 75, 175, 50])
      
      self.shadow_rays = pm.attrFieldSliderGrp( at='%s.shadowRays' % (self.light),
                              enable= False, columnWidth4= [100, 75, 175, 50])
      
      self.ray_depth = pm.attrFieldSliderGrp( at='%s.rayDepthLimit' % (self.light),
                              enable= False, columnWidth4= [100, 75, 175, 50])
     
      pm.setParent(main_frame)
      pm.rowColumnLayout(numberOfColumns= 2, columnWidth= [200, 200])
      pm.button(label= 'Select Light', width= 200, command= pm.Callback(self.select))
      pm.button(label= 'Delete UI', width= 200, command= pm.Callback(self.delete))
      pm.button(label= 'Hide', command= pm.Callback(self.hide))
      pm.button(label= 'Show',  command= pm.Callback(self.show))
      return self.main_layout
Exemple #28
0
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
Exemple #29
0
def MakeCheckboxStandalone(boxLabel, initialValue, extraLabel=None, changeCommand=None, 
                           leftColumnWidth=__LEFT_COLUMN_WIDTH__, annotation=None, switchLabels=False):
    """
    Creates & returns a PyMel checkbox that is not specifically linked to an attribute.
    
    :param boxLabel: string, label to right of checkbox (or to left of checkbox, with colon, if extraLabel is also defined).
    :param initialValue: bool, initial value.
    :param extraLabel: string, label to the right of the checkbox if boxLabel is also defined.  
    :param changeCommand: bound method to be executd when checkbox value changes, or None.
    :param leftColumnWidth: float, width of left-hand label.
    :param annotation: toolTip annotation, or None. 
    :param switchLabels: True = extraLabel to left (with colon) & boxLabel to right, False = vice versa.
    """
    rowLayout = MakeRowLayout(2 if(extraLabel is not None) else 1, 
                              leftColumnWidth=leftColumnWidth + __CHECKBOX_OFFSET__, 
                              rightColumnWidth=__MIDDLE_COLUMN_WIDTH__ + __RIGHT_COLUMN_WIDTH__)
    
    if(extraLabel is not None):
        if(switchLabels) : boxLabel, extraLabel = extraLabel, boxLabel
        if(boxLabel): boxLabel += ':'
        MakeText(boxLabel, annotation)
        boxLabel = extraLabel
    
    checkbox = pm.checkBox(label=boxLabel, value=initialValue)
    if(changeCommand is not None):
        checkbox.changeCommand(changeCommand)
    if(annotation is not None):
        checkbox.setAnnotation(annotation)
    
    SetAsChildLayout(rowLayout)
    
    return (rowLayout, checkbox)
def multi_checkboxChange(attr, lightType, component, *args):
	value = pm.checkBox(component, q=True, v=True)
	sel_lights = pm.ls(sl=True, lights=True, dag=True)
	new_list = sortBy_type(sel_lights, lightType)
	
	for each in new_list:
		pm.setAttr(each+attr, value)
Exemple #31
0
def uvmp_snapshot_window_update(*args, **kwargs):
    '''
    update the snapshot window on user interaction
    '''

    checkBoxState = pm.checkBox(prefix + '_custom_snapshot_size',
                                query=True,
                                value=True)

    # toggle input based on checkbox
    pm.intField(prefix + '_snapshot_width', edit=True, enable=checkBoxState)
    pm.intField(prefix + '_snapshot_height', edit=True, enable=checkBoxState)
    pm.optionMenu(prefix + '_optionMenu_width',
                  edit=True,
                  enable=(not checkBoxState))
    pm.optionMenu(prefix + '_optionMenu_height',
                  edit=True,
                  enable=(not checkBoxState))

    if not checkBoxState:
        # update custom fields with dropdown values
        width = int(
            pm.optionMenu(prefix + '_optionMenu_width', query=True,
                          value=True))
        height = int(
            pm.optionMenu(prefix + '_optionMenu_height',
                          query=True,
                          value=True))
        pm.intField(prefix + '_snapshot_width', edit=True, value=width)
        pm.intField(prefix + '_snapshot_height', edit=True, value=height)

    selWidth = pm.optionMenu(prefix + '_optionMenu_width',
                             query=True,
                             select=True)
    selHeight = pm.optionMenu(prefix + '_optionMenu_height',
                              query=True,
                              select=True)
    snapWidth = pm.intField(prefix + '_snapshot_width', query=True, value=True)
    snapHeight = pm.intField(prefix + '_snapshot_height',
                             query=True,
                             value=True)

    lct_cfg.set('lcUVToolsSnapshotCustom', checkBoxState)
    lct_cfg.set('lcUVToolsSnapshotSelHeight', selHeight)
    lct_cfg.set('lcUVToolsSnapshotSelWidth', selWidth)
    lct_cfg.set('lcUVToolsSnapshotCustomHeight', snapHeight)
    lct_cfg.set('lcUVToolsSnapshotCustomWidth', snapWidth)
def lcBake_convert_lightmap(bakeSetListDropdown, cameraListDropdown, *args,
                            **kwargs):
    ''' '''
    numItems = bakeSetListDropdown.getNumberOfItems()
    if numItems > 0:
        currentBakeSet = bakeSetListDropdown.getValue()
        if currentBakeSet:
            currentCamera = cameraListDropdown.getValue()
            outputDirectory = pm.textField(prefix + '_textField_texture_path',
                                           query=True,
                                           text=True)
            if os.path.exists(outputDirectory):
                shadows = pm.checkBox(prefix + '_checkBox_shadows',
                                      query=True,
                                      value=True)

                if pm.control('bakeWindow', exists=True):
                    pm.deleteUI('bakeWindow')
                bakeWindow = pm.window('bakeWindow',
                                       t='Batch Bake',
                                       widthHeight=[100, 100],
                                       rtf=True,
                                       mnb=False,
                                       mxb=False,
                                       s=False)
                pm.columnLayout()
                pm.text(l='')
                pm.text(l='')
                pm.text(l='          Bake In Progress          ')
                pm.text(l='                  ......        ')
                pm.text(l='')
                pm.text(l='')
                bakeWindow.show()
                pm.refresh()
                #pm.pause(seconds=10)

                convertString = bake.convertLightmap(currentBakeSet,
                                                     currentCamera,
                                                     outputDirectory, shadows)

                print('Convert Command: {0}'.format(convertString))

                pm.deleteUI('bakeWindow')

                pm.select(clear=True)
            else:
                pm.warning('Path not found: {0}'.format(outputDirectory))
def makeReversefoot(jntnamelist, sfx, sfx_r, mirror):
    locatorslist = {}
    i = 0
    jntnamelist = jntnamelist
    revjntnamelist = []

    for jnt in jntnamelist:
        locator = pm.ls(jnt)[0]
        pos = locator.getTranslation()
        if jnt not in locatorslist:
            locatorslist[str(0 + i) + jnt] = pos
        pm.delete(jnt)
        i += 1

    ##Make joints at each locators position
    for k in sorted(locatorslist.items())[0:-1]:
        pm.joint(n=str(k[0]), p=locatorslist[k[0]])

    ##Make Heel joint
    heel = pm.joint(n=jntnamelist[5] + "1",
                    p=locatorslist["5" + jntnamelist[5]])
    pm.parent(heel, w=True)

    ##Make Reverse joints chain
    obj = pm.ls(jntnamelist[2], type="joint")
    newandle = pm.duplicate(obj, rc=True)
    pm.parent(newandle, w=True)
    toe = pm.reroot(jntnamelist[4] + "1")
    pm.parent(jntnamelist[4] + "1", jntnamelist[5] + "1")
    rev = pm.ls(jntnamelist[5] + "1", dag=True)

    ##Rename reverse joints
    for jnt in rev:
        revjnt = pm.rename(jnt, "Rev_" + str(jnt[0:-1]))
        revjntnamelist.append(revjnt)

    ##Look wheather the checkbox is on or off
    mirrorEnable = pm.checkBox(mirror, query=True, v=True)

    ##Make Iksolver(if mirror is on, mirror joint chain)
    if mirrorEnable == True:
        mirrorJnt(revjntnamelist, sfx, sfx_r)
        applyIK(sfx)
        applyIK(sfx_r)
    else:
        sfx = ""
        applyIK(sfx)
Exemple #34
0
def get_user_selected_options():
    """
    Get the user-selected options from the Mimic UI and output a complete
    UserOptions tuple. Queries checkboxes only!
    :return:
    """
    values = []
    # Get user-selected options from UI
    for i in range(len(_fields)):
        field = _fields[i]
        checkbox_name = format_field_name_for_checkbox(field)
        checkbox_value = pm.checkBox(checkbox_name,
                                     value=True,
                                     query=True)
        values.append(checkbox_value)
    # Create a new tuple from the above
    return UserOptions(*values)
Exemple #35
0
    def generate_repr_of_scene_caller(cls):
        """helper method to call Reference.generate_repr_of_scene() with data
        coming from UI
        """
        generate_gpu = 1 if pm.checkBoxGrp('generate_repr_types_checkbox_grp', q=1, v1=1) else 0
        generate_ass = 1 if pm.checkBoxGrp('generate_repr_types_checkbox_grp', q=1, v2=1) else 0
        generate_rs = 1 if pm.checkBoxGrp('generate_repr_types_checkbox_grp', q=1, v3=1) else 0

        skip_existing = \
            pm.checkBox('generate_repr_skip_existing_checkBox', q=1, v=1)

        cls.generate_repr_of_scene(
            generate_gpu,
            generate_ass,
            generate_rs,
            skip_existing
        )
Exemple #36
0
def orientJoints(*args):
    selectedJoints = pm.ls(selection = True, type = 'joint')
    allJoints = []
    orientDescendents = pm.checkBox(orientChildrenBox, query = True, value = True)
    for joint in selectedJoints:
        allJoints.append(joint)
        if orientDescendents:
            descendents = pm.listRelatives(joint, allDescendents = True)
            allJoints = allJoints + descendents

    for joint in allJoints:
        allChildren = list(reversed(pm.listRelatives(joint, children = True)))
        if len(allChildren) == 0:
            aimConstraintParentTowardsChild(joint, pm.listRelatives(joint, parent = True), True)
        elif len(allChildren) >= 1:
            aimConstraintParentTowardsChild(joint, allChildren, False)

    pm.select(selectedJoints, r = True)
Exemple #37
0
 def show(self):
     window = pm.window(self.windowName,title=self.windowName)
     with window:
         with pm.frameLayout(bs='in',label=u'頂点を円上に整列'):
             with pm.frameLayout(bs='in', label=u'射影平面'):
                 self.rc1 = pm.radioCollection()
                 with pm.rowLayout(numberOfColumns=3):
                     pm.radioButton('X', label=u'YZ', select=True)
                     pm.radioButton('Y', label=u'XZ')
                     pm.radioButton('Z', label=u'XY')
             with pm.frameLayout(bs='in', label=u'円の半径'):
                 self.rc2 = pm.radioCollection()
                 with pm.rowLayout(numberOfColumns=3):
                     pm.radioButton('Min', label=u'最短値', select=True)
                     pm.radioButton('Cen', label=u'中間値')
                     pm.radioButton('Max', label=u'最長値')
                     self.checkBox = pm.checkBox(label = u'ワールド軸 (off / ローカル)', value=True)
                     pm.button(label='Submit',width=40,height=32,command=pm.Callback(self.callBack))
Exemple #38
0
    def generate_repr_of_all_references_caller(cls):
        """a helper method that calls
        References.generate_repr_of_all_references() with paremeters from the
        UI
        """
        generate_gpu = pm.checkBoxGrp('generate_repr_types_checkbox_grp', q=1, v1=1)
        generate_ass = pm.checkBoxGrp('generate_repr_types_checkbox_grp', q=1, v2=1)
        generate_rs = pm.checkBoxGrp('generate_repr_types_checkbox_grp', q=1, v3=1)

        skip_existing = \
            pm.checkBox('generate_repr_skip_existing_checkBox', q=1, v=1)

        cls.generate_repr_of_all_references(
            generate_gpu,
            generate_ass,
            generate_rs,
            skip_existing
        )
Exemple #39
0
def prompt_ui():
	win = pm.window(title="Create Geosphere", width=200)

	layout = pm.formLayout()

	rlayout = pm.rowLayout(parent=layout, numberOfColumns=2)
	iter_field_lbl = pm.text("Iterations", parent=rlayout)
	iter_field = pm.intField(min=1, max=5, step=1, v=1, parent=rlayout)

	quads_chbox = pm.checkBox(label="Create Quads?", v=False, parent=layout)

	def on_ok(*args):
		create(quads_chbox.getValue(), iter_field.getValue())
		win.delete()

	ok_button = pm.button(label="Create mah Geosphere!", command=on_ok, parent=layout)

	layout.redistribute()
	win.show()
Exemple #40
0
def uvmp_rotate(angle=0, *args, **kwargs):
    ''' rotate uv's based on an angle with aspect ratio correction '''
    shell = pm.checkBox(prefix + '_checkBox_shell', q=True, v=True)

    sel = pm.ls(sl=True)
    if sel:
        uvs = pm.polyListComponentConversion(sel, toUV=True)
        pm.select(uvs, replace=True)
        try:
            texDim = lcTexture.TextureEditor().getTextureDimensions()
            if shell:
                uvCenter = lcGeometry.UV().getBoundingBoxCenter(shell=True)
                lcGeometry.UV().rotateShell(angle, uvCenter, texDim)
            else:
                uvCenter = lcGeometry.UV().getBoundingBoxCenter()
                lcGeometry.UV().rotate(angle, uvCenter, texDim)
        except:
            lcUtility.Utility.lc_print_exception('something went wrong')
        finally:
            pm.select(sel, replace=True)
Exemple #41
0
def createTrailUv(poly,*args):
    sel = pm.ls(sl=1,type='transform')
    if sel:
        poly=sel[0]
    if poly == '':
        pm.warning('No trail selected / found')
        return
    
    startEdge  = pm.ls(poly+ '.e[0]',fl=1)[0]
    
    edges = pm.polySelectSp(startEdge,ring=1)
    pm.select(cl=1)
    ringEdges = pm.ls(edges,fl=1)
    
    leftSideVtx = []
    rightSideVtx = []

    '''
    for edge in ringEdges[1:-1]:
        sew = pm.polyMapSewMove(edge,nf=10,lps=0, ch=1)
        #pm.delete(sew)
    pm.select(poly)
    norm  = pm.polyNormalizeUV (normalizeType=1 ,preserveAspectRatio=0)
    #pm.delete(norm)
    '''
    for edge in ringEdges:
        vtxs = edge.connectedVertices()
        leftSideVtx.append(vtxs[0])
        rightSideVtx.append(vtxs[1])

    leftLength = getTotalEdgesLength(leftSideVtx)
    #print leftLength
    rightLength = getTotalEdgesLength(rightSideVtx)
    #print rightLength
    
    uvDistorted = pm.checkBox('cbUV',q=1,v=1)

    setPosUv(leftSideVtx,leftLength,'left',uvDistorted)
    setPosUv(rightSideVtx,rightLength,'right',uvDistorted)

    pm.select(poly)
Exemple #42
0
def uvmp_scale(uvw=[1, 1], *args, **kwargs):
    ''' commands for scaling uvs or uv shells '''
    shell = pm.checkBox(prefix + '_checkBox_shell', q=True, v=True)

    sel = pm.ls(sl=True)
    if sel:
        uvs = pm.polyListComponentConversion(sel, toUV=True)
        pm.select(uvs, replace=True)
        try:
            if shell:
                uvCenter = lcGeometry.UV().getBoundingBoxCenter(shell=True)
                lcGeometry.UV().scaleShell(uvw, uvCenter)
                lcGeometry.UV().grabShell(
                )  # not necessary to grab the shell, but makes for better visual feedback
            else:
                uvCenter = lcGeometry.UV().getBoundingBoxCenter()
                lcGeometry.UV().scale(uvw, uvCenter)
        except:
            lcUtility.Utility.lc_print_exception('something went wrong')
        finally:
            pm.select(sel, replace=True)
Exemple #43
0
    def setup_ui(self):
        with pm.verticalLayout():
            pm.separator(height=40, style="none")

            pm.checkBox(label='Setup General Hotkeys',
                        value=pm.optionVar.get(
                            HotkeyOptionsMenu.kSetupGeneralHotkeys, True),
                        changeCommand=self.set_option_var_general)

            pm.checkBox(label='Setup Animation Hotkeys',
                        value=pm.optionVar.get(
                            HotkeyOptionsMenu.kSetupAnimationHotkeys, True),
                        changeCommand=self.set_option_var_animation)

            pm.checkBox(label='Setup Modeling Hotkeys',
                        value=pm.optionVar.get(
                            HotkeyOptionsMenu.kSetupModelingHotkeys, True),
                        changeCommand=self.set_option_var_modeling)

            pm.checkBox(label='Setup Rigging Hotkeys',
                        value=pm.optionVar.get(
                            HotkeyOptionsMenu.kSetupRiggingHotkeys, True),
                        changeCommand=self.set_option_var_rigging)
Exemple #44
0
def attrBoolControlGrp(*args, **kwargs):
    attribute = kwargs.pop('attribute', kwargs.pop('a', None))
    assert attribute is not None, "You must passed an attribute"
    changeCommand = kwargs.pop('changeCommand', kwargs.pop('cc', None))
    if changeCommand:

        def cc(newVal):
            pm.setAttr(attribute, newVal)
            changeCommand(newVal)
    else:
        cc = lambda newVal: pm.setAttr(attribute, newVal)

    if kwargs.pop('edit', kwargs.pop('e', False)):
        ctrl = args[0]
        pm.checkBox(ctrl,
                    edit=True,
                    value=pm.getAttr(attribute),
                    changeCommand=cc)
        pm.scriptJob(parent=ctrl,
                     replacePrevious=True,
                     attributeChange=[
                         attribute, lambda: pm.checkBox(
                             ctrl, edit=True, value=pm.getAttr(attribute))
                     ])
    elif kwargs.pop('query', kwargs.pop('q', False)):
        # query
        pass
    else:
        # create
        labelText = kwargs.pop('label', None)
        if not labelText:
            labelText = pm.mel.interToUI(attribute.split('.')[-1])
        ctrl = args[0]
        pm.rowLayout(numberOfColumns=1,
                     columnWidth1=285,
                     columnAttach1='right')
        pm.checkBox(ctrl,
                    label=labelText,
                    value=pm.getAttr(attribute),
                    changeCommand=cc)
        pm.setParent('..')
        pm.scriptJob(parent=ctrl,
                     attributeChange=[
                         attribute, lambda: pm.checkBox(
                             ctrl, edit=True, value=pm.getAttr(attribute))
                     ])
        return ctrl
Exemple #45
0
 def create(self):
     '''
     # creates the actual ui
     '''
     self.layout = pm.rowColumnLayout(numberOfColumns=3,
                                      columnWidth=([1,
                                                    150], [2,
                                                           100], [3, 300]))
     self.checkbox = pm.checkBox(label='Apply Transforms')
     pm.button(label='Create Light',
               height=100,
               command=pm.Callback(self.create_light))
     pm.scrollField(width=300,
                    height=100,
                    wordWrap=True,
                    enable=True,
                    text='Preset Name: %s\n' % (self.data[0]) +
                    'Light Type: %s\n' % (self.data[1]) +
                    'Description: %s' % (self.data[2]))
     pm.separator()
     pm.separator()
     pm.separator()
Exemple #46
0
def fx_prefixName(arg):
    name =pm.textField('fx_prefixNametxt',tx=1,q=1)
    selcbs = pm.checkBox("fx_prefixNamecb" ,q=True,v=True)
    readonlylist = pm.ls(ro=1,type="mesh")
    if selcbs==0:
        sels =pm.ls(sl=1,long=1)
        selall = pm.listRelatives(sels,ad=1)
        meshshapes =[a.getParent() for a in selall if a.nodeType()=="mesh"]
    else:
        meshshapes =[a for a in pm.ls(type="mesh",long=1) if a not in readonlylist]
    if selcbs==1:
        for m in range(len(meshshapes)):
            clothsels = pm.rename(meshshapes[m].getParent(),name+"_cloth_geo"+str(m+1))
            pm.rename(meshshapes[m],clothsels+"Shape")
    else:
        for m in range(len(meshshapes)):
            print 
            clothsels = pm.rename(meshshapes[m],name+"_cloth_geo"+str(m+1))
            pm.rename(clothsels.getShape(),clothsels+"Shape")
    geogrp = pm.group(meshshapes,name=name+"_cloth_geo")
    allgrp = pm.group(geogrp,name = name+"_all")
    pm.parent(allgrp,w=1)
Exemple #47
0
    def _add_mFIZ_controller_to_scene(self, *args):
        """
        """
        # Get the user input name and filter out special characters
        name = get_textField_input(ADD_CONTROLLER_TEXTFIELD_NAME, filter=True)

        ## Create a new tab in the mFIZ UI for the new controller
        controller = mFIZ_utils.add_mFIZ_controller_to_scene(name)

        # Set the state of the Stop Playback on Disconnect attribute on the node
        # based on user input in the Setup Tab
        stop_on_disconnect = pm.checkBox(self.stop_playback_checkBox,
                                         query=True,
                                         value=True)
        controller.node.setAttr('stopPlaybackOnDisconnect',
                                stop_on_disconnect,
                                lock=True)

        ## Assign the controller to the controls tabLayout
        tab_layout = self.controls_tab_layout

        ctrl = controller.ctrl
        ctrl_name = str(ctrl)
        tab_name = ctrl_name.replace('_CTRL', '')

        tab = self._build_program_tab(controller, tab_name, tab_layout,
                                      tab_layout)
        self._assign_tabs([(tab, tab_name)], tab_layout)

        ## Move the "Setup" tab to the end
        tab_labels = pm.tabLayout(tab_layout, query=True, tabLabel=True)
        num_tabs = len(tab_labels)
        setup_tab_index = tab_labels.index(
            'Setup') + 1  # Tabs are 1-based indeces

        pm.tabLayout(tab_layout,
                     edit=True,
                     moveTab=[setup_tab_index, num_tabs])
    def Folli(self):
        if pm.checkBox(
                self.folli_ctrl,
                q=True,
                v=True,
        ) == False:
            radius = pm.floatField(self.radius, q=True, value=True)
            countV = int(pm.floatField(self.folli, q=True, value=True))

            [
                adbFolli.Folli(1, countV, radius=radius, sub=x)
                for x in pm.selected()
            ]

        else:
            radius = pm.floatField(self.radius, q=True, value=True)
            countV = int(pm.floatField(self.folli, q=True, value=True))

            folli = [
                adbFolli.Folli(1, countV, radius=radius, sub=x)
                for x in pm.selected()
            ]
            [x.addControls() for x in folli]
Exemple #49
0
def wnd_rowPad():
    global txt_jointField, chk_appendPad
    pm.frameLayout(collapsable=True, label="Pad Object", width=500)

    pm.rowLayout(numberOfColumns=3, columnWidth=[(1, 150), (2, 200), (3, 100)])
    pm.text(label="Choose an object to pad")
    txt_jointField = pm.textField(placeholderText="Choose joint",
                                  editable=False)
    pm.button(label="Choose Item", command=pm.Callback(selectItem))
    pm.setParent("..")

    pm.rowLayout(numberOfColumns=2, columnWidth=[(1, 350)])
    pm.text("Automatically append \"pad\" to end?")
    chk_appendPad = pm.checkBox("appendPad", value=True, label="")
    pm.setParent("..")

    pm.rowLayout(numberOfColumns=3)
    pm.text(width=150, label="")
    pm.button(label="Pad this", command=pm.Callback(padObject))
    pm.text(width=150, label="")
    pm.setParent("..")

    pm.setParent("..")
Exemple #50
0
    def createGuideCallback(self, *args):
        fromScene = pm.checkBox(self.getFromSceneCheckbox, q=True, v=True)
        rigName = pm.textFieldGrp(self.characterNameTextField, tx=True, q=True)
        fingersSetup = self.getFingerSetup()

        self.bipedInstance = biped.Biped(rigName=rigName, handFingers=fingersSetup[0], footFingers=fingersSetup[1])

        if fromScene:
            self.bipedInstance.getDictsFromScene()
            fingerSetup = self.getFingerSetupFromScene()
            self.setFingerSetup(fingerSetup=fingerSetup)

        self.bipedInstance.generateGuides()
        guideGrp = pm.PyNode('GUIDES')

        guideGrp.visibility.set(True)


        try:
            rigGrp = pm.PyNode(self.bipedInstance.name.upper())
            rigGrp.visibility.set(False)
        except:
            logger.warn('no rig...')
Exemple #51
0
    def __init__(self):
        self.windows_name = 'cgru_afanasy_wnd'

        if pm.window(self.windows_name, exists=True):
            pm.deleteUI(self.windows_name)

        self.window = pm.window(self.windows_name, t='Afanasy')

        with pm.columnLayout(adj=True):
            labels_width = 90
            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='Start Frame')
                pm.intField('cgru_afanasy__start_frame',
                            v=pm.optionVar.get('cgru_afanasy__start_frame_ov',
                                               1))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='End Frame')
                pm.intField('cgru_afanasy__end_frame',
                            v=pm.optionVar.get('cgru_afanasy__end_frame_ov',
                                               1))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='Frame Per Task')
                pm.intField('cgru_afanasy__frames_per_task',
                            v=pm.optionVar.get(
                                'cgru_afanasy__frames_per_task_ov', 1))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='By Frame')
                pm.intField('cgru_afanasy__by_frame',
                            v=pm.optionVar.get('cgru_afanasy__by_frame_ov', 1))

            pm.checkBox('cgru_afanasy__paused', l='Start Paused', v=0)
            pm.checkBox('cgru_afanasy__separate_layers',
                        l='Submit Render Layers as Separate Tasks',
                        v=1)

            pm.button(l='LAUNCH', c=self.launch)

            pm.checkBox('cgru_afanasy__close', l='Close After', v=1)

        pm.showWindow(self.window)
Exemple #52
0
    def buildRig(self):
        """Building the Rig and the connections """
        self.saveData()
        """ -------------------- Z AXIS -------------------- """

        if pm.checkBox(
                "myChBxZ",
                q=True,
                v=True,
        ) == 1 and pm.checkBox(
                "myChBxX",
                q=True,
                v=True,
        ) == 0:

            self.tiltZ.buildRig()
        """ -------------------- X AXIS -------------------- """

        if pm.checkBox(
                "myChBxX",
                q=True,
                v=True,
        ) == 1 and pm.checkBox(
                "myChBxZ",
                q=True,
                v=True,
        ) == 0:

            self.tiltX.buildRig()
        """ -------------------- Z AND X AXIS -------------------- """

        if pm.checkBox(
                "myChBxZ",
                q=True,
                v=True,
        ) == 1 and pm.checkBox(
                "myChBxX",
                q=True,
                v=True,
        ) == 1:

            self.tiltBoth.buildRig()
Exemple #53
0
    def create_ui(self):
        '''
        # this creates the ui
        # returns the layout for the gui components
        '''
        self.layout = pm.columnLayout(adjustableColumn=True)
        self.root_joint = pm.checkBox(label='Create Root Joint')
        self.export = pm.checkBox(label='Export When Finished')
        self.delete = pm.checkBox(label='Delete When Finished')
        self.visibility = pm.checkBox(label='Visibility State', value=1)
        self.group = pm.checkBox(label='Group System', value=1)
        self.combine = pm.checkBox(label='Combine Meshes', value=0)

        self.start_end_fields = pm.intFieldGrp(numberOfFields=2,
                                               label=u'Start & End Frames',
                                               value1=0,
                                               value2=100,
                                               columnWidth3=[105, 90, 90])
        pm.text(label='')
        pm.button(label='Bake Simulation',
                  height=130,
                  command=pm.Callback(self.bake_simulation))

        return self.layout
    def CreateClothWindow(self,*args):
	    if pm.window("cloth", exists = True):
	        pm.deleteUI("cloth")

	    cloth = pm.window("Create Cloth", t = "Create Cloth", w = 400, h = 600)
	    pm.columnLayout(adj = True, cal = "center", columnAttach=('both', 25))
	    pm.separator(h = 30)
	    pm.text("Cloth Simulation with PBD and exact CCD", font = "boldLabelFont")
	    pm.separator(h = 30)
	    pm.frameLayout(label = "Cloth Subdivisions", collapsable = True, borderStyle = "etchedIn")
	    self.GlobalVars["SubX"] = pm.intSliderGrp(l = "Subdivision X", min = 1, max = 20, value = 10, field = True)
	    self.GlobalVars["SubY"] = pm.intSliderGrp(l = "Subdivision Y", min = 1, max = 20, value = 10, field = True)
	    pm.setParent("..")
	    pm.frameLayout(label = "Position Constraints", collapsable = True, borderStyle = "etchedIn")
	    pm.gridLayout(numberOfColumns = 2, cellWidthHeight = (180,20))
	    self.GlobalVars["Locator_LeftTopCorner"] = pm.checkBox(label = "Locator_LeftTopCorner")
	    self.GlobalVars["Locator_RightTopCorner"] = pm.checkBox(label = "Locator_RightTopCorner")
	    self.GlobalVars["Locator_RightBottomCorner"] = pm.checkBox(label = "Locator_RightBottomCorner")
	    self.GlobalVars["Locator_LeftBottomCorner"] = pm.checkBox(label = "Locator_LeftBottomCorner")
	    self.GlobalVars["Locator_Middle"] = pm.checkBox(label = "Locator_Middle")
	    pm.setParent("..")
	    pm.setParent("..")
	    pm.frameLayout(label = "Gravity", collapsable = True, borderStyle = "etchedIn")
	    self.GlobalVars["GraV"] = pm.floatSliderGrp(l = "Gravity", min = 0.0, max = 9.8, field = True)
	    pm.setParent("..")
	    pm.frameLayout(label = "Wind Force", collapsable = True, borderStyle = "etchedIn")
	    self.GlobalVars["Wind_X"] = pm.floatSliderGrp(l = "Wind Force_X", min = -10.0, max = 10, value = 0.0, field = True)
	    self.GlobalVars["Wind_Y"] = pm.floatSliderGrp(l = "Wind Force_Y", min = -10.0, max = 10, value = 0.0, field = True)
	    self.GlobalVars["Wind_Z"] = pm.floatSliderGrp(l = "Wind Force_Z", min = -10.0, max = 10, value = 0.0, field = True)
	    self.GlobalVars["Noise"] = pm.floatSliderGrp(l = "Noise", min = 0.0, max = 2, value = 0.0, field = True)
	    pm.setParent("..")
	    pm.separator(h = 10)
	    self.GlobalVars["DefaultText"] = pm.checkBox(label = "Default Texture")
	    pm.separator(h = 10)
	    pm.button(l = "Create", c = self.CreateCloth)
	    pm.showWindow(cloth)
Exemple #55
0
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 createTrail():
    if pm.window('trailUI', ex=1):
        pm.deleteUI('trailUI')

    pm.window('trailUI')
    pm.columnLayout(adj=1)
    fsSample = pm.floatSliderGrp('sampleSlider',
                                 label='Sample by',
                                 cw=(1, 70),
                                 adj=1,
                                 en=1,
                                 minValue=0.01,
                                 maxValue=100,
                                 fieldMinValue=0.01,
                                 fieldMaxValue=100,
                                 pre=2,
                                 field=1,
                                 v=1)
    pm.separator(height=4, style="in")
    startFrame = pm.playbackOptions(q=1, min=1)
    currentFrame = pm.currentTime(q=1)
    if currentFrame > startFrame:
        startFrame = currentFrame
    pm.intSliderGrp('startFrameSlider',
                    label='Start frame',
                    cw=(1, 70),
                    adj=1,
                    en=1,
                    minValue=0,
                    maxValue=100,
                    fieldMinValue=0,
                    fieldMaxValue=10000,
                    field=1,
                    v=startFrame)
    pm.popupMenu(button=3, pmc=functools.partial(setTime, 'start'))
    pm.intSliderGrp('endFrameSlider',
                    label='End frame',
                    cw=(1, 70),
                    adj=1,
                    en=1,
                    minValue=0,
                    maxValue=100,
                    fieldMinValue=0,
                    fieldMaxValue=10000,
                    field=1,
                    v=startFrame + 30)
    pm.popupMenu(button=3, pmc=functools.partial(setTime, 'end'))
    pm.intSliderGrp('trailDivisions',
                    label='Trail divisions',
                    cw=(1, 70),
                    adj=1,
                    en=1,
                    minValue=1,
                    maxValue=100,
                    fieldMinValue=1,
                    fieldMaxValue=10000,
                    field=1,
                    v=40)
    pm.separator(height=4, style="in")
    cbUvDistorted = pm.checkBox('cbUV', l='UV distorted', v=1)
    pm.separator(height=4, style="in")

    rowBtn = pm.rowColumnLayout(numberOfRows=1)
    pm.button(l='Create Trail', command=functools.partial(createTrailMesh))
    pm.button(l='Rebuil uvs', c=functools.partial(createTrailUv, ''))
    pm.button(l='ELP !!!', c=openHelpPage)
    pm.showWindow('trailUI')
Exemple #57
0
    def ui(self):
        template = pm.uiTemplate('ExampleTemplate', force=True)
        template.define(pm.button, height=30, w=80)
        template.define(pm.frameLayout,
                        mw=2,
                        mh=2,
                        borderVisible=False,
                        labelVisible=False)

        if pm.window(self.name, q=1, ex=1):
            pm.deleteUI(self.name)

        with pm.window("TiltTool_win",
                       t=self.title,
                       s=False,
                       tlb=True,
                       mnb=True) as win:
            with template:
                with pm.frameLayout():
                    with pm.columnLayout(adj=True, rs=10):
                        pm.text(label="OPTIONS", h=30, fn="boldLabelFont")

                    with pm.frameLayout():
                        with pm.columnLayout(adj=True, rs=5):

                            with pm.rowLayout(columnWidth3=(0, 0, 0),
                                              adj=True,
                                              numberOfColumns=4):
                                pm.text(label="Tilt Control  ", align='left')
                                self.tiltCtrl = pm.textFieldGrp(
                                    pht="Select the tilt control",
                                    cw1=150,
                                    tx=self.tiltCtrl_txt)
                                pm.text(label="< < < ")
                                pm.button(label="Add",
                                          h=25,
                                          backgroundColor=colordic['green3'],
                                          c=pm.Callback(self.getCtrl))

                            with pm.rowLayout(columnWidth3=(0, 0, 0),
                                              adj=True,
                                              numberOfColumns=4):
                                pm.text(label="Mesh ", align='left')
                                self.mesh = pm.textFieldGrp(
                                    pht="Select the mesh",
                                    cw1=150,
                                    tx=self.mesh_txt)
                                pm.text(label="< < < ")
                                pm.button(label="Add",
                                          h=25,
                                          backgroundColor=colordic['green3'],
                                          c=pm.Callback(self.getMesh))

                            with pm.rowLayout(columnWidth3=(0, 0, 0),
                                              adj=True,
                                              numberOfColumns=4):
                                pm.text(label="Target Parent Group",
                                        align='left')
                                self.target = pm.textFieldGrp(
                                    pht="Select the target",
                                    cw1=150,
                                    tx=self.parent_txt)
                                pm.text(label="< < < ")
                                pm.button(label="Add",
                                          h=25,
                                          backgroundColor=colordic['green3'],
                                          c=pm.Callback(self.getTarget))

                            with pm.rowLayout(columnWidth3=(0, 0, 0),
                                              adj=True,
                                              numberOfColumns=4):
                                pm.text(label="Mesh Last Offset Ctrl",
                                        align='left')
                                self.offset_ctrl = pm.textFieldGrp(
                                    pht="Select the target",
                                    cw1=150,
                                    tx=self.offset_txt)
                                pm.text(label="< < < ")
                                pm.button(label="Add",
                                          h=25,
                                          backgroundColor=colordic['green3'],
                                          c=pm.Callback(self.getOffsetCtrl))

                            pm.separator()
                            pm.text(label="RIGGING", h=20, fn="boldLabelFont")
                            pm.separator()

                            with pm.rowLayout(columnWidth3=(0, 0, 0),
                                              numberOfColumns=7):
                                pm.text(
                                    label="   CHOOSE AXIS    ",
                                    h=50,
                                )

                                if self.axisZ_setdata == 'True':
                                    pm.checkBox("myChBxZ",
                                                l="Z  axis",
                                                h=25,
                                                value=True)
                                else:
                                    pm.checkBox("myChBxZ",
                                                l="Z  axis",
                                                h=25,
                                                value=False)

                                if self.axisX_setdata == 'True':
                                    pm.checkBox("myChBxX",
                                                l="X  axis",
                                                h=25,
                                                value=True)
                                else:
                                    pm.checkBox("myChBxX",
                                                l="X  axis",
                                                h=25,
                                                value=False)

                                pm.button(label="Save Data",
                                          w=88,
                                          h=25,
                                          backgroundColor=colordic['blue'],
                                          c=pm.Callback(self.saveData))
                                pm.button(label="Clear Info",
                                          w=88,
                                          h=25,
                                          backgroundColor=colordic['darkblue'],
                                          c=pm.Callback(self.refresh))

                            with pm.rowLayout(columnWidth3=(0, 0, 0),
                                              numberOfColumns=2):

                                pm.button(label="Build Basic Guide",
                                          w=197,
                                          backgroundColor=colordic['grey'],
                                          c=pm.Callback(self.buildGuide))
                                pm.button(label="Build Basic Rig",
                                          w=197,
                                          backgroundColor=colordic['grey'],
                                          c=pm.Callback(self.buildRig))
Exemple #58
0
    def show(self):
        # some default values
        section_label_height = 30
        labels_width = 140

        if pm.window(self.windows_name, exists=True):
            pm.deleteUI(self.windows_name)

        self.window = pm.window(self.windows_name, t='Afanasy Job Submission')

        with pm.columnLayout(adj=True):

            pm.text(l='<h1><b>Job Parameters<b><h1>', h=section_label_height)
            with pm.rowLayout(nc=4,
                              adj=2,
                              cl4=['right', 'left', 'center', 'center'],
                              cw4=(labels_width, 40, 15, 15)):
                pm.text(l='<div align="right"><b>Start Frame</b></div>')
                start_time_int_field = pm.intField(
                    'cgru_afanasy__start_frame',
                    v=pm.optionVar.get('cgru_afanasy__start_frame_ov', 1))
                pm.button(l='<',
                          ann='Use minimum animation range',
                          c=functools.partial(
                              self.set_field_value, start_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                min=True)))
                pm.button(l='<<',
                          ann='Use minimum playback range',
                          c=functools.partial(
                              self.set_field_value, start_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                ast=True)))

            with pm.rowLayout(nc=4, adj=2, cw4=(labels_width, 40, 15, 15)):
                pm.text(l='<b>End Frame</b>')
                end_time_int_field = pm.intField(
                    'cgru_afanasy__end_frame',
                    v=pm.optionVar.get('cgru_afanasy__end_frame_ov', 1))
                pm.button(l='<',
                          ann='Use maximum animation range',
                          c=functools.partial(
                              self.set_field_value, end_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                max=True)))
                pm.button(l='<<',
                          ann='Use maximum playback range',
                          c=functools.partial(
                              self.set_field_value, end_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                aet=True)))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Frame Per Task</b>')
                pm.intField('cgru_afanasy__frames_per_task',
                            v=pm.optionVar.get(
                                'cgru_afanasy__frames_per_task_ov', 1))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>By Frame</b>')
                pm.intField('cgru_afanasy__by_frame',
                            v=pm.optionVar.get('cgru_afanasy__by_frame_ov', 1))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Global Depend Mask</b>')
                pm.textField('cgru_afanasy__depend_mask_global',
                             text=pm.optionVar.get(
                                 'cgru_afanasy__depend_mask_global_ov', ''))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Host Mask</b>')
                pm.textField('cgru_afanasy__hosts_mask',
                             text=pm.optionVar.get(
                                 'cgru_afanasy__hosts_mask_ov', ''))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Host Exclude</b>')
                pm.textField('cgru_afanasy__hosts_exclude',
                             text=pm.optionVar.get(
                                 'cgru_afanasy__hosts_exclude_ov', ''))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Life Time (hours)</b>')
                pm.intField('cgru_afanasy__life_time',
                            v=pm.optionVar.get('cgru_afanasy__life_time_ov',
                                               240))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Annotation</b>')
                pm.textField('cgru_afanasy__annotation',
                             text=pm.optionVar.get(
                                 'cgru_afanasy__annotation_ov', ''))

            pm.separator()
            pm.text(l='<h1><b>Block Parameters<b><h1>', h=section_label_height)
            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Errors Avoid Host</b>')
                pm.intField('cgru_afanasy__errors_avoid_host',
                            v=pm.optionVar.get(
                                'cgru_afanasy__errors_avoid_host_ov', 3),
                            min=0,
                            max=127)

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Errors Retries</b>')
                pm.intField('cgru_afanasy__errors_retries',
                            v=pm.optionVar.get(
                                'cgru_afanasy__errors_retries_ov', 3),
                            min=0,
                            max=127)

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Errors Task Same Host</b>')
                pm.intField('cgru_afanasy__errors_task_same_host',
                            v=pm.optionVar.get(
                                'cgru_afanasy__errors_task_same_host_ov', 3),
                            min=0,
                            max=127)

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='<b>Errors Forgive Time</b>', ann='in seconds')
                pm.intField('cgru_afanasy__errors_forgive_time',
                            ann='in seconds',
                            v=pm.optionVar.get(
                                'cgru_afanasy__errors_errors_forgive_time_ov',
                                18000),
                            min=0)

            pm.separator()
            pm.text(l='<h1><b>Submission Details<b><h1>',
                    h=section_label_height)
            with pm.rowLayout(nc=2,
                              adj=2,
                              cl2=('right', 'left'),
                              cw2=(labels_width, 50)):
                pm.text(l='<b>Start Paused</b>', al='right')
                pm.checkBox('cgru_afanasy__paused',
                            l='',
                            v=pm.optionVar.get('cgru_afanasy__paused_ov', 0))

            pm.radioButtonGrp(
                'cgru_afanasy__separate_layers',
                numberOfRadioButtons=3,
                label='<b>Submit Render Layers<br>as Separate:</b>',
                labelArray3=['None', 'Block', 'Job'],
                # adj=1,
                cw4=[labels_width, 50, 50, 50],
                sl=pm.optionVar.get('cgru_afanasy__separate_layers_ov', 2))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                ann = """This is a weird hack! When used in conjunction with
the <b>Skip Existence Frames<b> parameter of the maya render settings and the
Frames Per Task parameters is equal or greater than the number of frames in the
animation range, it allows the Maya scene to be loaded only once per farm
machine. But then to be able to use all farmers there should be at least the
same amount of Jobs that there are farm machines. So with this parameter it is
possible to submit the same job multiple times.. But it is a bad hack.

This system will be updated in Afanasy."""
                pm.text(l='<b>Submit Multiple Times</b>', ann=ann)
                pm.intField('cgru_afanasy__submit_multiple_times',
                            ann=ann,
                            v=pm.optionVar.get(
                                'cgru_afanasy__submit_multiple_times_ov', 1))

            with pm.rowLayout(nc=2,
                              adj=2,
                              cl2=('right', 'left'),
                              cw2=(labels_width, 40)):
                pm.text(l='<b>Generate Previews</b>', al='right')
                pm.checkBox('cgru_afanasy__generate_previews',
                            l='',
                            v=pm.optionVar.get(
                                'cgru_afanasy__generate_previews_ov', 1))

            with pm.rowLayout(nc=2,
                              adj=2,
                              cl2=('right', 'left'),
                              cw2=(labels_width, 40)):
                pm.text(l='<b>Close After</b>', al='right')
                pm.checkBox('cgru_afanasy__close', l='', v=1)

            pm.button(l='SUBMIT', c=self.launch)

        pm.showWindow(self.window)
Exemple #59
0
    def launch(self, *args, **kwargs):
        """launch renderer command
        """
        # do nothing if there is no window (called externally)
        if not self.window:
            return

        # warn the user about the ignore settings
        try:
            dAO = pm.PyNode('defaultArnoldRenderOptions')

            ignore_attrs = [
                'ignoreSubdivision', 'ignoreDisplacement', 'ignoreBump',
                'ignoreMotionBlur'
            ]

            attr_values = [(attr, dAO.getAttr(attr)) for attr in ignore_attrs
                           if dAO.getAttr(attr) is True]

            if any(attr_values):
                msg_text = '<br>'.join(
                    map(lambda x: '%s: %s' % (x[0], x[1]), attr_values))

                response = pm.confirmDialog(
                    title='Ignore These Settings?',
                    message=
                    'You have ignored:<br><br>%s<br><br><b>Is that ok?</b>' %
                    msg_text,
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No')

                if response == 'No':
                    return
        except (pm.MayaNodeError, pm.MayaAttributeError):
            # no Arnold
            pass

        # check if rendering with persp camera
        try:
            wrong_camera_names = [
                'perspShape',
                'topShape',
                'sideShape',
                'fontShape',
                'persp1Shape',
                'perspShape1',
            ]
            renderable_cameras = [
                node for node in pm.ls(type='camera')
                if node.getAttr('renderable')
            ]
            if any(
                    map(lambda x: x.name() in wrong_camera_names,
                        renderable_cameras)):
                response = pm.confirmDialog(
                    title='Rendering with Persp?',
                    message=
                    'You are rendering with <b>Persp Camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No')

                if response == 'No':
                    return

            if len(renderable_cameras) > 1:
                response = pm.confirmDialog(
                    title='Rendering more than one Camera?',
                    message=
                    'You are rendering <b>more than one camera<b><br><br>Is that ok?</b>',
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No')

                if response == 'No':
                    return
            elif len(renderable_cameras) == 0:
                pm.confirmDialog(
                    title='No <b>Renderable</b> camera!!!',
                    message='There is no <b>renderable camera<b>!!!',
                    button=['Ok'],
                    defaultButton='Ok',
                    cancelButton='Ok',
                    dismissString='Ok')
                return

        except pm.MayaNodeError:
            # no default render globals node
            pass

        drg = pm.PyNode('defaultRenderGlobals')
        render_engine = drg.getAttr('currentRenderer')
        # RENDERER SPECIFIC CHECKS

        if render_engine == 'redshift':
            # if the renderer is RedShift
            # check if unifiedDisableDivision is 1 which will take too much time
            # to render
            dro = pm.PyNode('redshiftOptions')
            if dro.unifiedDisableDivision.get() == 1:
                response = pm.confirmDialog(
                    title=
                    "Enabled **Don't Automatically Reduce Samples of Other Effects**",
                    message=
                    'It is not allowed to render with the following option is enabled:<br>'
                    '<br>'
                    "Don't Automatically Reduce Samples of Other Effects: Enabled<br>"
                    "<br>"
                    "Please DISABLE it!",
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK')
                return

            # Check dome light backgrounds
            domes_to_fix = []
            rs_domes = pm.ls(type='RedshiftDomeLight')
            if rs_domes:
                for rs_dome in rs_domes:
                    if rs_dome.getAttr('background_enable') == 1 \
                       or rs_dome.getAttr('backPlateEnabled') == 1:
                        domes_to_fix.append(rs_dome.name())

            if domes_to_fix:
                message = 'Some DomeLights have <b>BackGround Render ' \
                          'Enabled</b>:' \
                          '<br><br>%s<br><br>' \
                          'Are you Sure?' % '<br>'.join(domes_to_fix)

                response = pm.confirmDialog(
                    title='Dome Lights with Background Enabled?',
                    message=message,
                    button=['Yes', 'No'],
                    defaultButton='No',
                    cancelButton='No',
                    dismissString='No')
                if response == 'No':
                    return

            # abort on license fail
            dro.abortOnLicenseFail.set(1)

        elif render_engine == 'arnold':
            # check if the samples are too high
            dAO = pm.PyNode('defaultArnoldRenderOptions')

            aa_samples = dAO.AASamples.get()
            diff_samples = dAO.GIDiffuseSamples.get()
            try:
                glossy_samples = dAO.GIGlossySamples.get()
            except AttributeError:
                glossy_samples = dAO.GISpecularSamples.get()
            if int(pm.about(v=1)) >= 2017:
                sss_samples = dAO.GISssSamples.get()
            else:
                sss_samples = dAO.sssBssrdfSamples.get()

            total_diff_samples = aa_samples**2 * diff_samples**2
            total_glossy_samples = aa_samples**2 * glossy_samples**2
            total_sss_samples = aa_samples**2 * sss_samples**2

            max_allowed_diff_samples = 225
            max_allowed_glossy_samples = 100
            max_allowed_sss_samples = 800

            if total_diff_samples > max_allowed_diff_samples:
                pm.confirmDialog(
                    title="Too Much Diffuse Samples!!!",
                    message='You are using too much DIFFUSE SAMPLES (>%s)<br>'
                    '<br>'
                    'Please either reduce AA samples of Diffuse '
                    'Samples!!!' % max_allowed_diff_samples,
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK')
                return

            if total_glossy_samples > max_allowed_glossy_samples:
                pm.confirmDialog(
                    title="Too Much Glossy Samples!!!",
                    message='You are using too much GLOSSY SAMPLES (>%s)<br>'
                    '<br>'
                    'Please either reduce AA samples of Glossy '
                    'Samples!!!' % max_allowed_glossy_samples,
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK')
                return

            if total_sss_samples > max_allowed_sss_samples:
                pm.confirmDialog(
                    title="Too Much SSS Samples!!!",
                    message='You are using too much SSS SAMPLES (>%s)<br>'
                    '<br>'
                    'Please either reduce AA samples of SSS '
                    'Samples!!!' % max_allowed_sss_samples,
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK')
                return

            # check Light Samples
            # check point lights with zero radius but more than one samples
            all_point_lights = pm.ls(type='pointLight')
            ridiculous_point_lights = []
            for point_light in all_point_lights:
                if point_light.aiRadius.get(
                ) < 0.1 and point_light.aiSamples.get() > 1:
                    ridiculous_point_lights.append(point_light)

            if ridiculous_point_lights:
                pm.confirmDialog(
                    title="Unnecessary Samples on Point Lights!!!",
                    message='You are using too much SAMPLES (>1)<br>'
                    '<br>'
                    'on <b>Point lights with zero radius</b><br>'
                    '<br>'
                    'Please reduce the samples to 1',
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK')
                return

            # Check area lights with more than 2 samples
            all_area_lights = pm.ls(type=['areaLight', 'aiAreaLight'])
            ridiculous_area_lights = []
            for area_light in all_area_lights:
                if area_light.aiSamples.get() > 2:
                    ridiculous_area_lights.append(area_light)

            if ridiculous_area_lights:
                pm.confirmDialog(
                    title="Unnecessary Samples on Area Lights!!!",
                    message='You are using too much SAMPLES (>2) on<br>'
                    '<br>'
                    '<b>Area Lights</b><br>'
                    '<br>'
                    'Please reduce the samples to 2',
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK')
                return

            # Check directional lights with angle == 0 and samples > 1
            all_directional_lights = pm.ls(type='directionalLight')
            ridiculous_directional_lights = []
            dir_sample_attr_name = 'aiSamples'
            # if pm.about(v=1) == "2014":
            #     dir_sample_attr_name = 'aiSamples'

            for directional_light in all_directional_lights:
                if directional_light.aiAngle.get(
                ) == 0 and directional_light.attr(
                        dir_sample_attr_name).get() > 1:
                    ridiculous_directional_lights.append(directional_light)

            if ridiculous_directional_lights:
                pm.confirmDialog(
                    title="Unnecessary Samples on Directional Lights!!!",
                    message='You are using too much SAMPLES (>1) on <br>'
                    '<br>'
                    '<b>Directional lights with zero angle</b><br>'
                    '<br>'
                    'Please reduce the samples to 1',
                    button=['OK'],
                    defaultButton='OK',
                    cancelButton='OK',
                    dismissString='OK')
                return

        # get values
        start_frame = pm.intField('cgru_afanasy__start_frame', q=1, v=1)
        end_frame = pm.intField('cgru_afanasy__end_frame', q=1, v=1)
        frames_per_task = \
            pm.intField('cgru_afanasy__frames_per_task', q=1, v=1)
        by_frame = pm.intField('cgru_afanasy__by_frame', q=1, v=1)
        depend_mask_global = pm.textField('cgru_afanasy__depend_mask_global',
                                          q=1,
                                          text=True)
        hosts_mask = pm.textField('cgru_afanasy__hosts_mask', q=1, text=True)
        hosts_exclude = pm.textField('cgru_afanasy__hosts_exclude',
                                     q=1,
                                     text=True)
        separate_layers = \
            pm.radioButtonGrp('cgru_afanasy__separate_layers', q=1, sl=1)
        pause = pm.checkBox('cgru_afanasy__paused', q=1, v=1)
        life_time = pm.intField('cgru_afanasy__life_time', q=1, v=1)
        annotation = pm.textField('cgru_afanasy__annotation', q=1, text=True)
        submit_multiple_times = pm.intField(
            'cgru_afanasy__submit_multiple_times', q=1, v=1)
        errors_avoid_host = pm.intField('cgru_afanasy__errors_avoid_host',
                                        q=1,
                                        v=1)
        errors_retries = pm.intField('cgru_afanasy__errors_retries', q=1, v=1)
        errors_task_same_host = pm.intField(
            'cgru_afanasy__errors_task_same_host', q=1, v=1)
        errors_forgive_time = pm.intField('cgru_afanasy__errors_forgive_time',
                                          q=1,
                                          v=1)

        generate_previews = pm.checkBox('cgru_afanasy__generate_previews',
                                        q=1,
                                        v=1)

        # check values
        if start_frame > end_frame:
            temp = end_frame
            end_frame = start_frame
            start_frame = temp

        frames_per_task = max(1, frames_per_task)
        by_frame = max(1, by_frame)

        # store without quota sign
        depend_mask_global = depend_mask_global.replace('"', '')
        hosts_mask = hosts_mask.replace('"', '')
        hosts_exclude = hosts_exclude.replace('"', '')

        # store field values
        pm.optionVar['cgru_afanasy__start_frame_ov'] = start_frame
        pm.optionVar['cgru_afanasy__end_frame_ov'] = end_frame
        pm.optionVar['cgru_afanasy__frames_per_task_ov'] = frames_per_task
        pm.optionVar['cgru_afanasy__by_frame_ov'] = by_frame
        pm.optionVar['cgru_afanasy__depend_mask_global_ov'] = \
            depend_mask_global
        pm.optionVar['cgru_afanasy__hosts_mask_ov'] = hosts_mask
        pm.optionVar['cgru_afanasy__hosts_exclude_ov'] = hosts_exclude
        pm.optionVar['cgru_afanasy__separate_layers_ov'] = separate_layers
        pm.optionVar['cgru_afanasy__life_time_ov'] = life_time
        pm.optionVar['cgru_afanasy__annotation_ov'] = annotation

        pm.optionVar[
            'cgru_afanasy__submit_multiple_times_ov'] = submit_multiple_times
        pm.optionVar['cgru_afanasy__errors_avoid_host_ov'] = errors_avoid_host
        pm.optionVar['cgru_afanasy__errors_retries_ov'] = errors_retries
        pm.optionVar[
            'cgru_afanasy__errors_task_same_host_ov'] = errors_task_same_host
        pm.optionVar[
            'cgru_afanasy__errors_errors_forgive_time_ov'] = errors_forgive_time
        pm.optionVar['cgru_afanasy__paused_ov'] = pause

        pm.optionVar['cgru_afanasy__generate_previews_ov'] = generate_previews

        # get paths
        scene_name = pm.sceneName()
        datetime = '%s%s' % (time.strftime('%y%m%d-%H%M%S-'),
                             str(time.time() - int(time.time()))[2:5])

        filename = '%s.%s.mb' % (scene_name, datetime)

        project_path = pm.workspace(q=1, rootDirectory=1)

        # outputs = \
        #     pm.renderSettings(fullPath=1, firstImageName=1, lastImageName=1)

        # get output paths, set the RenderPass token to Beauty,
        # this will at least guarantee to get something
        outputs = \
            pm.renderSettings(
                fullPath=1, firstImageName=1, lastImageName=1,
                leaveUnmatchedTokens=1, customTokenString="RenderPass=Beauty"
            )

        # job_name = os.path.basename(scene_name)
        job_name = self.generate_job_name()

        logger.debug('%ss %se %sr' % (start_frame, end_frame, by_frame))
        logger.debug('scene                 = %s' % scene_name)
        logger.debug('file                  = %s' % filename)
        logger.debug('job_name              = %s' % job_name)
        logger.debug('project_path          = %s' % project_path)
        logger.debug('outputs               = %s' % outputs)
        logger.debug('annotation            = %s' % annotation)
        logger.debug('separate_layers       = %s' % separate_layers)
        logger.debug('errors_avoid_host     = %s' % errors_avoid_host)
        logger.debug('errors_retries        = %s' % errors_retries)
        logger.debug('errors_task_same_host = %s' % errors_task_same_host)
        logger.debug('errors_forgive_time   = %s' % errors_forgive_time)
        logger.debug('generate_previews     = %s' % generate_previews)

        if pm.checkBox('cgru_afanasy__close', q=1, v=1):
            pm.deleteUI(self.window)

        stored_log_level = None
        if render_engine == 'arnold':
            # set the verbosity level to warning+info
            aro = pm.PyNode('defaultArnoldRenderOptions')
            stored_log_level = aro.getAttr('log_verbosity')
            aro.setAttr('log_verbosity', 2)
            # set output to console
            aro.setAttr("log_to_console", 1)
        elif render_engine == 'redshift':
            # set the verbosity level to detailed+info
            redshift = pm.PyNode('redshiftOptions')
            stored_log_level = redshift.logLevel.get()
            redshift.logLevel.set(2)

        # save file
        pm.saveAs(filename, force=1, type='mayaBinary')

        # rename back to original name
        pm.renameFile(scene_name)

        # create the render command
        mrc = MayaRenderCommandBuilder(name=job_name,
                                       file_full_path=filename,
                                       render_engine=render_engine,
                                       project=project_path,
                                       by_frame=by_frame)

        # submit renders
        jobs = []
        blocks = []

        #
        # separate_layers:
        # 1 -> None  -> submit one job with a single block with all layers
        # 2 -> Block -> submit one job with multiple blocks
        # 3 -> Job   -> submit multiple jobs with a single block per layer
        #
        if separate_layers in [1, 2]:
            job = af.Job(job_name)
            jobs.append(job)

        if separate_layers in [2, 3]:
            # render each layer separately
            rlm = pm.PyNode('renderLayerManager')
            layers = [
                layer for layer in rlm.connections(type=pm.nt.RenderLayer)
                if layer.renderable.get()
            ]

            for layer in layers:
                mrc_layer = copy.copy(mrc)
                layer_name = layer.name()
                mrc_layer.name = layer_name
                mrc_layer.render_layer = layer_name

                # create a new block for this layer
                block = af.Block(
                    layer_name,
                    renderer_to_block_type.get(render_engine, 'maya'))

                # Fix the output path for this layer
                # by replacing the "masterLayer" with the layer name
                # without rs_ at the beginning
                layer_outputs = outputs
                if layer_name != 'defaultRenderLayer':
                    layer_outputs[0] = outputs[0].replace(
                        'masterLayer', layer_name.replace('rs_', ''))
                    layer_outputs[1] = outputs[1].replace(
                        'masterLayer', layer_name.replace('rs_', ''))

                if generate_previews:
                    outputs_split = afcommon.patternFromDigits(
                        afcommon.patternFromStdC(
                            afcommon.patternFromPaths(
                                layer_outputs[0],
                                layer_outputs[1]))).split(';')
                    block.setFiles(outputs_split)

                block.setNumeric(start_frame, end_frame, frames_per_task,
                                 by_frame)
                command = mrc_layer.build_command()

                block.setErrorsAvoidHost(errors_avoid_host)
                block.setErrorsRetries(errors_retries)
                block.setErrorsTaskSameHost(errors_task_same_host)
                block.setErrorsForgiveTime(errors_forgive_time)

                block.setCommand(command)

                if separate_layers == 2:
                    blocks.append(block)
                else:
                    job = af.Job('%s - %s' % (job_name, layer_name))
                    # add blocks
                    job.blocks = [block]
                    jobs.append(job)

        else:
            # create only one block
            block = af.Block('All Layers',
                             renderer_to_block_type.get(render_engine, 'maya'))

            if generate_previews:
                block.setFiles(
                    afcommon.patternFromDigits(
                        afcommon.patternFromStdC(
                            afcommon.patternFromPaths(outputs[0],
                                                      outputs[1]))).split(';'))

            block.setNumeric(start_frame, end_frame, frames_per_task, by_frame)
            command = mrc.build_command()
            block.setCommand(command)

            blocks.append(block)

        for job in jobs:
            job.setAnnotation(annotation)
            job.setFolder('input', os.path.dirname(filename))
            job.setFolder('output', os.path.dirname(outputs[0]))
            job.setDependMaskGlobal(depend_mask_global)
            job.setHostsMask(hosts_mask)
            job.setHostsMaskExclude(hosts_exclude)
            if life_time > 0:
                job.setTimeLife(life_time * 3600)
            else:
                job.setTimeLife(240 * 3600)

            job.setCmdPost('deletefiles -s "%s"' % os.path.abspath(filename))
            if pause:
                job.offline()

            # add blocks
            if separate_layers in [1, 2]:
                job.blocks.extend(blocks)

            for i in range(submit_multiple_times):
                orig_job_name = job.data['name']
                job.setName('%s - %03i' % (orig_job_name, i + 1))
                status, data = job.send()

                # restore job name
                job.setName(orig_job_name)
                if not status:
                    pm.PopupError('Something went wrong!')

        # restore log level
        if render_engine == 'arnold':
            aro = pm.PyNode('defaultArnoldRenderOptions')
            aro.setAttr('log_verbosity', stored_log_level)
            # disable set output to console
            aro.setAttr("log_to_console", 0)
        elif render_engine == 'redshift':
            redshift = pm.PyNode('redshiftOptions')
            redshift.logLevel.set(stored_log_level)

            # disable abort on license fail
            redshift.abortOnLicenseFail.set(0)
Exemple #60
0
    def show(self):
        if pm.window(self.windows_name, exists=True):
            pm.deleteUI(self.windows_name)

        self.window = pm.window(self.windows_name, t='Afanasy')

        with pm.columnLayout(adj=True):
            labels_width = 90
            with pm.rowLayout(nc=4, adj=2, cw4=(labels_width, 40, 15, 15)):
                pm.text(l='Start Frame')
                start_time_int_field = pm.intField(
                    'cgru_afanasy__start_frame',
                    v=pm.optionVar.get('cgru_afanasy__start_frame_ov', 1))
                pm.button(l='<',
                          ann='Use minimum animation range',
                          c=functools.partial(
                              self.set_field_value, start_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                min=True)))
                pm.button(l='<<',
                          ann='Use minimum playback range',
                          c=functools.partial(
                              self.set_field_value, start_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                ast=True)))

            with pm.rowLayout(nc=4, adj=2, cw4=(labels_width, 40, 15, 15)):
                pm.text(l='End Frame')
                end_time_int_field = pm.intField(
                    'cgru_afanasy__end_frame',
                    v=pm.optionVar.get('cgru_afanasy__end_frame_ov', 1))
                pm.button(l='<',
                          ann='Use maximum animation range',
                          c=functools.partial(
                              self.set_field_value, end_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                max=True)))
                pm.button(l='<<',
                          ann='Use maximum playback range',
                          c=functools.partial(
                              self.set_field_value, end_time_int_field,
                              functools.partial(pm.playbackOptions,
                                                q=True,
                                                aet=True)))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='Frame Per Task')
                pm.intField('cgru_afanasy__frames_per_task',
                            v=pm.optionVar.get(
                                'cgru_afanasy__frames_per_task_ov', 1))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='By Frame')
                pm.intField('cgru_afanasy__by_frame',
                            v=pm.optionVar.get('cgru_afanasy__by_frame_ov', 1))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='Host Mask')
                pm.textField('cgru_afanasy__hosts_mask', text=hostmaskServeur)

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='Host Exclude')
                pm.textField('cgru_afanasy__hosts_exclude',
                             text=pm.optionVar.get(
                                 'cgru_afanasy__hosts_exclude_ov', ''))

            with pm.rowLayout(nc=2, adj=2, cw2=(labels_width, 50)):
                pm.text(l='Life Time (hours)')
                pm.intField('cgru_afanasy__life_time',
                            v=pm.optionVar.get('cgru_afanasy__life_time_ov',
                                               -1))

            pm.checkBox('cgru_afanasy__paused', l='Start Paused', v=0)
            pm.checkBox('cgru_afanasy__separate_layers',
                        l='Submit Render Layers as Separate Tasks',
                        v=pm.optionVar.get('cgru_afanasy__separate_layers_ov',
                                           1))

            pm.button(l='LAUNCH', c=self.launch)

            pm.checkBox('cgru_afanasy__close', l='Close After', v=1)

        pm.showWindow(self.window)