def initUI(self): pm.setUITemplate("DefaultTemplate", pushTemplate=True) form = pm.formLayout() binMeshExportPath = pm.optionVar.get('mtap_binMeshExportPath', pm.workspace.path + "/geo/export.binarymesh") prefix = pm.optionVar.get('mtap_binMeshExportPathPrefix', "prefix") createProxy = pm.optionVar.get('mtap_binMeshCreateProxy', True) percentage = pm.optionVar.get('mtap_binMeshPercentage', 0.1) createStandin = pm.optionVar.get('mtap_binMeshCreateStandin', True) oneFilePerMesh = pm.optionVar.get('mtap_binMeshOneFilePerMesh', False) useTransform = pm.optionVar.get('mtap_binMeshUseTransform', False) with pm.columnLayout('StandinLayout') as StandinLayout: with pm.frameLayout('StandinLayout', label="Standin export options", collapsable=False): with pm.columnLayout('StandinColumnLayout'): self.pathUI = pm.textFieldButtonGrp(label="Standin directory", text=binMeshExportPath, buttonLabel="File", buttonCommand=self.fileBrowser) self.prefixUI = pm.textFieldGrp(label="Prefix", text=prefix) self.createProxyUI = pm.checkBoxGrp(label="Create proxy", value1=createProxy) self.percentageUI = pm.floatFieldGrp(label="Percentage", value1=percentage) self.createStdInUI = pm.checkBoxGrp(label="Create StandIn", value1=createStandin) self.oneFilePerMeshUI = pm.checkBoxGrp(label="One File Per Mesh", value1=oneFilePerMesh) self.doTransformUI = pm.checkBoxGrp(label="Use Transform", value1=useTransform) with pm.rowColumnLayout(numberOfColumns=2): pm.button(label="Create BinaryMesh", c=self.doit) pm.button(label="Cancel", c=self.cancel) pm.formLayout(form, edit=True, attachForm=[(StandinLayout, 'top', 5), (StandinLayout, 'bottom', 5), (StandinLayout, 'right', 5), (StandinLayout, 'left', 5)]) pm.setUITemplate("DefaultTemplate", popTemplate=True)
def updateCamerasUI(self): if self.rendererTabUiDict.has_key('common'): uiDict = self.rendererTabUiDict['common'] pm.deleteUI(uiDict['camerasCL']) with pm.columnLayout(adjustableColumn=True, width=400, parent=uiDict['camerasFrame']) as uiDict['camerasCL']: for cam in pm.ls(type="camera"): pm.checkBoxGrp(label=cam.name(), value1=cam.renderable.get(), cc=pm.Callback(self.switchCamRenderable, cam))
def KrayRendererUpdateTab(self, dummy=None): self.createGlobalsNode() #self.updateEnvironment() log.debug("KrayRendererUpdateTab()") sDict = self.rendererTabUiDict['sampling'] sType = self.renderGlobalsNode.samplingType.get() if sType != 1: #grid pm.intFieldGrp(sDict['gridSize'], edit=True, enable=False) pm.checkBoxGrp(sDict['gridRotate'], edit=True, enable=False) else: pm.intFieldGrp(sDict['gridSize'], edit=True, enable=True) pm.checkBoxGrp(sDict['gridRotate'], edit=True, enable=True) fType = self.renderGlobalsNode.filtertype.get() if fType in [4, 5, 6]: pm.floatFieldGrp(sDict['filterSize'], edit=True, enable=False) else: pm.floatFieldGrp(sDict['filterSize'], edit=True, enable=True) iFormat = self.renderGlobalsNode.imageFormat.get() if iFormat in [2, 3]: pm.attrEnumOptionMenuGrp(sDict['bitdepth'], edit=True, enable=True) else: pm.attrEnumOptionMenuGrp(sDict['bitdepth'], edit=True, enable=False) if iFormat == 1: pm.intFieldGrp(sDict['jpgQuality'], edit=True, enable=True) else: pm.intFieldGrp(sDict['jpgQuality'], edit=True, enable=False)
def addUIElement(uiType, attribute, uiLabel, callback, renderGlobalsNodeName): ui = None if uiType == 'bool': ui = pm.checkBoxGrp(label=uiLabel) if callback is not None: pm.checkBoxGrp(ui, edit=True, cc=callback) if uiType == 'int': ui = pm.intFieldGrp(label=uiLabel, numberOfFields = 1) if callback is not None: pm.intFieldGrp(ui, edit=True, cc = callback) if uiType == 'float': ui = pm.floatFieldGrp(label=uiLabel, numberOfFields = 1) if callback is not None: pm.floatFieldGrp(ui, edit=True, cc= callback) if uiType == 'enum': ui = pm.attrEnumOptionMenuGrp(label = uiLabel, at=attribute, ei = getEnumList(attribute)) # attrEnumOptionGrp has no cc callback, so I create a script job if callback is not None: attribute = pm.Attribute(renderGlobalsNodeName + "." + attribute) pm.scriptJob(attributeChange=[attribute, callback], parent=ui) if uiType == 'color': ui = pm.attrColorSliderGrp(label=uiLabel, at=attribute) if uiType == 'string': ui = pm.textFieldGrp(label=uiLabel) if callback is not None: pm.textFieldGrp(ui, edit=True, cc=callback) if uiType == 'vector': ui = pm.floatFieldGrp(label=uiLabel, nf=3) if callback is not None: pm.floatFieldGrp(ui, edit=True, cc=callback) return ui
def rename(self, *args): v1 = pm.checkBoxGrp(self.cbFld, q=1, v1=1) v2 = pm.checkBoxGrp(self.cbFld, q=1, v2=1) if v1 and v2: pm.warning('Only select one Type: FK or IK. No action taken.') return name = pm.textFieldGrp( self.nameFld, q=1, text=1) # Rename base control baseCnt = pm.PyNode('vks_explicit1') baseCnt.rename('%s_baseCnt' % name) # Get joints pm.select('vks_skin_joint_1', hi=1) jnts = pm.ls(sl=1, type='joint') count = 1 for each in jnts: pc = each.listConnections(et=1, type='parentConstraint')[0] print pc pc.rename('%s_joint_%s_parentConstraint' % (name, count)) each.rename('%s_joint_%s' % (name, count)) pm.select(each, r=1) pm.mel.eval('ToggleLocalRotationAxes;') count += 1 # FK parametric controls if v1: pm.select('vks_parametric*Shape') sel = pm.ls(sl=1) count = 1 for each in sel: prnt = each.getParent() prnt.rename('%s_cnt_%s' % (name, count)) count += 1
def update_size_ui(self): if self.dock_ui and self.dock[0]: kwargs = self.__dock_kwargs() kwargs["e"] = True pmc.dockControl(self.dock_ui, **kwargs) else: self.win.setWidthHeight(self.sizes[:2]) paneSizes = [] tmp = self.sizes[2:8] j = 1 for i in range(0, len(tmp) - 1, 2): paneSizes.append([j, tmp[i], tmp[i + 1]]) j += 1 pmc.paneLayout(self.main_layout, e=True, paneSize=paneSizes) pmc.paneLayout(self.script_layout, e=True, paneSize=[ [1, self.sizes[8], self.sizes[10]], [2, self.sizes[9], self.sizes[11]], ] ) pmc.checkBoxGrp(self.order_ui, e=True, v1=self.order) pmc.checkBoxGrp(self.order_ui, e=True, v2=self.show_doc) pmc.optionMenuGrp(self.filter_test_ui, e=True, v=self.filter_test)
def createCamerasUI(self, uiDict): with pm.columnLayout(adjustableColumn=True, width=400) as uiDict["camerasCL"]: for cam in pm.ls(type="camera"): pm.checkBoxGrp( label=cam.name(), value1=cam.renderable.get(), cc=pm.Callback(self.switchCamRenderable, cam) ) self.cameras.append(cam.name())
def KrayFinalGatheringCreateTab(self): log.debug("KrayFinalGatheringCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "PhotonsScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Photons frame", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.floatFieldGrp(label="Threshold:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgThreshold", index=2) pm.separator() ui = pm.intFieldGrp(label="Min Rays:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgMinRays", index=2) ui = pm.intFieldGrp(label="Max Rays:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgMaxRays", index=2) ui = pm.floatFieldGrp(label="Prerender:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgPrerender", index=2) ui = pm.intFieldGrp(label="Passes:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgPasses", index=2) pm.separator() ui = pm.floatFieldGrp(label="Sploth Detect:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgSplotchDetect", index=2) ui = pm.floatFieldGrp(label="Sensitivity:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgSensitivity", index=2) pm.separator() ui = pm.checkBoxGrp(label="FG Reflections:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgReflections", index=2) ui = pm.checkBoxGrp(label="FG Refractions:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgRefractions", index=2) pm.separator() ui = pm.floatFieldGrp(label="Spatial Tolerance:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgSpatialTolerance", index=2) ui = pm.floatFieldGrp(label="Angular Tolerance:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgAngularTolerance", index=2) ui = pm.floatFieldGrp(label="FG Min Dist:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgDistMin", index=2) ui = pm.floatFieldGrp(label="FG Dist Max:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgDistMax", index=2) ui = pm.floatFieldGrp(label="Density/Brightness:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgBrightness", index=2) pm.separator() ui = pm.intFieldGrp(label="Path Passes:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgPathPasses", index=2) ui = pm.floatFieldGrp(label="Corner Dist:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgCornerDist", index=2) ui = pm.checkBoxGrp(label="Show Samples:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".fgShowSamples", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def animateExportUI(): winName = 'animateUI' if(pm.window(winName,q=1,ex=1)): pm.deleteUI(winName) pm.window(winName,ret=1,mb=1) pm.columnLayout('columnLayout8',adj=1) pm.checkBoxGrp('exportType',ncb=3, label='export Type : ', la3=[': transform', ': rotate', ': custom']) pm.textFieldGrp('exportPath',l = 'export Path : ',adj = 0, cl2 = ['right','center'],tx = 'asdd') pm.button('export',c = 'animateExport()') pm.showWindow(winName)
def getData(self, *args): path = pm.textFieldButtonGrp(self.pathUI, query=True, text=True) prefix = pm.textFieldGrp(self.prefixUI, query=True, text=True) doProxy = pm.checkBoxGrp(self.createProxyUI, query=True, value1=True) percentage = pm.floatFieldGrp(self.percentageUI, query=True, value1=True) createStdin = pm.checkBoxGrp(self.createStdInUI, query=True, value1=True) oneFilePerMesh = pm.checkBoxGrp(self.oneFilePerMeshUI, query=True, value1=True) useTransform = pm.checkBoxGrp(self.doTransformUI, query=True, value1=True) pm.optionVar['mtap_binMeshExportPath'] = path pm.optionVar['mtap_binMeshExportPathPrefix'] = prefix pm.optionVar['mtap_binMeshCreateProxy'] = doProxy pm.optionVar['mtap_binMeshPercentage'] = percentage pm.optionVar['mtap_binMeshCreateStandin'] = createStdin pm.optionVar['mtap_binMeshOneFilePerMesh'] = oneFilePerMesh pm.optionVar['mtap_binMeshUseTransform'] = useTransform
def dimConnections(element): print "DimConnections" if element['name'] in ['motionblur']: value = pm.checkBoxGrp( element['name'], query = True, v1 = True) print element['uielement'] valueInv = value #groups = mantraGlobalsAttributes.mantraGlobalsAttributes #if el['name'] in ['xftimesamples', 'geotimesamples', 'motionfactor', 'mbtype']: if value: print "enabling ctrls" else: print "disabling ctrls" pm.intFieldGrp('xftimesamples', edit = True, enable = valueInv) pm.intFieldGrp('geotimesamples', edit = True, enable = valueInv) pm.floatFieldGrp('motionfactor', edit = True, enable = valueInv) pm.attrEnumOptionMenu('mbtype', edit = True, enable = valueInv) pm.checkBoxGrp('imagemotionblur', edit = True, enable = valueInv)
def setValue(self, value): if value == "stdingfilename": self.fileName = pm.textFieldButtonGrp("stdingfilename", query=True, text=True) if value == "stdinshowpoints": self.showPoints = pm.checkBoxGrp("stdinshowpoints", query=True, value1=True) if value == "stdinptdensity": self.density = pm.floatFieldGrp("stdinptdensity", query=True, value1=True) if value == "stdinptsize": self.pointSize = pm.intFieldGrp("stdinptsize", query=True, value1=True)
def order_by_ui(self, *args): self.order = pmc.checkBoxGrp(self.order_ui, q=True, v1=True) self.spp_.sort_objects(alphabetical=self.order, filter_str=pmc.textFieldGrp(self.filter_ui, q=True, text=True), filter_test=self.filter_test) pmc.textScrollList(self.infos_ui, e=True, ra=True) pmc.textScrollList(self.infos_ui, e=True, a=[o.repr_ for o in self.spp_.order_obj])
def AppleseedTranslatorCreateTab(self): log.debug("AppleseedTranslatorCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "TrScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "TrColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Translator", collapsable=True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".translatorVerbosity") ui = pm.attrEnumOptionMenuGrp(label="Translator Verbosity", at=self.renderGlobalsNodeName + ".translatorVerbosity", ei=self.getEnumList(attr)) with pm.frameLayout(label="{0} export".format(self.rendererName), collapsable=True, collapse=False): ui = pm.checkBoxGrp(label="Export {0} Scene file:".format(self.rendererName), value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".exportSceneFile", index=2) # xmlDict = {} # self.rendererTabUiDict['xml'] = xmlDict # defaultXMLPath = pm.workspace.path + "/" + pm.sceneName().basename().split(".")[0] + ".appleseed" # if not defaultXMLPath.dirname().exists(): # defaultXMLPath.dirname().makedirs() # with pm.rowLayout(nc=3): # xmlDict['xmlFileText'] = pm.text(label="Export to") # xmlDict['xmlFile'] = pm.textField(text=defaultXMLPath) # pm.symbolButton(image="navButtonBrowse.png", c=self.xmlFileBrowse) # pm.connectControl(xmlDict['xmlFile'], self.renderGlobalsNodeName + ".exportSceneFileName", index=2) with pm.frameLayout(label="Optimize Textures", collapsable=True, collapse=False): optiDict = {} ui = pm.checkBoxGrp(label="Use Optimized Textures:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".useOptimizedTextures", index=2) with pm.rowLayout(nc=3): self.rendererTabUiDict['opti'] = optiDict pm.text(label="OptimizedTex Dir:") optiDict['optiField'] = pm.textField(text=self.renderGlobalsNode.optimizedTexturePath.get()) pm.symbolButton(image="navButtonBrowse.png", c=self.dirBrowse) pm.connectControl(optiDict['optiField'], self.renderGlobalsNodeName + ".optimizedTexturePath", index=2) with pm.frameLayout(label="Additional Settings", collapsable=True, collapse=False): ui = pm.floatFieldGrp(label="Scene scale:", value1=1.0, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".sceneScale", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def __init__(self, inst): self.armModuleFrame = pm.frameLayout( parent = inst.simpleSetup_layout, w =244, label='simpleArm', borderStyle='out', cll = True, cl = True ) self.armSide_RBGRP = pm.radioButtonGrp( label='Choose Arm Side', labelArray3=['Left', 'Center', 'Right'], numberOfRadioButtons=3 ) self.armSpace_RBGRP = pm.radioButtonGrp( label='Choose Arm Space', labelArray3=['Top', 'Middle', 'Bottom'], numberOfRadioButtons=3 ) self.armAttribute_ChkBoxGRP = pm.checkBoxGrp( parent = self.armModuleFrame, label = 'Arm Attributes ', cw = ( [ 1, 90 ], [ 2, 70 ], [ 3, 100 ], [ 4, 60 ] ),numberOfCheckBoxes=3, labelArray3=['Stretchy', 'Elbow Pinning', 'Bendy Arms'], v1 = 1, v2 = 1, v3 = 1 ) self.armModulebutton_layout = pm.rowColumnLayout(parent = self.armModuleFrame, nc = 3 ) self.buildArm_Btn = pm.button(parent = self.armModulebutton_layout, w = 120, h = 24, label="Build Arm", command = self.build_armMod) self.mirrorArm_Btn = pm.button( parent = self.armModulebutton_layout, w = 120, h = 24, label = 'Mirror Arm', c = self.exe_MirrorArm ) self.collapseArmModule_Btn = pm.button( parent = self.armModulebutton_layout, w = 120, h = 24, label = 'Collapse Arm Module', c = self.exe_collapseArmModule )
def create(self, stationary_count, offset_count): ''' Create the fgshooter window. ''' if pm.window(self.window_name, exists=True): pm.deleteUI(self.window_name) pm.window(self.window_name, title=self.window_title) main_form = pm.formLayout(numberOfDivisions=2) self.column = pm.columnLayout(adjustableColumn=True) # Render Camera self.render_camera_field = pm.checkBoxGrp(label="Include Render Camera", value1=self.render_camera, changeCommand=self.updateRenderCamera) # Stationary Cameras pm.separator(height=20, style="in") pm.rowLayout(numberOfColumns=3, columnWidth3=(140, 80, 80), columnAlign=(1, 'right'), columnAttach3=("right", "both", "both")) pm.text("Stationary Cameras") self.stationary_field = pm.intField(value=stationary_count) pm.button(label="Update", height=22, command=self.update) pm.setParent('..') self.stationary = [] i = 0 while i < stationary_count: self.stationary.append(pm.floatFieldGrp(value1=self.stationary_frames[i], label="frame")) i += 1 # Offset Cameras pm.separator(height=20, style="in") pm.rowLayout(numberOfColumns=3, columnWidth3=(140, 80, 80), columnAlign=(1, 'right'), columnAttach3=("right", "both", "both")) pm.text("Offset Cameras") self.offset_field = pm.intField(value=offset_count) pm.button(label="Update", height=22, command=self.update) pm.setParent('..') self.offset = [] i = 0 while i < offset_count: self.offset.append(pm.intFieldGrp(value1=self.offset_frames[i], label="frame offset")) i += 1 pm.setParent('..') # remove/apply buttons self.remove_button = pm.button(label="Remove All", height=30, command=self.remove) self.apply_button = pm.button(label="Apply / Refresh", height=30, command=self.apply) pm.formLayout(main_form, edit=True, attachForm=[(self.column, "top", 2),(self.column, "left", 2),(self.column, "right", 2), (self.remove_button, "bottom", 2), (self.remove_button, "left", 2), (self.apply_button, "bottom", 2), (self.apply_button, "right", 2)], attachControl=(self.remove_button, "right", 1, self.apply_button), attachPosition=[ (self.remove_button, "right", 0, 1), (self.apply_button, "left", 1, 1)] ) pm.setParent('..') pm.showWindow()
def __init__(self): self.title = "Mantra Standin" self.fileName = "" self.density = .3 self.pointSize = 1 self.showPoints = False self.boundingBox = [-.5, -.5, -.5, .5, .5, .5] pm.setUITemplate("DefaultTemplate", pushTemplate=True) self.height = 500 with pm.frameLayout(collapsable=False, labelVisible=False) as frame: pm.textFieldButtonGrp("stdingfilename", label="GeoFileName", text="", buttonLabel="Select", bc=pm.Callback(self.selectGeoFile), cc=pm.Callback(self.setValue, "stdingfilename")) #string $b = `symbolButton -image "navButtonBrowse.xpm" browser`; with pm.frameLayout(collapsable=False, label="Points"): pm.checkBoxGrp("stdinshowpoints", label="Show Points", value1=False, cc=pm.Callback(self.setValue, "stdinshowpoints")) pm.floatFieldGrp("stdinptdensity", label="PointDensity", value1=0.3, cc=pm.Callback(self.setValue, "stdinptdensity")) pm.intFieldGrp("stdinptsize", label="PointSize", value1=1, cc=pm.Callback(self.setValue, "stdinptsize")) with pm.rowLayout(nc=2): pm.button(label="Create Standin", c=pm.Callback(self.createStandin)) pm.button(label="Cancel", c=pm.Callback(self.delete)) self.show()
def LuxEnvironmentCreateTab(self, dummy = None): log.debug("LuxEnvironmentCreateTab()") self.createGlobalsNode() if self.rendererTabUiDict.has_key('environment'): self.rendererTabUiDict.pop('environment') parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ENScrollLayout" envDict = {} self.rendererTabUiDict['environment'] = envDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Environment Lighting", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): envDict['pskSkyUse'] = pm.checkBoxGrp(label="Use physical Sky:", value1=True, cc=pm.Callback(self.uiCallback, tab="environment")) pm.connectControl(envDict['pskSkyUse'], self.renderGlobalsNodeName + ".usePhysicalSky", index=2) envDict['pskUsePhySun'] = pm.checkBoxGrp(label="Use Physical Sun:", value1=False, cc=pm.Callback(self.uiCallback, tab="environment")) pm.connectControl(envDict['pskUsePhySun'], self.renderGlobalsNodeName + ".physicalSun", index=2) envDict['pskPhySun'] = pm.textFieldGrp(label="Sun Object:", text="", editable=False) pm.separator() envDict['pskSunGain'] = pm.floatFieldGrp(label="Sun Gain:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskSunGain'], self.renderGlobalsNodeName + ".sunGain", index=2) envDict['pskTurb'] = pm.floatFieldGrp(label="Turbidity:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurb'], self.renderGlobalsNodeName + ".turbidity", index=2) envDict['pskSamples'] = pm.floatFieldGrp(label="Samples:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskSamples'], self.renderGlobalsNodeName + ".skySamples", index=2) envDict['pskRelSize'] = pm.floatFieldGrp(label="Sun Size:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskRelSize'], self.renderGlobalsNodeName + ".sunRelSize", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.physicalSun, pm.Callback(self.uiCallback, tab="environment")]) self.updateEnvironment()
def __init__(self): version = "1.0" if pm.window('RigToolsRenameWin', exists=True): pm.deleteUI('RigToolsRenameWin' , window=True) self.window = pm.window( 'RigToolsRenameWin' , title="Rig Tools Rename v%s" % version, iconName='RigToolsRenameWin' ) with pm.columnLayout(adj=1): with pm.columnLayout( adjustableColumn=True ): pm.text('Assumes only one rig in the scene.') pm.text('Will only rename things with default naming.') self.cbFld = pm.checkBoxGrp( numberOfCheckBoxes=2, label='Type:', labelArray2=['FK', 'IK'] ) self.nameFld = pm.textFieldGrp( label='Name' ) pm.button(l='Rename', c=self.rename) pm.showWindow( self.window )
def __init__(self): version = "1.0" if pm.window('RigToolsRenameWin', exists=True): pm.deleteUI('RigToolsRenameWin', window=True) self.window = pm.window('RigToolsRenameWin', title="Rig Tools Rename v%s" % version, iconName='RigToolsRenameWin') with pm.columnLayout(adj=1): with pm.columnLayout(adjustableColumn=True): pm.text('Assumes only one rig in the scene.') pm.text('Will only rename things with default naming.') self.cbFld = pm.checkBoxGrp(numberOfCheckBoxes=2, label='Type:', labelArray2=['FK', 'IK']) self.nameFld = pm.textFieldGrp(label='Name') pm.button(l='Rename', c=self.rename) pm.showWindow(self.window)
def rp_Twist(): """..............................................................................................//""" ncj = int(pm.intField('NCJ', q=1, v=1)) # > control joints # > selection list s = pm.ls(sl=1) rp_check(s) cj = pm.ls((s[0] + "_ctj_*"), typ="joint") # > twist and roll if pm.checkBoxGrp('MRL', q=1, v1=1): if pm.getAttr(s[0] + "_tw_hl.dtce") == 1: pm.setAttr((s[0] + "_tw_hl.dtce"), 0) pm.disconnectAttr((cj[0] + ".wm[0]"), (s[0] + "_tw_hl.dwum")) pm.disconnectAttr((cj[(ncj - 1)] + ".wm[0]"), (s[0] + "_tw_hl.dwue")) rl = str(pm.createNode('multiplyDivide', n=(s[0] + "_roll"))) pm.connectAttr((cj[0] + ".rx"), (rl + ".i1x"), f=1) pm.setAttr((rl + ".i2x"), (-1)) pm.connectAttr((cj[0] + ".rx"), (s[0] + "_tw_hl" + ".rol"), f=1) tw = str(pm.createNode('plusMinusAverage', n=(s[0] + "_twist"))) pm.connectAttr((rl + ".ox"), (tw + ".i1[0]"), f=1) pm.connectAttr((cj[(ncj - 1)] + ".rx"), (tw + ".i1[1]"), f=1) pm.connectAttr((tw + ".o1"), (s[0] + "_tw_hl" + ".twi"), f=1) # > advanced twist elif pm.objExists(s[0] + "_twist"): pm.delete((s[0] + "_twist"), (s[0] + "_roll")) pm.disconnectAttr((cj[0] + ".rx"), (s[0] + "_tw_hl" + ".rol")) pm.setAttr((s[0] + "_tw_hl.dtce"), 1) pm.setAttr((s[0] + "_tw_hl.dwut"), 4) pm.setAttr((s[0] + "_tw_hl.dwua"), 0) pm.connectAttr((cj[0] + ".wm[0]"), (s[0] + "_tw_hl.dwum")) pm.connectAttr((cj[(ncj - 1)] + ".wm[0]"), (s[0] + "_tw_hl.dwue")) pm.setAttr((s[0] + "_tw_hl.dwuy"), 1) pm.setAttr((s[0] + "_tw_hl.dwvy"), 1) pm.setAttr((s[0] + "_tw_hl.dwuz"), 0) pm.setAttr((s[0] + "_tw_hl.dwvz"), 0) pm.setAttr((s[0] + "_tw_hl" + ".rol"), 0) pm.setAttr((s[0] + "_tw_hl" + ".twi"), 0) pm.select(s[0])
def __init__(self): title="joints_on_curve" if(pm.windowPref(title, q=True, ex=True)): pm.windowPref(title, remove=True) if(pm.window(title, q=True, ex=True)): pm.deleteUI(title) #splineIK UI self.win = pm.window(title, title="Joints on Curve") self.layout = pm.rowColumnLayout() self.jntPlaceBtn = pm.radioButtonGrp(parent=self.layout, numberOfRadioButtons=2, label="Joint Placement", labelArray2=("CV's", "Even"), cc=self.jntPlaceBtn_change) self.jntSnapBtn = pm.radioButtonGrp(parent=self.layout, enable=False, numberOfRadioButtons=2, sl = 1, label="Snap To", labelArray2=("CV", "Closest Point On Curve")) self.jntLayoutBtn = pm.radioButtonGrp(parent=self.layout, enable=False, numberOfRadioButtons=2, sl = 1, label="Joint Layout", labelArray2=("Solo", "Hierarchy"), on1 = self.jntLayoutBtn_on) self.jntNumSlider = pm.intSliderGrp(enable=False, field=True, label='number of joints', minValue=4, maxValue=100, fieldMinValue=4, fieldMaxValue=100, value=0) self.crvNameField = pm.textFieldButtonGrp(enable=False, label='Target Curve', placeholderText='Enter Curve Name Here', buttonLabel='load selected', buttonCommand=self.crvNameField_load) self.jntNameFeild = pm.textFieldGrp(parent=self.layout,enable=False, label='Joint Base Name', placeholderText="name your joints", editable=True, tcc=self.jntNameFeild_change) self.chkboxGrp = pm.checkBoxGrp(enable=False, numberOfCheckBoxes=3, label='Add', labelArray3=['splineIK', 'CTRLs', 'stretchy']) self.goBtn = pm.button(parent=self.layout, enable=False,w = 100, h = 24, label="GO!", command=self.execute) self.noBtn = pm.button(parent=self.layout, enable=False,w = 100, h = 24, label="NO DONT DO IT!", command=self.close) self.format_string = "{PREFIX}_{INDEX}_{SUFFIX}" self.delete = [] self.win.show()
def AppleseedTranslatorCreateTab(self): self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "TrScrollLayout" uiDict = {} self.rendererTabUiDict['translator'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "TrColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Translator", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='translatorVerbosity', uiType='enum', displayName='Verbosity:', default='0', uiDict=uiDict) with pm.frameLayout(label="appleseed Output", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='exportMode', uiType='enum', displayName='Output Mode:', default='0', uiDict=uiDict, callback=self.AppleseedTranslatorUpdateTab) with pm.rowLayout(nc=3) as uiDict['outputFilenameLayout']: pm.text(label="Output Filename:") uiDict['fileNameField'] = pm.textField(text=self.renderGlobalsNode.exportSceneFileName.get()) pm.symbolButton(image="navButtonBrowse.png", c=self.outputFileBrowse) pm.connectControl(uiDict['fileNameField'], self.renderGlobalsNodeName + ".exportSceneFileName", index=2) with pm.frameLayout(label="Optimize Textures", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): optiDict = {} ui = pm.checkBoxGrp(label="Use Optimized Textures:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".useOptimizedTextures", index=2) with pm.rowLayout(nc=3): self.rendererTabUiDict['opti'] = optiDict pm.text(label="Optimized Textures Dir:") optiDict['optiField'] = pm.textField(text=self.renderGlobalsNode.optimizedTexturePath.get()) pm.symbolButton(image="navButtonBrowse.png", c=self.dirBrowse) pm.connectControl(optiDict['optiField'], self.renderGlobalsNodeName + ".optimizedTexturePath", index=2) with pm.frameLayout(label="Additional Settings", collapsable=True, collapse=False): ui = pm.floatFieldGrp(label="Scene Scale:", value1=1.0, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".sceneScale", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) self.AppleseedTranslatorUpdateTab()
def TheaTranslatorCreateTab(self): log.debug("TheaTranslatorCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query = True) pm.setUITemplate("attributeEditorTemplate", pushTemplate = True) scLo = self.rendererName + "TrScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness = 0): with pm.columnLayout(self.rendererName + "TrColumnLayout", adjustableColumn = True, width = 400): with pm.frameLayout(label="Translator", collapsable = True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".translatorVerbosity") ui = pm.attrEnumOptionMenuGrp(label = "Translator Verbosity", at=self.renderGlobalsNodeName + ".translatorVerbosity", ei = self.getEnumList(attr)) with pm.frameLayout(label="Thea XML export", collapsable = True, collapse=False): ui = pm.checkBoxGrp(label="Export scene XML file:", value1 = False) pm.connectControl(ui, self.renderGlobalsNodeName + ".exportXMLFile", index = 2 ) xmlDict = {} self.rendererTabUiDict['xml'] = xmlDict with pm.rowColumnLayout(nc=3, width = 120): pm.text(label="XMLFileName:", width = 60, align="right") defaultXMLPath = pm.workspace.path + "/" + pm.sceneName().basename().split(".")[0] + ".Thea" xmlDict['xmlFile'] = pm.textField(text = defaultXMLPath, width = 60) pm.symbolButton(image="navButtonBrowse.png", c=self.xmlFileBrowse) pm.connectControl(xmlDict['xmlFile'], self.renderGlobalsNodeName + ".exportXMLFileName", index = 2 ) with pm.frameLayout(label="Optimize Textures", collapsable = True, collapse=False): with pm.rowColumnLayout(nc=3, width = 120): optiDict = {} pm.text(label="OptimizedTex Dir:", width = 60, align="right") self.rendererTabUiDict['opti'] = optiDict pm.symbolButton(image="navButtonBrowse.png", c=self.dirBrowse) optiDict['optiField'] = pm.textField(text = self.renderGlobalsNode.optimizedTexturePath.get(), width = 60) pm.connectControl(optiDict['optiField'], self.renderGlobalsNodeName + ".optimizedTexturePath", index = 2 ) with pm.frameLayout(label="Additional Settings", collapsable = True, collapse=False): ui = pm.floatFieldGrp(label="Scene scale:", value1 = 1.0, numberOfFields = 1) pm.connectControl(ui, self.renderGlobalsNodeName + ".sceneScale", index = 2 ) pm.setUITemplate("attributeEditorTemplate", popTemplate = True) pm.formLayout(parentForm, edit = True, attachForm = [ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def option_box_apply(self): # Get the selected blendShapes. src_blend_shape = pm.optionMenuGrp('sourceBlendShapeList', q=True, v=True) dst_blend_shape = pm.optionMenuGrp('dstBlendShapeList', q=True, v=True) src_blend_shape = pm.ls(src_blend_shape)[0] dst_blend_shape = pm.ls(dst_blend_shape)[0] if not src_blend_shape: pm.warning('No source blend shape is selected') return if not dst_blend_shape: pm.warning('No target blend shape is selected') return if src_blend_shape == dst_blend_shape: pm.warning('The source and destination blend shapes are the same') return # These were selected from the UI, so unless the scene changed while the dialog was # open these should always be blendShape nodes. assert isinstance( src_blend_shape, pm.nodetypes.BlendShape ), 'Node %s isn\'t a blend shape' % src_blend_shape.nodeName() assert isinstance( dst_blend_shape, pm.nodetypes.BlendShape ), 'Node %s isn\'t a blend shape' % dst_blend_shape.nodeName() # Get the selected blend shape targets to retarget. blend_shape_targets = self.get_selected_src_blend_shape_targets() blend_shape_indices = [ target.index() for target in blend_shape_targets ] if not blend_shape_indices: pm.warning('No blend shape targets are selected') return src_blend_shape_targets = pm.ls( pm.blendShape(src_blend_shape, q=True, g=True)) dst_blend_shape_targets = pm.ls( pm.blendShape(dst_blend_shape, q=True, g=True)) # Make sure that both blend shapes have just one target. assert len( src_blend_shape_targets ) == 1, 'Blend shape %s must have one target, has %i: %s' % ( src_blend_shape.nodeName(), len(src_blend_shape_targets), ', '.join(src_blend_shape_targets)) assert len( dst_blend_shape_targets ) == 1, 'Blend shape %s must have one target, has %i: %s' % ( dst_blend_shape.nodeName(), len(dst_blend_shape_targets), ', '.join(dst_blend_shape_targets)) # Find the transforms for the source and destination node. src_node = src_blend_shape_targets[0].getTransform() dst_node = dst_blend_shape_targets[0].getTransform() # Check the selected nodes. assert isinstance( src_node, pm.nodetypes.Transform ), 'The source node %s isn\'t a transform' % src_node.nodeName() assert isinstance( dst_node, pm.nodetypes.Transform ), 'The destination node %s isn\'t a transform' % dst_node.nodeName() assert src_node.getShape( ) is not None, 'The source node %s isn\'t a mesh' % dst_node.nodeName( ) assert dst_node.getShape( ) is not None, 'The destination node %s isn\'t a mesh' % dst_node.nodeName( ) # # Find all blendShapes that are following this one. # following_blend_shapes = WrappedBlendShapes.find_following_blend_shapes(src_blend_shape) # # # Find a blend shape node on dst_node that's in following_blend_shapes. We can either # # look in the history of the output mesh, or in the future of the base mesh, and both can # # have wrong matches. # for node in dst_node.getShapes()[-1].listFuture(): # if node in following_blend_shapes: # dst_blend_shape = node # break # else: # raise RuntimeError('Couldn\'t find a blend shape node on %s which is following %s' % (dst_node.name(), src_blend_shape.name())) connect_weights = pm.checkBoxGrp('connectWeightsToSource', q=True, value1=False) use_cvwrap = pm.checkBoxGrp('useCvWrap', q=True, value1=False) redst_blend_shapes(src_node, dst_node, src_blend_shape, dst_blend_shape, blend_shape_indices, connect_weights=connect_weights, use_cvwrap=use_cvwrap)
def option_box_save(self): self.optvars[ 'zBlendShapeRetargettingConnectWeightsToSource'] = pm.checkBoxGrp( 'connectWeightsToSource', q=True, value1=False) self.optvars['zBlendShapeRetargettingUseCvwrap'] = pm.checkBoxGrp( 'useCvWrap', q=True, value1=False)
def FujiTranslatorCreateTab(self): log.debug("FujiTranslatorCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "TrScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "TrColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Translator", collapsable=True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".translatorVerbosity") ui = pm.attrEnumOptionMenuGrp( label="Translator Verbosity", at=self.renderGlobalsNodeName + ".translatorVerbosity", ei=self.getEnumList(attr)) # with pm.frameLayout(label="Fuji XML export", collapsable = True, collapse=False): # ui = pm.checkBoxGrp(label="Export scene XML file:", value1 = False) # pm.connectControl(ui, self.renderGlobalsNodeName + ".exportXMLFile", index = 2 ) # xmlDict = {} # self.rendererTabUiDict['xml'] = xmlDict # with pm.rowColumnLayout(nc=3, width = 120): # pm.text(label="XMLFileName:", width = 60, align="right") # defaultXMLPath = pm.workspace.path + "/" + pm.sceneName().basename().split(".")[0] + ".Fuji" # xmlDict['xmlFile'] = pm.textField(text = defaultXMLPath, width = 60) # pm.symbolButton(image="navButtonBrowse.png", c=self.xmlFileBrowse) # pm.connectControl(xmlDict['xmlFile'], self.renderGlobalsNodeName + ".exportXMLFileName", index = 2 ) with pm.frameLayout(label="Optimize Textures", collapsable=True, collapse=False): optiDict = {} ui = pm.checkBoxGrp(label="Use Optimized Textures:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".useOptimizedTextures", index=2) with pm.rowLayout(nc=3): self.rendererTabUiDict['opti'] = optiDict pm.text(label="OptimizedTex Dir:") optiDict['optiField'] = pm.textField( text=self.renderGlobalsNode.optimizedTexturePath. get()) pm.symbolButton(image="navButtonBrowse.png", c=self.dirBrowse) pm.connectControl(optiDict['optiField'], self.renderGlobalsNodeName + ".optimizedTexturePath", index=2) with pm.frameLayout(label="Additional Settings", collapsable=True, collapse=False): ui = pm.floatFieldGrp(label="Scene scale:", value1=1.0, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".sceneScale", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[(scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0)])
def move_all_anim_curves(): def check_overlapping(anim_curves, choice, current_time, offset_val): for anim_curve in anim_curves: key_cnt = anim_curve.numKeys() message = 'Some Keys are overlapping within Offset Value\n' message += 'Do you want continue on Moving other Keys ?\n' for i in range(0, key_cnt): key_time = anim_curve.getTime(i) if choice == 'forward': if key_time <= current_time + offset_val: range_dialog = pm.confirmDialog(title='Error', message=message, button=['Yes', 'No'], cancelButton='No', dismissString='No') if range_dialog == 'Yes': return 1 else: raise RuntimeError( 'Move Keys process interrupted by User.') if choice == 'back': if key_time >= current_time + offset_val: range_dialog = pm.confirmDialog(title='Error', message=message, button=['Yes', 'No'], cancelButton='No', dismissString='No') if range_dialog == 'Yes': return 1 else: raise RuntimeError( 'Move Keys process interrupted by User.') def move_all_keys(choice): offset_val = offset_intfield.getValue() if offset_val < 1: raise RuntimeError('Enter an Offset Value greater than 0.') if choice == 'back': offset_val = offset_intfield.getValue() * -1 unlock_val = unlock_state.getValue1() current_time = pm.currentTime() anim_curves = pm.ls(type='animCurve') non_moved_curves = [] if choice == 'back': check_overlapping(anim_curves, choice, current_time, offset_val) for anim_curve in anim_curves: try: if unlock_val is True and anim_curve.isLocked(): anim_curve.setLocked(0) key_cnt = anim_curve.numKeys() for i in range(1, key_cnt + 1): if choice == 'forward': ind = key_cnt - i if choice == 'back': ind = i - 1 if anim_curve.getTime(ind) >= current_time: pm.keyframe(anim_curve, index=ind, iub=False, animation='objects', relative=True, option='move', tc=offset_val) except: if anim_curve not in non_moved_curves: non_moved_curves.append(anim_curve) continue if not non_moved_curves: pm.confirmDialog(title='Info', message='Keys Moved Successfully.', button='OK') else: message = 'Anim Curves can NOT be moved:\r\n' message += '\r' for i in range(0, len(non_moved_curves)): message += '%s\n' % non_moved_curves[i] if i > 30: message += '+ More...\n' break print(non_moved_curves) pm.confirmDialog(title='Error', message=message, button='OK') # pdm.close() window_name = 'move_keys_window' if pm.window(window_name, q=True, ex=True): pm.deleteUI(window_name, wnd=True) move_keys_win = pm.window(window_name, title='Move Keys', s=0, rtf=1) with pm.columnLayout(rs=5, cal='center'): pm.text(l=' MOVE ALL KEYS') pm.text(l=' relatively from currentTime') pm.text(l=' (overlapping Keys will NOT be moved)') with pm.rowColumnLayout(nc=3, cw=[(1, 70), (2, 70), (3, 70)]): def exec_move_all_keys_back(*args): move_all_keys('back') pm.button(l='-', c=exec_move_all_keys_back) offset_intfield = pm.intField() def exec_move_all_keys_forward(*args): move_all_keys('forward') pm.button(l='+', c=exec_move_all_keys_forward) with pm.columnLayout(): unlock_state = pm.checkBoxGrp(l='Unlock & Move', v1=1) pm.showWindow(move_keys_win)
def randomizer_createUserInterface(): """-------------------------------------------------------------------------- Create User Interface Procedure --------------------------------------------------------------------------""" pm.window('randomizer_window', s=0, rtf=0, t="randomizer", wh=(300, 700)) # Create UI elements pm.columnLayout('mainColumnLayout', h=930, w=248, columnAlign="center", adjustableColumn=1) pm.separator('selectedTransformObjectsSeparator', h=10, w=240, st="none") pm.text('selectedTransformObjectsText', fn="boldLabelFont", h=24, l="selected transform Objects", w=240, al="center") pm.textScrollList('selectedTransformObjectsTextScrollList', h=80, w=240) pm.button('loadObjectsButton', h=28, c=lambda *args: randomizer_loadSelection(0), l="load transform Objects", w=240) pm.separator('selectedMaterialsSeparator', h=10, w=240, st="none") pm.text('selectedMaterialsText', fn="boldLabelFont", h=24, l="selected Materials", w=240, al="center") pm.textScrollList('selectedMaterialsTextScrollList', h=80, w=240) pm.button('loadMaterialsButton', h=28, c=lambda *args: randomizer_loadSelection(1), l="load Materials", w=240) pm.separator('transformAttributesSeparator', h=10, w=240, st="none") pm.text('randomizeAttributesText', fn="boldLabelFont", h=24, l="randomize Attributes", w=240, al="center") pm.checkBoxGrp('randomizeAttributesCheckBoxGrp', h=24, l4="Material", l2="Rotate", l3="Scale", w=240, l1="Translate", ncb=4, cw=[(1, 67), (2, 57), (3, 50), (4, 57)]) pm.separator('translateAttributesSeparator', h=10, w=240, st="none") pm.text('translateText', fn="boldLabelFont", h=24, l="Translate", w=240, al="center") pm.floatFieldGrp('minMaxXtranslateFloatFieldGrp', pre=3, el="max X", bgc=(0.25, 0, 0), h=24, l="min X", nf=2, v1=0, v2=0, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.floatFieldGrp('minMaxYtranslateFloatFieldGrp', pre=3, el="max Y", bgc=(0, 0.25, 0), h=24, l="min Y", nf=2, v1=0, v2=0, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.floatFieldGrp('minMaxZtranslateFloatFieldGrp', pre=3, el="max Z", bgc=(0, 0, 0.25), h=24, l="min Z", nf=2, v1=0, v2=0, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.separator('rotateAttributesSeparator', h=10, w=240, st="none") pm.text('rotateText', fn="boldLabelFont", h=24, l="Rotate", w=240, al="center") pm.floatFieldGrp('minMaxXrotateFloatFieldGrp', pre=3, el="max X", bgc=(0.25, 0, 0), h=24, l="min X", nf=2, v1=0, v2=0, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.floatFieldGrp('minMaxYrotateFloatFieldGrp', pre=3, el="max Y", bgc=(0, 0.25, 0), h=24, l="min Y", nf=2, v1=0, v2=0, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.floatFieldGrp('minMaxZrotateFloatFieldGrp', pre=3, el="max Z", bgc=(0, 0, 0.25), h=24, l="min Z", nf=2, v1=0, v2=0, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.separator('scaleAttributesSeparator', h=10, w=240, st="none") pm.text('scaleText', fn="boldLabelFont", h=24, l="Scale", w=240, al="center") pm.floatFieldGrp('minMaxXscaleFloatFieldGrp', pre=3, el="max X", bgc=(0.25, 0, 0), h=24, l="min X", nf=2, v1=1, v2=1, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.floatFieldGrp('minMaxYscaleFloatFieldGrp', pre=3, el="max Y", bgc=(0, 0.25, 0), h=24, l="min Y", nf=2, v1=1, v2=1, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.floatFieldGrp('minMaxZscaleFloatFieldGrp', pre=3, el="max Z", bgc=(0, 0, 0.25), h=24, l="min Z", nf=2, v1=1, v2=1, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.separator('randomizeSelectionSeparator', h=10, w=240, st="none") pm.button('randomizeAbsoluteButton', h=28, c=lambda *args: randomizer_randomizeSelection(), l="randomize Abolute", w=240) pm.button('randomizeRelativeButton', h=28, c=lambda *args: randomizer_randomizeSelection(relative=True), l="randomize Relative", w=240) pm.separator('timeAttributesSeparator', h=10, w=240, st="none") pm.text('timeText', fn="boldLabelFont", h=24, l="Time", w=240, al="center") pm.checkBoxGrp('randomizeKeyframeCheckBoxGrp', h=24, l2="Rotate", l3="Scale", w=240, l1="Translate", v1=1, v2=1, v3=1, ncb=3, cw=[(1, 67), (2, 57), (3, 50)]) pm.intFieldGrp('minMaxTimeIntFieldGrp', el="max", bgc=(0, 0, 0), h=24, l="min", nf=2, v1=0, v2=10, w=240, cw=[(1, 60), (2, 60), (3, 60), (4, 60)]) pm.button('setUniformKeyframe', h=28, c=lambda *args: rand_KeyframeUI(objects=None, axis=["X", "Y", "Z"], uniform=True, uniformObject=False, min=-10, max=10, step=1), l="Randomize all Channels together", w=240) pm.button('setRandomKeyframe', h=28, c=lambda *args: rand_KeyframeUI(objects=None, axis=["X", "Y", "Z"], uniform=False, uniformObject=False, min=-10, max=10, step=1), l="Randomize each Channel seperately", w=240) pm.button('setUniformKeyframeAll', h=28, c=lambda *args: rand_KeyframeUI(objects=None, axis=["X", "Y", "Z"], uniform=False, uniformObject=True, min=-10, max=10, step=1), l="Move all Keyframes together", w=240) pm.separator('undoSeparator', h=10, w=240, st="none") pm.button('undoButton', h=28, c=lambda *args: pm.undo(), l="undo", w=240) #pm.iconTextButton('staschiIconTextButton', h=28, c=lambda *args: randomizer_loadHelpWebsite(), l="www.staschi.com", w=240, st="textOnly") pm.setParent('..') pm.setParent('..') # Display UI pm.showWindow('randomizer_window')
def create(self): # Create default render globals node if needed. createGlobalNodes() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) columnWidth = 400 with pm.scrollLayout("appleseedScrollLayout", horizontalScrollBarThickness=0): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): with pm.frameLayout(label="Sampling", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.intFieldGrp( label="Render Passes", numberOfFields=1), attrName="passes") self._addControl( ui=pm.checkBoxGrp( label="Adaptive Sampling", changeCommand=self.__adaptiveSamplerChanged), attrName="adaptiveSampling") adaptiveSampling = mc.getAttr("appleseedRenderGlobals.adaptiveSampling") self._addControl( ui=pm.intFieldGrp( label="Min Samples", numberOfFields=1, enable=adaptiveSampling), attrName="minPixelSamples") self._addControl( ui=pm.intFieldGrp( label="Max Samples", numberOfFields=1), attrName="samples") self._addControl( ui=pm.intFieldGrp( label="Batch Sample Size", numberOfFields=1, enable=adaptiveSampling), attrName="batchSampleSize") self._addControl( ui=pm.floatFieldGrp( label="Noise Threshold", numberOfFields=1, enable=adaptiveSampling), attrName="sampleNoiseThreshold") self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Pixel Filter", enumeratedItem=self._getAttributeMenuItems("pixelFilter")), attrName="pixelFilter") self._addControl( ui=pm.floatFieldGrp( label="Pixel Filter Size", numberOfFields=1), attrName="pixelFilterSize") self._addControl( ui=pm.intFieldGrp( label="Tile Size", numberOfFields=1), attrName="tileSize") with pm.frameLayout(label="Lighting", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Lighting Engine", enumeratedItem=self._getAttributeMenuItems("lightingEngine")), attrName="lightingEngine") with pm.frameLayout(label="Path Tracing", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.checkBoxGrp( label="Limit Bounces", changeCommand=self.__limitBouncesChanged), attrName="limitBounces") limitBounces = mc.getAttr( "appleseedRenderGlobals.limitBounces") self._addControl( ui=pm.intFieldGrp( label="Global Bounces", numberOfFields=1, enable=limitBounces), attrName="bounces") self._addControl( ui=pm.intFieldGrp( label="Diffuse Bounces", numberOfFields=1, enable=limitBounces), attrName="diffuseBounces") self._addControl( ui=pm.intFieldGrp( label="Glossy Bounces", numberOfFields=1, enable=limitBounces), attrName="glossyBounces") self._addControl( ui=pm.intFieldGrp( label="Specular Bounces", numberOfFields=1, enable=limitBounces), attrName="specularBounces") self._addControl( ui=pm.floatFieldGrp( label="Light Samples", numberOfFields=1), attrName="lightSamples") self._addControl( ui=pm.floatFieldGrp( label="Environment Samples", numberOfFields=1), attrName="envSamples") self._addControl( ui=pm.checkBoxGrp(label="Clamp Roughness"), attrName="clampRoughness") self._addControl( ui=pm.checkBoxGrp(label="Caustics"), attrName="caustics") self._addControl( ui=pm.floatFieldGrp( label="Max Ray Intensity", numberOfFields=1), attrName="maxRayIntensity") with pm.frameLayout(label="Scene", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Override Shaders", enumeratedItem=self._getAttributeMenuItems("diagnostics")), attrName="diagnostics") self._addControl( ui=pm.floatFieldGrp( label="Scene Scale", numberOfFields=1), attrName="sceneScale") with pm.rowLayout("appleseedRowLayout", nc=3): pm.text("Environment Light") ui = pm.optionMenu( changeCommand=self.__environmentLightSelected) pm.menuItem(label="<none>") for envLight in g_environmentLightsList: pm.menuItem(parent=ui, label=envLight) # Set the currently selected environment light in the menu. connections = mc.listConnections( "appleseedRenderGlobals.envLight") if connections: node = connections[0] if mc.nodeType(node) == "transform": shapes = mc.listRelatives(node, shapes=True) assert shapes node = shapes[0] pm.optionMenu(ui, edit=True, value=node) else: pm.optionMenu(ui, edit=True, value="<none>") self._uis["envLight"] = ui logger.debug( "Created globals env light menu, name = %s" % ui) self._addControl( ui=pm.checkBoxGrp(label="Environment Visible"), attrName="bgLight") with pm.frameLayout(label="Motion Blur", collapsable=True, collapse=True): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.checkBoxGrp( label="Motion Blur", changeCommand=self.__motionBlurChanged), attrName="motionBlur") enableMotionBlur = mc.getAttr( "appleseedRenderGlobals.motionBlur") self._addControl( ui=pm.intFieldGrp( label="Camera Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbCameraSamples") self._addControl( ui=pm.intFieldGrp( label="Transformation Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbTransformSamples") self._addControl( ui=pm.intFieldGrp( label="Deformation Samples", numberOfFields=1, enable=enableMotionBlur), attrName="mbDeformSamples") self._addControl( ui=pm.floatFieldGrp( label="Shutter Open", numberOfFields=1, enable=enableMotionBlur), attrName="shutterOpen") self._addControl( ui=pm.floatFieldGrp( label="Shutter Close", numberOfFields=1, enable=enableMotionBlur), attrName="shutterClose") with pm.frameLayout(label="System", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.intFieldGrp( label="Threads", numberOfFields=1), attrName="threads") self._addControl( ui=pm.intFieldGrp( label="Texture Cache Size (MB)", numberOfFields=1), attrName="maxTexCacheSize") with pm.frameLayout(label="Experimental", collapsable=True, collapse=False): with pm.columnLayout("appleseedColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.checkBoxGrp(label="Use Embree"), attrName="useEmbree") pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout( parentForm, edit=True, attachForm=[ ("appleseedScrollLayout", "top", 0), ("appleseedScrollLayout", "bottom", 0), ("appleseedScrollLayout", "left", 0), ("appleseedScrollLayout", "right", 0)]) logger.debug("Created appleseed render global main tab") # Update the newly created tab. self.update()
def rp_cr(): """..............................................................................................//""" ncj = int(pm.intField('NCJ', q=1, v=1)) # > input data # > control joints pcj = int(pm.intField('PCJ', q=1, v=1)) # > pow control joints nj = ((ncj * pcj) - (pcj - 1)) # > joints pm.intField('NJ', e=1, v=(nj - 1)) oj = int(pm.intField('OJ', q=1, v=1)) # > orient joint # > selection list s = pm.ls(sl=1) rp_check(s) ss = pm.listRelatives(s[0], s=1) # > selection shape tss = str(pm.objectType(ss[0])) # > type selection shape typ = 0 if pm.mel.gmatch(tss, "nurbsCurve"): typ = 0 if pm.mel.gmatch(tss, "bezierCurve"): typ = 1 rp_del() pm.delete(s[0], ch=1) if typ == 0: pm.rebuildCurve(s[0], s=(nj - 1), kt=1, d=3, kep=1) pm.setAttr((s[0] + ".it"), 0) # > curve info is_ = str(rp_info(s)) iv = float(pm.getAttr(is_ + ".al")) # > group folders rg = str(pm.group(em=1, n=(s[0] + "_rig"))) sg = str(pm.group(em=1, n=(s[0] + "_sistem"))) # > twist joint sj = [] ds = str(pm.curve(p=[(0, 0, 0), (iv, 0, 0)], k=[0, 1], d=1, n=(s[0] + "_tw"))) pm.rebuildCurve(ds, s=(nj - 1), ch=0, d=1, kep=1) if nj == 3: pm.delete(ds + ".cv[1]") pm.delete(ds + ".cv[2]") for i in range(0, nj): t = (pm.xform((ds + ".cv[" + str(i) + "]"), q=1, ws=1, t=1)) sj[i] = str(pm.joint(p=((t.x), (t.y), (t.z)), rad=1, n=(s[0] + "_tw_" + str((i + 1))))) pm.setAttr((sj[i] + ".ro"), 3) pm.pm.cmds.rotate(oj, 0, 0, sj[0], r=1, os=1) pm.makeIdentity(sj[0], a=1, r=1) h = pm.ikHandle(c=s[0], ee=sj[nj], ccv=0, sol="ikSplineSolver", n=(s[0] + "_tw_hl"), sj=sj[0]) pm.parent(sj[0], h[0], sg) pm.delete(ds) # > control joint pm.select(s[0], r=1) pm.mel.selectCurveCV("all") cv = pm.ls(fl=1, sl=1) p = (((len(cv)) + 2) / 3) pm.select(cl=1) cj = [] if pm.checkBoxGrp('CTJP', q=1, v1=1): pm.setAttr((s[0] + ".it"), 1) # > create joints for i in range(0, (len(cv))): t = (pm.xform(cv[i], q=1, ws=1, t=1)) pm.select(cl=1) cj[i] = str(pm.joint(p=((t.x), (t.y), (t.z)), rad=2, n=(s[0] + "_ctj_" + str((i + 1))))) pm.setAttr((cj[i] + ".ro"), 3) # > aim joints for i in range(0, ((len(cv)) - 1)): pm.aimConstraint(cj[i], cj[i + 1], w=1, o=(0, 180, 0)) pm.aimConstraint(cj[1], cj[0], w=1, o=(0, 0, 0)) pm.delete(cj, cn=1) pm.makeIdentity(cj, a=1, r=1) # > correct aim joints for i in range(0, (p - 1)): pm.aimConstraint(cj[i + (2 * i)], cj[i + 1 + (2 * i)], w=1, o=(0, 0, 0)) for i in range(1, (p - 0)): pm.aimConstraint(cj[i + (2 * i)], cj[i - 1 + (2 * i)], w=1, o=(0, 0, 0)) pm.delete(cj, cn=1) pm.makeIdentity(cj, a=1, r=1) else: for i in range(0, ncj): t = (pm.xform(sj[(i * pcj)], q=1, ws=1, t=1)) pm.select(cl=1) cj[i] = str(pm.joint(p=((t.x), (t.y), (t.z)), rad=2, n=(s[0] + "_ctj_" + str((i + 1))))) pm.setAttr((cj[i] + ".ro"), 3) pm.parentConstraint(sj[(i * pcj)], cj[i], w=1) pm.delete(cj[i], cn=1) pm.makeIdentity(cj[i], a=1, r=1) pm.parent(cj, sg) pm.parent(sg, s[0], rg) # > connect scale sw = str(pm.createNode('multiplyDivide', n=(s[0] + "_s"))) pm.setAttr((sw + ".op"), 2) pm.connectAttr((is_ + ".al"), (sw + ".i1x"), f=1) pm.connectAttr((rg + ".sx"), (sw + ".i2x"), f=1) sx = str(pm.createNode('multiplyDivide', n=(s[0] + "_sx"))) pm.setAttr((sx + ".op"), 2) pm.connectAttr((sw + ".ox"), (sx + ".i1x"), f=1) pm.setAttr((sx + ".i2x"), iv) for i in range(0, nj): pm.connectAttr((sx + ".ox"), (sj[i] + ".sx"), f=1) if pm.checkBoxGrp('CTJ', q=1, v1=1): cg = str(pm.group(em=1, n=(s[0] + "_control"))) # > add control if pm.checkBoxGrp('CTJP', q=1, v1=1): c = [] t = [] for i in range(0, (len(cv))): pm.connectAttr((cj[i] + ".t"), (ss[0] + ".cp[" + str(i) + "]"), f=1) ct = rp_create_control(s, i) c[i] = ct[0] t[i] = ct[1] pm.parentConstraint(cj[i], ct[1], w=1) pm.delete(ct[1], cn=1) pm.makeIdentity(ct[1], a=1, t=1) pm.parentConstraint(ct[0], cj[i], mo=1, w=1) pm.parent(ct[1], cg) scg = [] for i in range(0, p): scg[i] = str(pm.group(em=1, n=("scGrp_" + s[0] + "_" + str((i + 1))))) scgpc = pm.parentConstraint(c[i + (2 * i)], scg[i], w=1) pm.delete(scgpc[0]) pm.makeIdentity(scg[i], a=1, t=1) pm.parent(scg[i], c[i + (2 * i)]) pm.connectAttr((c[i + (2 * i)] + ".change"), (scg[i] + ".sx"), f=1) pm.connectAttr((c[i + (2 * i)] + ".change"), (scg[i] + ".sy"), f=1) pm.connectAttr((c[i + (2 * i)] + ".change"), (scg[i] + ".sz"), f=1) for i in range(0, (p - 1)): pm.parent(t[i + 1 + (2 * i)], scg[i]) pm.setAttr((t[i + 1 + (2 * i)] + ".sx"), 0.5) pm.setAttr((t[i + 1 + (2 * i)] + ".sy"), 0.5) pm.setAttr((t[i + 1 + (2 * i)] + ".sz"), 0.5) pm.setAttr((c[i + 1 + (2 * i)] + ".bezier"), cb=0, k=0, l=1) pm.setAttr((c[i + 1 + (2 * i)] + ".change"), cb=0, k=0, l=1) pm.setAttr((c[i + 1 + (2 * i)] + ".rx"), cb=0, k=0, l=1) pm.setAttr((c[i + 1 + (2 * i)] + ".ry"), cb=0, k=0, l=1) pm.setAttr((c[i + 1 + (2 * i)] + ".rz"), cb=0, k=0, l=1) pm.connectAttr((c[i + (2 * i)] + ".bezier"), (t[i + 1 + (2 * i)] + ".v"), f=1) for i in range(1, (p - 0)): pm.parent(t[i - 1 + (2 * i)], scg[i]) pm.setAttr((t[i - 1 + (2 * i)] + ".sx"), 0.5) pm.setAttr((t[i - 1 + (2 * i)] + ".sy"), 0.5) pm.setAttr((t[i - 1 + (2 * i)] + ".sz"), 0.5) pm.setAttr((c[i - 1 + (2 * i)] + ".bezier"), cb=0, k=0, l=1) pm.setAttr((c[i - 1 + (2 * i)] + ".change"), cb=0, k=0, l=1) pm.setAttr((c[i - 1 + (2 * i)] + ".rx"), cb=0, k=0, l=1) pm.setAttr((c[i - 1 + (2 * i)] + ".ry"), cb=0, k=0, l=1) pm.setAttr((c[i - 1 + (2 * i)] + ".rz"), cb=0, k=0, l=1) pm.connectAttr((c[i + (2 * i)] + ".bezier"), (t[i - 1 + (2 * i)] + ".v"), f=1) else: for i in range(0, (len(cj))): ct = rp_create_control(s, i) pm.parentConstraint(cj[i], ct[1], w=1) pm.delete(ct[1], cn=1) pm.makeIdentity(ct[1], a=1, t=1) pm.parentConstraint(ct[0], cj[i], mo=1, w=1) pm.parent(ct[1], cg) pm.connectAttr((ct[0] + ".change"), (cj[i] + ".sx"), f=1) pm.connectAttr((ct[0] + ".change"), (cj[i] + ".sy"), f=1) pm.connectAttr((ct[0] + ".change"), (cj[i] + ".sz"), f=1) pm.parent(cg, rg) if pm.checkBoxGrp('CTJP', q=1, v1=1) == 0: pm.skinCluster(cj, s[0], mi=2, rui=1, dr=2.0, n=(s[0] + "_skin")) # > connection control to curve pm.select(h[0]) # > end pm.ToggleLocalRotationAxes() pm.select(s[0]) pm.mel.rp_Twist() print " :) > rope riging curve > " + s[0] + "\n"
def start_optimize_fbx(self, export_files): """ 优化FBX文件 主要功能: 1.清除命名空间 2.清理头部的动画曲线 :param export_files: 需要输出的文件列表 :return: True """ # export_grp = ["character_root", "final_model_grp"] system_namespace = ['UI', 'shared'] for export_file in export_files: # 新建场景,打开指定场景 cmds.file(new=True, force=True) cmds.file(export_file, o=True) file_name = cmds.file( q=1, sceneName=True, shortName=True).split('.')[0] print(file_name + ' already open!') # 将MAYA的时间格式改成ntsc(30帧每秒) common.set_time_unit(unit='ntsc') # 命名空间列表 all_namespace_list = pm.namespaceInfo(lon=True) for name in system_namespace: all_namespace_list.remove(name) # 清楚命名空间 for namespace in all_namespace_list: pm.namespace(removeNamespace=":%s" % namespace, mergeNamespaceWithParent=True) if pm.objExists("character_Group"): pm.delete("character_Group") # 清理头部动画 if pm.checkBoxGrp(self.fbx_optimize, q=True, v1=True): pm.select("head_JNT", hi=True) for jnt in pm.ls(sl=True): anim_attrs = pm.listAttr(jnt, k=True) for anim_attr in anim_attrs: cmd = '''cutKey -cl -t ":" -f ":" -at %s %s;''' % ( anim_attr, jnt.controller_name()) mel.eval(cmd) # 清理指定骨骼的动画 if pm.checkBoxGrp(self.fbx_optimize, q=True, v2=True): target_joint = pm.textFieldGrp( self.optimize_target, q=True, text=True) if pm.objExists(target_joint): # pm.select(target_joint) anim_attrs = pm.listAttr(target_joint, k=True) for anim_attr in anim_attrs: cmd = '''cutKey -cl -t ":" -f ":" -at %s %s;''' % ( anim_attr, target_joint) mel.eval(cmd) offset_value = pm.floatFieldGrp( self.offset_target, q=True, value=True) pm.PyNode(target_joint).translate.set(offset_value) export_file_name = "%s/%s.fbx" % (self.output_path, file_name) # 清理模型组 if pm.checkBoxGrp(self.fbx_optimize, q=True, v3=True): if pm.objExists("MotionSystem"): pm.delete("MotionSystem") if pm.objExists("Geometry"): pm.delete("Geometry") if len(pm.ls(type="mesh")) > 0: for item in pm.ls(type="mesh"): parent_node = item.getParent() pm.delete(parent_node) # 清理捏脸骨骼动画 if pm.checkBox(self.face_make_node_check, q=True, value=True): faceMakeSets = [] extraSets = [] extraSets = ["L_eyeBall_socket", "L_eyeBall_socket_sdk", "R_eyeBall_socket", "R_eyeBall_socket_sdk", "headTipEnd_JNT", "facial_C_Nose_JNT", "facial_C_NoseBase_JNT", "head_JNT", "L_browMid_JNT", "L_browIn_JNT", "L_browOut_JNT", "L_brow_JNT", "R_browMid_JNT", "R_browIn_JNT", "R_browOut_JNT", "R_brow_JNT", ] pm.select("head_JNT", hi=True) for item in pm.ls(sl=True): if "definition_" in item.controller_name() and item.type() == "joint": faceMakeSets.append(item) for item in extraSets: if pm.objExists(item): faceMakeSets.append(item) pm.select(faceMakeSets) for jnt in pm.ls(sl=True): anim_attrs = pm.listAttr(jnt, k=True) for anim_attr in anim_attrs: cmd = '''cutKey -cl -t ":" -f ":" -at %s %s;''' % ( anim_attr, jnt.controller_name()) mel.eval(cmd) cmds.file(export_file_name, force=True, pr=True, ea=True, typ="FBX export", options="v=0") pm.textScrollList( self.output_scroll, e=True, a=export_file_name) pm.textScrollList( self.task_scroll, e=True, ri=export_file) return True
def set_show_doc_ui(self, *args): # don't use args because of 2011 qt compatibility self.show_doc = pmc.checkBoxGrp(self.order_ui, q=True, v2=True) self.save_options()
def optvar_to_window(self, pref_handler): # Update the shelf checkboxes with the saved list of pinned shelves. currently_pinned_shelves = set(get_pinned_shelves()) for shelf_name, checkbox_name in pref_handler.shelf_items: pm.checkBoxGrp(checkbox_name, e=True, value1=shelf_name in currently_pinned_shelves)
def show(self): if pm.window("autoExportFBXFileTool", ex=True): pm.deleteUI("autoExportFBXFileTool") pm.window( "autoExportFBXFileTool", t=u"自动输出 %s" % __version__, mb=True, cc=lambda *args: self._close_main_window()) self.work_list_frame = pm.frameLayout( label=u"自动输出", mw=10, mh=5, bgs=True) self.form_layout = pm.formLayout() self.work_mode = pm.radioButtonGrp( label=u'工作类型:', labelArray3=[u'输出FBX', u'FBX优化', u'全流程'], cw4=[60, 80, 80, 80], sl=self.work_mode_selected, on1=lambda *args: self.fbx_optimize_state(state=False), on2=lambda *args: self.fbx_optimize_state(state=True), of2=lambda *args: self.fbx_optimize_state(state=False), on3=lambda *args: self.fbx_optimize_state(state=True), numberOfRadioButtons=3) fbx_optimize_layout = pm.columnLayout(adj=1) self.fbx_optimize = pm.checkBoxGrp( numberOfCheckBoxes=3, label=u"优化选项:", labelArray3=[u"清理头部动画", u"清理单个骨骼动画", u"清理模型组和控制器组"], cw4=[60, 100, 120, 100]) self.face_make_node_check = pm.checkBox(label=u"优化捏脸骨骼") pm.setParent(fbx_optimize_layout) optimize_target_joint_layout = pm.columnLayout(p=self.form_layout) self.optimize_target = pm.textFieldGrp( label=u"骨骼名称:", cw2=[60, 300]) self.offset_target = pm.floatFieldGrp( numberOfFields=3, cw4=[60, 100, 100, 100], label=u'偏移参数:', value1=0, value2=0, value3=0) pm.setParent("..") self.task_scroll_label = pm.text( label=u"任务列表:", al="left") self.task_scroll = pm.textScrollList(ams=True, w=200) pm.popupMenu() pm.menuItem(label=u"添加文件", c=lambda *args: self._append_file()) pm.menuItem(label=u"移除选择", c=lambda *args: self.remove_select_item()) self.output_scroll_label = pm.text(label=u"输出列表:", al="left") self.output_scroll = pm.textScrollList(ams=True, w=200) pm.popupMenu() pm.menuItem(label=u"清空列表", c=lambda *args: self.clean_output_scroll()) pm.menuItem(label=u"转移到任务列表", c=lambda *args: self.move_to_task_scroll()) self.ouput_path_field = pm.textFieldButtonGrp( adj=2, label=u"存放路径:", bl=u"指定路径", cw3=[60, 100, 100], text=self.output_path, bc=lambda *args: self._set_output_location()) self.excute_btn = pm.button( label=u"开始输出", c=lambda *args: self.start_export()) pm.formLayout( self.form_layout, edit=True, attachForm=[ (self.work_mode, 'top', 0), (self.work_mode, 'left', 0), (self.work_mode, 'right', 0), (fbx_optimize_layout, 'left', 0), (fbx_optimize_layout, 'right', 0), (optimize_target_joint_layout, 'left', 0), (optimize_target_joint_layout, 'right', 0), (self.ouput_path_field, 'left', 0), (self.ouput_path_field, 'right', 0), (self.excute_btn, 'left', 0), (self.excute_btn, 'right', 0), (self.excute_btn, 'bottom', 10) ], attachControl=[ (fbx_optimize_layout, 'top', 5, self.work_mode), (optimize_target_joint_layout, 'top', 5, fbx_optimize_layout), (self.task_scroll_label, 'top', 5, optimize_target_joint_layout), (self.task_scroll, 'top', 5, self.task_scroll_label), (self.task_scroll, 'bottom', 5, self.ouput_path_field), (self.output_scroll_label, 'top', 5, optimize_target_joint_layout), (self.output_scroll_label, 'left', 5, self.task_scroll), (self.output_scroll, 'top', 5, self.output_scroll_label), (self.output_scroll, 'left', 5, self.task_scroll), (self.output_scroll, 'bottom', 5, self.ouput_path_field), (self.ouput_path_field, 'bottom', 5, self.excute_btn), ] ) pm.showWindow("autoExportFBXFileTool") if self.work_mode_selected == 2: self.fbx_optimize_state(state=True) elif self.work_mode_selected == 1: self.fbx_optimize_state(state=False)
def RecostructUI(self): template = pm.uiTemplate() template.define(pm.frameLayout , mh=6 , mw=5) template.define(pm.columnLayout , adj=1 , rs=2) with pm.window('RecostructWin' , title='Recostruct Subdiv v1.3' , menuBar=True , menuBarVisible=True) as win: pm.window('RecostructWin' , edit=True , width=420 , height=172) with pm.frameLayout(lv=False , bv=False , mh=2 , mw=7): with template: with pm.columnLayout(): pm.button(label='Recostruct Subdiv' , c=pm.Callback(self.Main) , h=40 , bgc=self.clrs['orange']) with pm.frameLayout('more' , l='More' , cll=True , cl=True , ec=pm.Callback(self.expand) , cc=pm.Callback(self.collapse)): with pm.columnLayout(cat=('left' , -20)): pm.checkBoxGrp( numberOfCheckBoxes=1 , columnAlign=(1 , 'right') , label='Settings: ' , label1='Keep original (Recostructing is not undoable)' , v1=True , on1=pm.Callback(self.keepOrig_True) , of1=pm.Callback(self.keepOrig_False) ) pm.checkBoxGrp( numberOfCheckBoxes=1 , columnAlign=(1 , 'right') , label='' , label1='Recostruct vertex positions' , v1=True , on1=pm.Callback(self.curvature_True) , of1=pm.Callback(self.curvature_False) , ) pm.checkBoxGrp( 'sharpCorners' , numberOfCheckBoxes=1 , columnAlign=(1 , 'right') , label='' , label1='Sharp corners' , v1=True , on1=pm.Callback(self.sharpCorners_True) , of1=pm.Callback(self.sharpCorners_False) , ) pm.checkBoxGrp( numberOfCheckBoxes=1 , columnAlign=(1 , 'right') , label='' , label1='Turn Off progress bar (Increase speed)' , v1=False , on1=pm.Callback(self.progress_False) , of1=pm.Callback(self.progress_True) ) rb = pm.radioButtonGrp(numberOfRadioButtons=1 , on1=pm.Callback(self.reverse_False) , label='' , sl=1 , label1='Default starting point (For most cases)') pm.radioButtonGrp(numberOfRadioButtons=1 , on1=pm.Callback(self.reverse_True) , shareCollection=rb , label='' , label1='Reverse starting point (For special cases)') with pm.frameLayout(l='Progress'): pm.progressBar('progress' , h=25 , ii=True) with pm.rowColumnLayout( numberOfColumns=2 , cal=[(1 , 'left') , (2 , 'right')] , columnWidth=[(1 , 275) , (2 , 125)] ): pm.textField('meshes' , text='' , ed=False , width=200) pm.text('meshesNum' , label='' , height=25)
def curvature_False(self): self.curvature = False pm.checkBoxGrp('sharpCorners' , edit=True , en=False)
def curvature_True(self): self.curvature = True pm.checkBoxGrp('sharpCorners' , edit=True , en=True)
def _set_change_unit_check(self): self.changeNTSC = pm.checkBoxGrp('unitToNTSC', q=True, value1=True)
def fbx_optimize_state(self, state): if state == True: pm.checkBoxGrp(self.fbx_optimize, e=True, en=True) elif state == False: pm.checkBoxGrp(self.fbx_optimize, e=True, en=False)
def ak_rope(): """::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::// Script: ak_rope // Version: 12.0 // Date: 21.05.2013 // Author: Andrey Kanin // :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://""" win = "ROPE" if pm.window(win, exists=1): pm.deleteUI(win) pm.window(win, h=100, mb=1, t="ak ROPE", w=100, tlb=1) pm.columnLayout(w=101) pm.rowLayout(nc=2) pm.button(h=15, c=lambda *args: pm.mel.rp_curve(), bgc=(0.3, 0.3, 0.3), l="curve", w=48) pm.button(h=15, c=lambda *args: pm.mel.rp_bezier(), bgc=(0.3, 0.3, 0.3), l="bezier", w=48) pm.setParent('..') pm.separator(h=5, w=100, st="in") pm.rowLayout(nc=4, cw4=(5, 15, 50, 15)) pm.text(" ") pm.checkBoxGrp('CTJ', cc=lambda *args: pm.mel.eval( "if(`checkBoxGrp -q -v1 CTJ`){checkBoxGrp -e -vis 1 CTJP;}else{checkBoxGrp -e -vis 0 CTJP;}"), v1=1, ncb=1, ann="add circle contollers CT", w=15) pm.text(" add CT") pm.checkBoxGrp('CTJP', cc=lambda *args: pm.mel.eval( "if(`checkBoxGrp -q -v1 CTJP`){text -e -en 0 TXTCT;}else{text -e -en 1 TXTCT;}"), v1=0, ncb=1, ann="add bezier CT contollers", w=15) pm.setParent('..') pm.separator(h=5, w=100, st="in") pm.button(c=lambda *args: pm.mel.rp_cr(), bgc=(0.8, 0.8, 0.1), h=20, ann="riging curve", l="riging curve", w=99) pm.separator(h=5, w=100, st="in") pm.rowLayout(nc=4, cw4=(5, 15, 50, 15)) pm.text(" ") pm.checkBoxGrp('MRL', cc=lambda *args: pm.mel.eval("if(`checkBoxGrp -q -v1 MRL`){checkBoxGrp -e -v1 0 VRL;}"), v1=1, ncb=1, ann="nodes sistem", w=15) pm.button(c=lambda *args: [pm.mel.rp_mixTwist(), pm.mel.rp_Twist()], bgc=(0.3, 0.3, 0.3), h=20, ann="resistems", l="twist", w=50) pm.checkBoxGrp('VRL', cc=lambda *args: pm.mel.eval("if(`checkBoxGrp -q -v1 VRL`){checkBoxGrp -e -v1 0 MRL;}"), v1=0, ncb=1, ann="vectors sistem", w=15) pm.setParent('..') pm.separator(h=5, w=100, st="in") pm.rowLayout(nc=2, cw2=(60, 30)) pm.text('TXTCT', l=" controls") pm.intField('NCJ', bgc=(0.15, 0.15, 0.15), min=2, max=100, ann="how many contols", w=37, v=3) pm.setParent('..') pm.rowLayout(nc=2, cw2=(60, 30)) pm.text(" segment") pm.intField('PCJ', bgc=(0.15, 0.15, 0.15), min=1, max=100, ann="how many segments", w=37, v=5) pm.setParent('..') pm.rowLayout(nc=2, cw2=(60, 30)) pm.text(" ==>") pm.intField('NJ', bgc=(0.3, 0.3, 0.3), min=1, max=100, ann="total segments", w=37, v=10) pm.setParent('..') pm.separator(h=5, w=100, st="in") pm.rowLayout(nc=2, cw2=(60, 30)) pm.text(" orient") pm.intField('OJ', bgc=(0.2, 0.2, 0.2), min=0, max=360, ann="orient ik sistem", w=37, v=0) pm.setParent('..') pm.separator(h=5, w=100, st="in") pm.rowLayout(nc=2) pm.button(c=lambda *args: pm.mel.rp_surface(), bgc=(0.0, 0.6, 0.4), h=20, ann="convert to surface", l="surface", w=60) pm.optionMenuGrp('AXES', bgc=(0.2, 0.2, 0.2), w=36) pm.menuItem(l="y") pm.menuItem(l="x") pm.menuItem(l="z") pm.setParent('..') pm.separator(h=5, w=100, st="in") pm.rowLayout(nc=2) pm.button(h=20, c=lambda *args: pm.mel.rp_grip(), bgc=(0.2, 0.2, 0.2), l="grip", w=60) pm.button(h=20, c=lambda *args: pm.mel.rp_del(), bgc=(0.2, 0.2, 0.2), l="del", w=36) pm.setParent('..') pm.setParent('..') pm.showWindow(win)
def uiCreate(self): self.onCloseClicked() self.window = pm.window( WIN_NAME, title='PyMel Window', maximizeButton=False ) with self.window: with pm.formLayout() as uiLAY_mainForm: with pm.scrollLayout('uiLAY_mainScroll', childResizable=True) as self.uiLAY_mainScroll: with pm.columnLayout(adjustableColumn=True): with self.uiCreateFrame('uiLAY_frameCheckBoxes', 'Check Boxes (PMCheckBox)') as self.uiLAY_frameCheckBoxes: with pm.columnLayout(): pm.separator(style='none', height=2) with pm.rowLayout(numberOfColumns=3): pm.separator(width=140, style='none') self.uiCHK_test1 = pm.checkBox('uiCHK_test1', label='test1') self.uiCHK_test2 = pm.checkBox('uiCHK_test2', label='test2') with self.uiCreateFrame('uiLAY_frameCheckBoxGroups', 'Check Box Groups (PMCheckBoxGrp#)') as self.uiLAY_frameCheckBoxGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiCHKGRP_test1 = pm.checkBoxGrp( 'uiCHKGRP_test1', numberOfCheckBoxes=1, label='PMCheckBoxGrp1', label1='test1' ) self.uiCHKGRP_test2 = pm.checkBoxGrp( 'uiCHKGRP_test2', numberOfCheckBoxes=2, label='PMCheckBoxGrp2', labelArray2=('test1', 'test2') ) self.uiCHKGRP_test3 = pm.checkBoxGrp( 'uiCHKGRP_test3', numberOfCheckBoxes=3, label='PMCheckBoxGrp3', labelArray3=('test1', 'test2', 'test3') ) self.uiCHKGRP_test4 = pm.checkBoxGrp( 'uiCHKGRP_test4', numberOfCheckBoxes=4, label='PMCheckBoxGrp4', labelArray4=('test1', 'test2', 'test3', 'test4') ) with self.uiCreateFrame('uiLAY_frameColorSliders', 'Color Slider Groups (PMColorSliderGrp)') as self.uiLAY_frameColorSliders: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiCLRGRP_test1 = pm.colorSliderGrp( 'uiCLRGRP_test1', label='test1' ) self.uiCLRGRP_test2 = pm.colorSliderGrp( 'uiCLRGRP_test2', label='test2' ) with self.uiCreateFrame('uiLAY_frameFloatFields', 'Float Fields (PMFloatField)') as self.uiLAY_frameFloatFields: with pm.columnLayout(): pm.separator(style='none', height=2) with pm.rowLayout(numberOfColumns=3): pm.separator(width=140, style='none') self.uiFLF_test1 = pm.floatField('uiFLF_test1') self.uiFLF_test2 = pm.floatField('uiFLF_test2') with self.uiCreateFrame('uiLAY_frameFloatFieldGroups', 'Float Field Groups (PMFloatFieldGrp#)') as self.uiLAY_frameFloatFieldGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiFLFGRP_test1 = pm.floatFieldGrp( 'uiFLFGRP_test1', numberOfFields=1, label='PMFloatFieldGrp1' ) self.uiFLFGRP_test2 = pm.floatFieldGrp( 'uiFLFGRP_test2', numberOfFields=2, label='PMFloatFieldGrp2' ) self.uiFLFGRP_test3 = pm.floatFieldGrp( 'uiFLFGRP_test3', numberOfFields=3, label='PMFloatFieldGrp3' ) self.uiFLFGRP_test4 = pm.floatFieldGrp( 'uiFLFGRP_test4', numberOfFields=4, label='PMFloatFieldGrp4' ) with self.uiCreateFrame('uiLAY_frameFloatScrollBars', 'Float Scroll Bars (PMFloatScrollBar)') as self.uiLAY_frameFloatScrollBars: with pm.columnLayout(adjustableColumn=True): pm.separator(style='none', height=2) self.uiFLSCRL_test1 = pm.floatScrollBar('uiFLSCRL_test1') self.uiFLSCRL_test2 = pm.floatScrollBar('uiFLSCRL_test2') with self.uiCreateFrame('uiLAY_frameFloatSliders', 'Float Sliders (PMFloatSlider)') as self.uiLAY_frameFloatSliders: with pm.columnLayout(adjustableColumn=True): pm.separator(style='none', height=2) self.uiFLTSLD_test1 = pm.floatSlider('uiFLTSLD_test1') self.uiFLTSLD_test2 = pm.floatSlider('uiFLTSLD_test2') with self.uiCreateFrame('uiLAY_frameFloatSliderGroups', 'Float Slider Groups (PMFloatSliderGrp)') as self.uiLAY_frameFloatSliderGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiFLSGRP_test1 = pm.floatSliderGrp( 'uiFLSGRP_test1', label='test1', field=True ) self.uiFLSGRP_test2 = pm.floatSliderGrp( 'uiFLSGRP_test2', label='test2', field=True ) with self.uiCreateFrame('uiLAY_frameIconTextCheckBoxes', 'Icon Text Check Boxes (PMIconTextCheckBox)') as self.uiLAY_frameIconTextCheckBoxes: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=3): pm.separator(style='none', width=140) self.uiITCHK_test1 = pm.iconTextCheckBox( 'uiITCHK_test1', style='iconAndTextHorizontal', label='cube', image1='cube' ) self.uiITCHK_test2 = pm.iconTextCheckBox( 'uiITCHK_test2', style='iconAndTextHorizontal', label='cone', image1='cone' ) with self.uiCreateFrame('uiLAY_frameIconTextRadioButtons', 'Icon Text Radio Buttons (PMIconTextRadioButton)') as self.uiLAY_frameIconTextRadioButtons: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=4): pm.separator(style='none', width=140) pm.iconTextRadioCollection() self.uiITRAD_test1 = pm.iconTextRadioButton( 'uiITRAD_test1', style='iconAndTextHorizontal', label='cube', image1='cube' ) self.uiITRAD_test2 = pm.iconTextRadioButton( 'uiITRAD_test2', style='iconAndTextHorizontal', label='cone', image1='cone' ) self.uiITRAD_test3 = pm.iconTextRadioButton( 'uiITRAD_test3', style='iconAndTextHorizontal', label='torus', image1='torus' ) with self.uiCreateFrame('uiLAY_frameIconTextScrollLists', 'Icon Text Scroll Lists (PMIconTextScrollList)') as self.uiLAY_frameIconTextScrollLists: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=3): pm.separator(style='none', width=140) self.uiITSLST_test1 = pm.iconTextScrollList( 'uiITSLST_test1', allowMultiSelection=True, append=('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten') ) self.uiITSLST_test2 = pm.iconTextScrollList( 'uiITSLST_test2', allowMultiSelection=True, append=('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten') ) with self.uiCreateFrame('uiLAY_frameIntFields', 'Int Fields (PMIntField)') as self.uiLAY_frameIntFields: with pm.columnLayout(): pm.separator(style='none', height=2) with pm.rowLayout(numberOfColumns=3): pm.separator(width=140, style='none') self.uiINF_test1 = pm.intField('uiINF_test1') self.uiINF_test2 = pm.intField('uiINF_test2') with self.uiCreateFrame('uiLAY_frameIntFieldGroups', 'Int Field Groups (PMIntFieldGrp#)') as self.uiLAY_frameIntFieldGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiINFGRP_test1 = pm.intFieldGrp( 'uiINFGRP_test1', numberOfFields=1, label='PMIntFieldGrp1' ) self.uiINFGRP_test2 = pm.intFieldGrp( 'uiINFGRP_test2', numberOfFields=2, label='PMIntFieldGrp2' ) self.uiINFGRP_test3 = pm.intFieldGrp( 'uiINFGRP_test3', numberOfFields=3, label='PMIntFieldGrp3' ) self.uiINFGRP_test4 = pm.intFieldGrp( 'uiINFGRP_test4', numberOfFields=4, label='PMIntFieldGrp4' ) with self.uiCreateFrame('uiLAY_frameIntScrollBars', 'Int Scroll Bars (PMIntScrollBar)') as self.uiLAY_frameIntScrollBars: with pm.columnLayout(adjustableColumn=True): pm.separator(style='none', height=2) self.uiINSCRL_test1 = pm.intScrollBar('uiINSCRL_test1') self.uiINSCRL_test2 = pm.intScrollBar('uiINSCRL_test2') with self.uiCreateFrame('uiLAY_frameIntSliders', 'Int Sliders (PMIntSlider)') as self.uiLAY_frameIntSliders: with pm.columnLayout(adjustableColumn=True): pm.separator(style='none', height=2) self.uiINTSLD_test1 = pm.intSlider('uiINTSLD_test1') self.uiINTSLD_test2 = pm.intSlider('uiINTSLD_test2') with self.uiCreateFrame('uiLAY_frameIntSliderGroups', 'Int Slider Groups (PMIntSliderGrp)') as self.uiLAY_frameIntSliderGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiINSGRP_test1 = pm.intSliderGrp( 'uiINSGRP_test1', label='test1', field=True ) self.uiINSGRP_test2 = pm.intSliderGrp( 'uiINSGRP_test2', label='test2', field=True ) with self.uiCreateFrame('uiLAY_frameOptionMenus', 'Option Menus (PMOptionMenu)') as self.uiLAY_frameOptionMenus: with pm.columnLayout(): pm.separator(style='none', height=2) with pm.rowLayout(numberOfColumns=3): pm.separator(width=110, style='none') self.uiOPTMNU_test1 = pm.optionMenu('uiOPTMNU_test1', label='test1') pm.menuItem(label='one') pm.menuItem(label='two') pm.menuItem(label='three') self.uiOPTMNU_test2 = pm.optionMenu('uiOPTMNU_test2', label='test2') pm.menuItem(label='four') pm.menuItem(label='five') pm.menuItem(label='six') with self.uiCreateFrame('uiLAY_frameOptionMenuGroups', 'Option Menus Groups (PMOptionMenuGrp)') as self.uiLAY_frameOptionMenuGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiOPMGRP_test1 = pm.optionMenuGrp('uiOPMGRP_test1', label='test1', extraLabel='extraLabel') pm.menuItem(label='one') pm.menuItem(label='two') pm.menuItem(label='three') self.uiOPMGRP_test2 = pm.optionMenuGrp('uiOPMGRP_test2', label='test2', extraLabel='extraLabel') pm.menuItem(label='four') pm.menuItem(label='five') pm.menuItem(label='six') with self.uiCreateFrame('uiLAY_frameRadioButtons', 'Radio Buttons (PMRadioButton)') as self.uiLAY_frameRadioButtons: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=4): pm.separator(style='none', width=140) pm.radioCollection() self.uiRAD_test1 = pm.radioButton('uiRAD_test1', label='test1') self.uiRAD_test2 = pm.radioButton('uiRAD_test2', label='test2') self.uiRAD_test3 = pm.radioButton('uiRAD_test3', label='test3') with self.uiCreateFrame('uiLAY_frameRadioButtonGroups', 'Radio Button Groups (PMRadioButtonGrp#)') as self.uiLAY_frameRadioButtonGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiRADGRP_test1 = pm.radioButtonGrp( 'uiRADGRP_test1', numberOfRadioButtons=1, label='PMRadioButtonGrp1', label1='test1' ) self.uiRADGRP_test2 = pm.radioButtonGrp( 'uiRADGRP_test2', numberOfRadioButtons=2, label='PMRadioButtonGrp2', labelArray2=('test1', 'test2') ) self.uiRADGRP_test3 = pm.radioButtonGrp( 'uiRADGRP_test3', numberOfRadioButtons=3, label='PMRadioButtonGrp3', labelArray3=('test1', 'test2', 'test3') ) self.uiRADGRP_test4 = pm.radioButtonGrp( 'uiRADGRP_test4', numberOfRadioButtons=4, label='PMRadioButtonGrp4', labelArray4=('test1', 'test2', 'test3', 'test4') ) with self.uiCreateFrame('uiLAY_frameSymbolCheckBoxes', 'Symbol Check Boxes (PMSymbolCheckBox)') as self.uiLAY_frameSymbolCheckBoxes: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=3): pm.separator(style='none', width=140) self.uiSYMCHK_test1 = pm.symbolCheckBox( 'uiSYMCHK_test1', image='polyCube' ) self.uiSYMCHK_test2 = pm.symbolCheckBox( 'uiSYMCHK_test2', image='polyCone' ) with self.uiCreateFrame('uiLAY_frameScriptTables', 'Script Tables (PMScriptTable)') as self.uiLAY_frameScriptTables: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=3): pm.separator(style='none', width=140) self.uiSCRTBL_test1 = pm.scriptTable( 'uiSCRTBL_test1', selectionMode=3, rows=4, columns=2 ) self.uiSCRTBL_test2 = pm.scriptTable( 'uiSCRTBL_test2', selectionMode=3, rows=4, columns=2 ) with self.uiCreateFrame('uiLAY_frameScrollField', 'Scroll Field (PMScrollField)') as self.uiLAY_frameScrollField: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=3): pm.separator(style='none', width=140) self.uiSCRFLD_test1 = pm.scrollField( 'uiSCRFLD_test1', wordWrap=True ) self.uiSCRFLD_test2 = pm.scrollField( 'uiSCRFLD_test2', wordWrap=True ) with self.uiCreateFrame('uiLAY_frameShelfTabLayout', 'Shelf Tab Layout (PMShelfTabLayout)') as self.uiLAY_frameShelfTabLayout: with pm.columnLayout(adjustableColumn=True): with pm.shelfTabLayout('uiSHLTAB_test1') as self.uiSHLTAB_test1: with pm.shelfLayout('test1'): pass with pm.shelfLayout('test2'): pass with pm.shelfLayout('test3'): pass with pm.shelfTabLayout('uiSHLTAB_test2') as self.uiSHLTAB_test2: with pm.shelfLayout('test4'): pass with pm.shelfLayout('test5'): pass with pm.shelfLayout('test6'): pass with self.uiCreateFrame('uiLAY_frameTabLayout', 'Tab Layout (PMTabLayout)') as self.uiLAY_frameTabLayout: with pm.columnLayout(adjustableColumn=True): with pm.tabLayout('uiTAB_test1') as self.uiTAB_test1: with pm.rowLayout(numberOfColumns=1) as uiLAY_tabRow1: pass with pm.rowLayout(numberOfColumns=1) as uiLAY_tabRow2: pass with pm.rowLayout(numberOfColumns=1) as uiLAY_tabRow3: pass pm.tabLayout( self.uiTAB_test1, edit=True, tabLabel=((uiLAY_tabRow1, 'test1'), (uiLAY_tabRow2, 'test2'), (uiLAY_tabRow3, 'test3'),) ) with pm.tabLayout('uiTAB_test2') as self.uiTAB_test2: with pm.rowLayout(numberOfColumns=1) as uiLAY_tabRow4: pass with pm.rowLayout(numberOfColumns=1) as uiLAY_tabRow5: pass with pm.rowLayout(numberOfColumns=1) as uiLAY_tabRow6: pass pm.tabLayout( self.uiTAB_test2, edit=True, tabLabel=((uiLAY_tabRow4, 'test4'), (uiLAY_tabRow5, 'test5'), (uiLAY_tabRow6, 'test6'),) ) with self.uiCreateFrame('uiLAY_frameTextFields', 'Text Fields (PMTextField)') as self.uiLAY_frameTextFields: with pm.columnLayout(): pm.separator(style='none', height=2) with pm.rowLayout(numberOfColumns=3): pm.separator(width=140, style='none') self.uiTXT_test1 = pm.textField('uiTXT_test1') self.uiTXT_test2 = pm.textField('uiTXT_test2') with self.uiCreateFrame('uiLAY_frameTextFieldButtonGroups', 'Text Field Button Groups (PMTextFieldButtonGrp)') as self.uiLAY_frameTextFieldButtonGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiTXBTGR_test1 = pm.textFieldButtonGrp( 'uiTXBTGR_test1', label='test1', buttonLabel='button1' ) self.uiTXBTGR_test2 = pm.textFieldButtonGrp( 'uiTXBTGR_test2', label='test2', buttonLabel='button2' ) with self.uiCreateFrame('uiLAY_frameTextFieldGroups', 'Text Field Groups (PMTextFieldGrp)') as self.uiLAY_frameTextFieldGroups: with pm.columnLayout(): pm.separator(style='none', height=2) self.uiTXTGRP_test1 = pm.textFieldGrp( 'uiTXTGRP_test1', label='test1' ) self.uiTXTGRP_test2 = pm.textFieldGrp( 'uiTXTGRP_test2', label='test2' ) with self.uiCreateFrame('uiLAY_frameTextScrollLists', 'Text Scroll Lists (PMTextScrollList)') as self.uiLAY_frameTextScrollLists: with pm.columnLayout(): with pm.rowLayout(numberOfColumns=3): pm.separator(style='none', width=140) self.uiTXTLST_test1 = pm.textScrollList( 'uiTXTLST_test1', allowMultiSelection=True, append=('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten') ) self.uiTXTLST_test2 = pm.textScrollList( 'uiTXTLST_test2', allowMultiSelection=True, append=('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten') ) self.uiBTN_savePrefs = pm.button( label='Save Prefs', height=MAIN_BUTTONS_HEIGHT, command=self.onSavePrefsClicked ) self.uiBTN_loadPrefs = pm.button( label='Load Prefs', height=MAIN_BUTTONS_HEIGHT, command=self.onLoadPrefsClicked ) self.uiBTN_resetPrefs = pm.button( label='Reset Prefs', height=MAIN_BUTTONS_HEIGHT, command=self.onResetPrefsClicked ) uiLAY_mainForm.attachForm(self.uiLAY_mainScroll, 'top', 2) uiLAY_mainForm.attachForm(self.uiLAY_mainScroll, 'left', 2) uiLAY_mainForm.attachForm(self.uiLAY_mainScroll, 'right', 2) uiLAY_mainForm.attachControl(self.uiLAY_mainScroll, 'bottom', 2, self.uiBTN_savePrefs) uiLAY_mainForm.attachNone(self.uiBTN_savePrefs, 'top') uiLAY_mainForm.attachForm(self.uiBTN_savePrefs, 'left', 2) uiLAY_mainForm.attachPosition(self.uiBTN_savePrefs, 'right', 2, 33) uiLAY_mainForm.attachForm(self.uiBTN_savePrefs, 'bottom', 2) uiLAY_mainForm.attachNone(self.uiBTN_loadPrefs, 'top') uiLAY_mainForm.attachPosition(self.uiBTN_loadPrefs, 'left', 2, 33) uiLAY_mainForm.attachPosition(self.uiBTN_loadPrefs, 'right', 2, 66) uiLAY_mainForm.attachForm(self.uiBTN_loadPrefs, 'bottom', 2) uiLAY_mainForm.attachNone(self.uiBTN_resetPrefs, 'top') uiLAY_mainForm.attachPosition(self.uiBTN_resetPrefs, 'left', 2, 66) uiLAY_mainForm.attachForm(self.uiBTN_resetPrefs, 'right', 2) uiLAY_mainForm.attachForm(self.uiBTN_resetPrefs, 'bottom', 2) self.window.setTitle(self.window.__class__)
def create(self): # Create default render globals node if needed. createGlobalNodes() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) columnWidth = 400 with pm.scrollLayout("outputScrollLayout", horizontalScrollBarThickness=0): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): with pm.frameLayout(label="AOVs", collapsable=True, collapse=False): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl(ui=pm.checkBoxGrp(label="Diffuse"), attrName="diffuseAOV") self._addControl(ui=pm.checkBoxGrp(label="Glossy"), attrName="glossyAOV") self._addControl(ui=pm.checkBoxGrp(label="Emission"), attrName="emissionAOV") self._addControl(ui=pm.checkBoxGrp(label="Direct Diffuse"), attrName="directDiffuseAOV") self._addControl(ui=pm.checkBoxGrp(label="Indirect Diffuse"), attrName="indirectDiffuseAOV") self._addControl(ui=pm.checkBoxGrp(label="Direct Glossy"), attrName="directGlossyAOV") self._addControl(ui=pm.checkBoxGrp(label="Indirect Glossy"), attrName="indirectGlossyAOV") self._addControl(ui=pm.checkBoxGrp(label="Albedo"), attrName="albedoAOV") self._addControl(ui=pm.checkBoxGrp(label="Normal"), attrName="normalAOV") self._addControl(ui=pm.checkBoxGrp(label="UV"), attrName="uvAOV") self._addControl(ui=pm.checkBoxGrp(label="Depth"), attrName="depthAOV") self._addControl(ui=pm.checkBoxGrp(label="NPR Shading"), attrName="nprShadingAOV") self._addControl(ui=pm.checkBoxGrp(label="NPR Contours"), attrName="nprContourAOV") with pm.frameLayout(label="Denoiser", collapsable=True, collapse=True): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Denoiser", enumeratedItem=self._getAttributeMenuItems("denoiser")), attrName="denoiser") self._addControl( ui=pm.checkBoxGrp( label="Skip Already Denoised"), attrName="skipDenoised") self._addControl( ui=pm.checkBoxGrp( label="Random Pixel Order"), attrName="randomPixelOrder") enablePrefilter = mc.getAttr( "appleseedRenderGlobals.prefilterSpikes") self._addControl( ui=pm.checkBoxGrp( label="Prefilter Spikes", changeCommand=self.__prefilterChanged), attrName="prefilterSpikes") self._addControl( ui=pm.floatFieldGrp( label="Spike Thereshold", numberOfFields=1, enable=enablePrefilter), attrName="spikeThreshold") self._addControl( ui=pm.floatFieldGrp( label="Patch Distance", numberOfFields=1), attrName="patchDistance") self._addControl( ui=pm.intFieldGrp( label="Denoise Scales", numberOfFields=1), attrName="denoiseScales") with pm.frameLayout(label="Render Stamp", collapsable=True, collapse=True): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl(ui=pm.checkBoxGrp(label="Enable"), attrName="renderStamp") self._addControl( ui=pm.textFieldGrp( label='Render Stamp'), attrName="renderStampString") with pm.frameLayout(label="Logging", collapsable=True, collapse=True): with pm.columnLayout("outputColumnLayout", adjustableColumn=True, width=columnWidth): self._addControl( ui=pm.attrEnumOptionMenuGrp( label="Log Level", enumeratedItem=self._getAttributeMenuItems("logLevel")), attrName="logLevel") self._addControl( ui=pm.textFieldButtonGrp( label='Log Filename', buttonLabel='...', buttonCommand=self.__chooseLogFilename), attrName="logFilename") pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout( parentForm, edit=True, attachForm=[ ("outputScrollLayout", "top", 0), ("outputScrollLayout", "bottom", 0), ("outputScrollLayout", "left", 0), ("outputScrollLayout", "right", 0)]) logger.debug("Created appleseed render global output tab") # Update the newly created tab. self.update()
def ui(self): frameLayOpt = dict( cll=True, bs='etchedIn', mw=3, mh=3 ) rowLayOpt = dict( nc=2 ) textLabelOpt = dict( align='right', width=250) #with pm.frameLayout(lv=False, bv=False,mw=3, mh=3): with ui.stackLayout(adj=1, mw=3, mh=3): with pm.tabLayout( scr=True, cr=True ) as self.tabLay: # Arnold -------------------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3): with pm.columnLayout(adj=1): ''' with pm.tabLayout( tv=False ): with pm.columnLayout(adj=1): pm.text(l="Solid Angle Arnold", h= 32, en=False) pm.separator( h=6, style='none') ''' with pm.frameLayout(lv=False, bv=True, bs='etchedIn', mw=3, mh=3): with pm.columnLayout(adj=1): pm.checkBoxGrp( l='Arnold options : ', ncb=1, vr=True, l1='Set opaque (Shape node)', v1=self.setAiOpaque.get(), cc1=self.setAiOpaque.set, #l2='Assign To Object', v2=self.assignToObject.get(), cc2=self.assignToObject.set, #l3='self.boolAttr3', v3=self.boolAttr3.get(), cc3=self.boolAttr3.set ) pm.separator( h=6, style='none') #with pm.frameLayout( l=u'Maya Software → Arnold', **frameLayOpt): with pm.frameLayout( l=u'Maya Software → Arnold', cl=self.collapseFrames.get()[0], cc=pm.Callback( self.frameColCmd, 0, 1 ), ec=pm.Callback( self.frameColCmd, 0, 0 ), **frameLayOpt): with pm.columnLayout(adj=1): with pm.rowLayout( **rowLayOpt ): pm.text(l=u'Lambert, Blinn, Phong, PhongE → aiStandard : ', **textLabelOpt ) pm.button(l='Convert', c=pm.Callback( self.mayaShader_to_aiStandard ) ) #with pm.frameLayout( l=u'Mentalray → Arnold', **frameLayOpt): with pm.frameLayout( l=u'Mentalray → Arnold', cl=self.collapseFrames.get()[1], cc=pm.Callback( self.frameColCmd, 1, 1 ), ec=pm.Callback( self.frameColCmd, 1, 0 ), **frameLayOpt): with pm.columnLayout(adj=1): with pm.rowLayout( en=False, **rowLayOpt ): pm.text(l=u'mia_material_x → aiStandard : ', **textLabelOpt ) pm.button(l='Convert') with pm.rowLayout( en=False, **rowLayOpt ): pm.text(l=u'mia_car_paint_phen_x → aiStandard : ', **textLabelOpt ) pm.button(l='Convert') #with pm.frameLayout( l=u'Vray → Arnold', **frameLayOpt): with pm.frameLayout( l=u'Vray → Arnold', cl=self.collapseFrames.get()[2], cc=pm.Callback( self.frameColCmd, 2, 1 ), ec=pm.Callback( self.frameColCmd, 2, 0 ), **frameLayOpt): with pm.columnLayout(adj=1): with pm.rowLayout( **rowLayOpt ): pm.text(l=u'VRayMtl → aiStandard : ', **textLabelOpt ) pm.button(l='Convert', c=pm.Callback( self.VRayMtl_to_aiStandard ) ) # Vray -------------------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3, en=False): with pm.columnLayout(adj=True): pm.button() # Mentalray --------------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3, en=False): with pm.columnLayout(adj=True): pm.button() # Maya Software ----------------------------------------------------------------------- with pm.frameLayout(lv=False, bv=False,mw=3, mh=3, en=False): with pm.columnLayout(adj=True): pm.button() with pm.frameLayout( l=u'Advanced Options', cl=self.collapseFrames.get()[3], cc=pm.Callback( self.frameColCmd, 3, 1 ), ec=pm.Callback( self.frameColCmd, 3, 0 ), **frameLayOpt): with pm.columnLayout(adj=True): pm.radioButtonGrp( l='Select : ', nrb=2, vr=True, cw4=(140,30,30,30), select=self.selectOpt.get(), l1='Selected shaders only', on1=pm.Callback( self.selectOpt.set, 1), l2='All Shaders in this scene', on2=pm.Callback( self.selectOpt.set, 2), #l3='3', on3=pm.Callback( self.selectOpt.set, 3), ) pm.separator( h=8, style='in') pm.checkBoxGrp( l='Options : ', numberOfCheckBoxes=4, vertical=True, l1='Delete old shader', v1=self.deleteOldShader.get(), cc1=self.deleteOldShader.set, l2='Assign to object', v2=self.assignToObject.get(), cc2=self.assignToObject.set, l3='Add subfix', v3=self.addSubfix.get(), cc3=self.addSubfix.set, l4='Reconnect Hardware Texture', v4=self.reconnectHwTx.get(), cc4=self.reconnectHwTx.set, ) pm.checkBoxGrp( l='', numberOfCheckBoxes=1, vertical=True, l1='Display process (slow)', v1=self.processDisplay.get(), cc1=self.processDisplay.set, #l2='Assign to object', v2=self.assignToObject.get(), cc2=self.assignToObject.set, #l3='Add subfix', v3=self.addSubfix.get(), cc3=self.addSubfix.set, #l4='Display process (slow)', v4=self.processDisplay.get(), cc4=self.processDisplay.set, ) # # 탭 조정 # self.tabLay.setTabLabel( [ ( self.tabLay.getChildren()[0], 'Arnold'), ( self.tabLay.getChildren()[1], 'VRay'), ( self.tabLay.getChildren()[2], 'Mentalray'), ( self.tabLay.getChildren()[3], 'Maya Software'), ] ) self.tabLay.changeCommand( lambda: self.selectedTab.set( self.tabLay.getSelectTabIndex() ) ) try: self.tabLay.setSelectTabIndex( self.selectedTab.get() ) except: self.selectedTab.set(1) self.tabLay.setSelectTabIndex( self.selectedTab.get() )
with pm.columnLayout( adjustableColumn=True, rowSpacing=5): pm.separator(height=20, style ="double") pm.button (label = "make vertex color set", c ='makeVtxColorSet( pm.PyNode( source.getText() ) )') pm.separator(height=20, style ="double") #?p?????[?^?????A???C???????????s pm.text( label='Setting' ) source = pm.textFieldGrp( label='targetObject', text="pCylinder1" ) times = pm.intFieldGrp( numberOfFields = 2, label='start-end Time', value1 = 0, value2 = 10) #pm.radioCollection() useVertexGrp = pm.checkBoxGrp( numberOfCheckBoxes =1, label='using vertex color', value1=0) extends = pm.floatSliderGrp( label='extend', field=True, \ minValue=0.0, maxValue=10.0, fieldMinValue=0.0,\ fieldMaxValue=100.0, value=1.0) pm.button ( label = "start", c = lambda *args: cartoonBlur.cartoonBlur( source.getText(), times.getValue()[0], times.getValue()[1], extends.getValue(), useVertexGrp.getValueArray4()[0] ) ) pm.showWindow( CBwin )
def OpenMayaCommonGlobalsCreateTab(self): log.debug("OpenMayaCommonGlobalsCreateTab()") scLo = "scrollLayout" parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') uiDict = {} self.rendererTabUiDict['common'] = uiDict clo = "clo" with pm.frameLayout(clo, labelVisible=False, collapsable=False, mw=8, mh=5, borderVisible=False): with pm.columnLayout(adj=True): uiDict['imgpath'] = pm.text(label="Path:", align="left", font="smallBoldLabelFont") uiDict['imgname'] = pm.text(label="File Name:", align="left", font="smallBoldLabelFont") uiDict['imgsize'] = pm.text(label="Image Size:", align="left", font="smallBoldLabelFont") with pm.scrollLayout(scLo, horizontalScrollBarThickness=0) as sl: print "Scroll layout", sl with pm.columnLayout("commonTabColumn", adjustableColumn=True, width=400) as ctc: print "common", ctc with pm.frameLayout(label="File Output", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): pm.textFieldGrp(label="File Name Prefix:") pm.attrEnumOptionMenuGrp( "imageMenuMayaSW", label="Image Format:", attribute=self.renderNode.imageFormat) uiDict['imageNumbering'] = pm.optionMenuGrp( label="Frame/Animation ext:", changeCommand=self.setFrameNumbering) for value in ["name.ext", "name.#.ext"]: pm.menuItem(value) if self.defaultGlobals.animation.get(): uiDict['imageNumbering'].setSelect(2) self.addRenderDefaultGlobalsUIElement( attName='extensionPadding', uiType='int', displayName='Frame Padding:', uiDict=uiDict) with pm.frameLayout(label="Frame Range", collapsable=True, collapse=False) as frameRangeLayout: uiDict['frameRangeLayout'] = frameRangeLayout with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName='startFrame', uiType='float', displayName='Start Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='endFrame', uiType='float', displayName='End Frame:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='byFrame', uiType='float', displayName='By Frame:', uiDict=uiDict) with pm.frameLayout(label="Renderable Cameras", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): for cam in pm.ls(type="camera"): pm.checkBoxGrp(label=cam.name(), value1=cam.renderable.get(), cc=pm.Callback( self.switchCamRenderable, cam)) with pm.frameLayout(label="Image Size", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): uiDict['imageSizePresets'] = pm.optionMenuGrp( label="Presets:", changeCommand=self.setImageSize) for imgFormat in self.imageFormatData: pm.menuItem(imgFormat[0]) #uiDict['imageSizePresets'].setSelect(12) self.addRenderDefaultResGlobalsUIElement( attName='aspectLock', uiType='bool', displayName='Maintain aspect ratio', uiDict=uiDict) self.addRenderDefaultResGlobalsUIElement( attName='width', uiType='int', displayName='Width:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "width")) self.addRenderDefaultResGlobalsUIElement( attName='height', uiType='int', displayName='Height:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "height")) self.addRenderDefaultResGlobalsUIElement( attName='deviceAspectRatio', uiType='float', displayName='Device Aspect:', uiDict=uiDict, callback=pm.Callback(self.updateImageSize, "devAsp")) #self.addRenderDefaultResGlobalsUIElement(attName='pixelAspect', uiType='float', displayName='Pixel Aspect:', uiDict=uiDict, callback=self.updateImageSize) with pm.frameLayout(label="Render Scripts", collapsable=True, collapse=False): with pm.columnLayout(adjustableColumn=True, width=400): self.addRenderDefaultGlobalsUIElement( attName='preMel', uiType='string', displayName='Pre Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postMel', uiType='string', displayName='Post Render Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='preRenderLayerMel', uiType='string', displayName='Pre Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postRenderLayerMel', uiType='string', displayName='Post Layer Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='preRenderMel', uiType='string', displayName='Pre Frame Mel:', uiDict=uiDict) self.addRenderDefaultGlobalsUIElement( attName='postRenderMel', uiType='string', displayName='Post Frame Mel:', uiDict=uiDict) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[(clo, "right", 0), (clo, "left", 0), (clo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0)], attachControl=[(scLo, "top", 0, clo)]) #self.setImageSize("HD_540") # set default self.OpenMayaCommonGlobalsUpdateTab()
def ui(self): marge = 2 self.win = None if pmc.window(self.__class__.__name__, q=True, exists=True): pmc.deleteUI(self.__class__.__name__) with pmc.window(self.__class__.__name__, title=self.ui_name, menuBar=True) as self.win: #=================================================================== # Menus #=================================================================== pmc.menu(label="File", tearOff=False) pmc.menuItem(label="Open", c=self.select_py_ui) pmc.menuItem(label="Refresh", c=self.read_py) self.recents_menu_ui = pmc.menuItem(subMenu=True, label="Recents") pmc.setParent("..", menu=True) pmc.setParent("..", menu=True) pmc.menu(label="Options", tearOff=False) pmc.menuItem(label="Insert ScriptEditor", c=self.insert_script_editor_ui) self.reset_menu_ui = pmc.menuItem(label="Run Reset History", checkBox=self.reset, c=self.set_reset_his_ui) if self.maya_version >= 2011: self.dock_ui_item = pmc.menuItem(label="In Dock", checkBox=self.dock[0], c=self.set_in_dock_ui) pmc.menuItem(divider=True) pmc.menuItem(subMenu=True, label="Recents") self.max_recents_ui = pmc.menuItem(l="Set length (%s)" % self.max_recents, c=self.set_recents_ui) pmc.menuItem(l="Reset", c=self.reset_recents_ui) pmc.setParent("..", menu=True) pmc.menuItem(subMenu=True, label="Settings") pmc.menuItem(l="Reset", c=self.reset_options_ui) pmc.menuItem(l="Save", c=self.save_options) pmc.setParent("..", menu=True) pmc.menu(label='Help', helpMenu=True) pmc.menuItem(label='About', c=self.help_ui) #=================================================================== # Layout and Contents #=================================================================== main_form = pmc.formLayout(nd=100) self.run_but = pmc.button(l="Run", c=self.run_cmd_ui) self.main_layout = pmc.paneLayout(configuration="top3") form = pmc.formLayout(nd=100) self.cmd_ui = pmc.scrollField(ed=1, ww=0) pmc.setParent("..") form_infos = pmc.formLayout(nd=100) self.infos_ui = pmc.textScrollList(ams=0, fn="fixedWidthFont", sc=self.doc_cmd_ui, dcc=self.insert_cmd_ui) infos_layout = pmc.frameLayout(label="Filter / Sort / Doc", collapse=True, collapsable=True) pmc.columnLayout(adj=1) pmc.rowLayout(numberOfColumns=2, adj=1) self.filter_ui = pmc.textFieldGrp(label="Filter", text="", cw=[1, 40], adj=2, fcc=True, cc=self.order_by_ui) self.filter_test_ui = pmc.optionMenuGrp(cc=self.set_filter_test_ui) pmc.menuItem(label="in") pmc.menuItem(label="startswith") pmc.menuItem(label="endswith") pmc.setParent("..") self.order_ui = pmc.checkBoxGrp(numberOfCheckBoxes=2, label="Sort", label1="Alphabetical", label2="Show doc", cw=[1, 40], cc1=self.order_by_ui, cc2=self.set_show_doc_ui, ) pmc.setParent("..") pmc.setParent("..") pmc.setParent("..") self.form_scriptEditor = pmc.formLayout(nd=100) # self.form_scriptEditor = pmc.paneLayout(configuration="single") pmc.setParent("..") pmc.setParent("..") #=================================================================== # Layout settings #=================================================================== pmc.formLayout(main_form, edit=True, attachNone=[ (self.run_but, "bottom") ], attachForm=[ (self.run_but, "top", marge), (self.run_but, "left", marge), (self.run_but, "right", marge), (self.main_layout, "top", marge), (self.main_layout, "left", marge), (self.main_layout, "right", marge), (self.main_layout, "bottom", marge), ], attachControl=[ (self.main_layout, "top", marge, self.run_but), ] ) pmc.formLayout(form, edit=True, attachForm=[ (self.cmd_ui, "top", marge), (self.cmd_ui, "left", marge), (self.cmd_ui, "right", marge), (self.cmd_ui, "bottom", marge), ], ) pmc.formLayout(form_infos, edit=True, attachForm=[ (self.infos_ui, "top", marge), (self.infos_ui, "left", marge), (self.infos_ui, "right", marge), (infos_layout, "left", marge), (infos_layout, "right", marge), (infos_layout, "bottom", marge), ], attachControl=[ (self.infos_ui, "bottom", marge, infos_layout) ] ) self.insert_script_editor_ui() self.dock_it()
def gui(self): if pm.window('transferAndOffsetUVsGUI', exists=True): pm.deleteUI('transferAndOffsetUVsGUI', window=True) window = pm.window('transferAndOffsetUVsGUI', title='transferAndOffsetUVs v%s' % __ver__, widthHeight=(200, 55)) baseLayout = pm.autoLayout() with baseLayout: optLayout = pm.autoLayout(orientation='horizontal') with optLayout: self.uvField = pm.intFieldGrp(l='UV', nf=2, cw3=[20, 25, 25], v1=6, v2=6) self.space = pm.floatFieldGrp(l='space', cw2=(30, 50), pre=3, v1=0.01) onc = partial(self.isOverlapEnabled, 1) ofc = partial(self.isOverlapEnabled, 0) self.useOverlap = pm.checkBoxGrp(l='overlap', v1=0, cw2=(40, 50), onCommand1=onc, offCommand1=ofc) self.shellCount = pm.intFieldGrp(l='max shell count', cw2=(80, 35), en=0, v1=4) modeLayout = pm.autoLayout(orientation='horizontal') with modeLayout: self.mode = pm.radioButtonGrp(la2=['U', 'V'], nrb=2, cw3=[30, 25, 25], l='mode', sl=1) self.dirc = pm.radioButtonGrp(la2=['+', '-'], nrb=2, cw3=[45, 25, 25], l='direction', sl=1) self.adjustCB = pm.checkBoxGrp(l='Adjust', v1=0, cw2=(35, 20)) self.fitCB = pm.checkBoxGrp(l='Fit', v1=0, cw2=(20, 20)) self.shuffleCB = pm.checkBoxGrp(l='Shuffle', v1=0, cw2=(40, 20)) modeLayout.attachNone(self.adjustCB, 'right') modeLayout.attachNone(self.fitCB, 'right') modeLayout.attachNone(self.shuffleCB, 'right') with pm.autoLayout(orientation='horizontal'): cmd = partial(self.calc) pm.button('calc', c=cmd) cmd = partial(self.doit) pm.button('run', c=cmd) optLayout.attachNone(self.uvField, 'right') optLayout.attachNone(self.space, 'right') optLayout.attachNone(self.useOverlap, 'right') optLayout.attachNone(self.shellCount, 'right') baseLayout.attachNone(optLayout, 'bottom') baseLayout.attachNone(modeLayout, 'bottom') pm.showWindow(window) window.setWidthHeight([380, 100])
def createArnoldTextureSettings(): """The patched version of the original file """ import pymel.core as pm import maya.cmds as cmds import pymel.versions as versions from mtoa.ui.globals import settings pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) pm.columnLayout(adjustableColumn=True) pm.attrControlGrp('autotx', cc=settings.updateAutoTxSettings, label="Auto-convert Textures to TX (Disabled in Anima)", attribute='defaultArnoldRenderOptions.autotx', enable=False) pm.attrControlGrp( 'use_existing_tiled_textures', label="Use Existing TX Textures", attribute='defaultArnoldRenderOptions.use_existing_tiled_textures') # disable autotx pm.setAttr('defaultArnoldRenderOptions.autotx', 0) settings.updateAutoTxSettings() cmds.separator() # don't create texture_automip for 2017 as autoTx is ON by default maya_version = versions.shortName() if int(float(maya_version)) < 2017: pm.attrControlGrp( 'texture_automip', label="Auto-mipmap", attribute='defaultArnoldRenderOptions.textureAutomip') pm.attrControlGrp( 'texture_accept_unmipped', label="Accept Unmipped", attribute='defaultArnoldRenderOptions.textureAcceptUnmipped') cmds.separator() pm.checkBoxGrp('ts_autotile', cc=settings.updateAutotileSettings, label='', label1='Auto-tile') pm.connectControl('ts_autotile', 'defaultArnoldRenderOptions.autotile', index=2) pm.intSliderGrp('ts_texture_autotile', label="Tile Size", minValue=16, maxValue=64, fieldMinValue=16, fieldMaxValue=1024) pm.connectControl('ts_texture_autotile', 'defaultArnoldRenderOptions.textureAutotile', index=1) pm.connectControl('ts_texture_autotile', 'defaultArnoldRenderOptions.textureAutotile', index=2) pm.connectControl('ts_texture_autotile', 'defaultArnoldRenderOptions.textureAutotile', index=3) '''pm.attrControlGrp('texture_autotile', label="Auto-tile Size", attribute='defaultArnoldRenderOptions.textureAutotile')''' pm.attrControlGrp( 'texture_accept_untiled', label="Accept Untiled", attribute='defaultArnoldRenderOptions.textureAcceptUntiled') pm.attrControlGrp( 'texture_max_memory_MB', label="Max Cache Size (MB)", attribute='defaultArnoldRenderOptions.textureMaxMemoryMB') pm.attrControlGrp( 'texture_max_open_files', label="Max Open Files", attribute='defaultArnoldRenderOptions.textureMaxOpenFiles') cmds.separator() cmds.attrControlGrp( 'texture_diffuse_blur', label="Diffuse Blur", attribute='defaultArnoldRenderOptions.textureDiffuseBlur') # cmds.attrControlGrp('texture_glossy_blur', # label="Glossy Blur", # attribute='defaultArnoldRenderOptions.textureGlossyBlur') pm.setParent('..') pm.setUITemplate(popTemplate=True)
def AppleseedEnvironmentCreateTab(self): log.debug("AppleseedEnvironmentCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "AOScrollLayout" envDict = {} self.rendererTabUiDict['environment'] = envDict uiDict = envDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Environment Lighting", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".environmentType") envDict['environmentType'] = pm.attrEnumOptionMenuGrp(label="Environemnt Type", at=self.renderGlobalsNodeName + ".environmentType", ei=self.getEnumList(attr)) with pm.frameLayout(label="Environment Colors", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.floatFieldGrp(label="Environemnt Intensity:", value1=1.0, numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".environmentIntensity", index=2) envDict['environmentColor'] = pm.attrColorSliderGrp(label="Environment Color", at=self.renderGlobalsNodeName + ".environmentColor") envDict['gradientHorizon'] = pm.attrColorSliderGrp(label="Gradient Horizon", at=self.renderGlobalsNodeName + ".gradientHorizon") envDict['gradientZenit'] = pm.attrColorSliderGrp(label="Gradient Zenit", at=self.renderGlobalsNodeName + ".gradientZenit") envDict['environmentMap'] = pm.attrColorSliderGrp(label="Environment Map", at=self.renderGlobalsNodeName + ".environmentMap") self.addRenderGlobalsUIElement(attName='latlongHoShift', uiType='float', displayName='LatLong Horiz Shift:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='latlongVeShift', uiType='float', displayName='LatLong Vertical Shift:', uiDict=uiDict) # envDict['latLongHShift'] = pm.floatFieldGrp(label="LatLong Horiz Shift:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['latLongHShift'], self.renderGlobalsNodeName + ".latlongHoShift", index=2) # envDict['latLongVShift'] = pm.floatFieldGrp(label="LatLong Vertical Shift:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['latLongVShift'], self.renderGlobalsNodeName + ".latlongVeShift", index=2) with pm.frameLayout(label="Physical Sky", collapsable=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".skyModel") envDict['pskModel'] = pm.attrEnumOptionMenuGrp(label="Sky Model", at=self.renderGlobalsNodeName + ".skyModel", ei=self.getEnumList(attr)) pm.separator() envDict['pskUsePhySun'] = pm.checkBoxGrp(label="Use Physical Sun:", value1=False, cc=pm.Callback(self.uiCallback, tab="environment")) pm.connectControl(envDict['pskUsePhySun'], self.renderGlobalsNodeName + ".physicalSun", index=2) envDict['pskPhySun'] = pm.textFieldGrp(label="Sunobject:", text="", editable=False) envDict['pskSunExitMulti'] = pm.floatFieldGrp(label="sunExitance Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskSunExitMulti'], self.renderGlobalsNodeName + ".sunExitanceMultiplier", index=2) # pm.connectControl(envDict['pskPhySun'], self.renderGlobalsNodeName + ".physicalSunConnection", index=2) pm.separator() envDict['pskGrAlbedo'] = pm.floatFieldGrp(label="Ground Albedo:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskGrAlbedo'], self.renderGlobalsNodeName + ".ground_albedo", index=2) envDict['pskGrHShit'] = pm.floatFieldGrp(label="Horizon Shift:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskGrHShit'], self.renderGlobalsNodeName + ".horizon_shift", index=2) envDict['pskLumMulti'] = pm.floatFieldGrp(label="Luminance Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskLumMulti'], self.renderGlobalsNodeName + ".luminance_multiplier", index=2) envDict['pskSatMulti'] = pm.floatFieldGrp(label="Saturation Multiplier:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskSatMulti'], self.renderGlobalsNodeName + ".saturation_multiplier", index=2) # envDict['pskSunAzi'] = pm.floatFieldGrp(label="Sun Azimut:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['pskSunAzi'], self.renderGlobalsNodeName + ".sun_phi", index=2) # envDict['pskSunEle'] = pm.floatFieldGrp(label="Sun Elevation:", value1=1.0, numberOfFields=1) # pm.connectControl(envDict['pskSunEle'], self.renderGlobalsNodeName + ".sun_theta", index=2) envDict['pskTurb'] = pm.floatFieldGrp(label="Turbidity:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurb'], self.renderGlobalsNodeName + ".turbidity", index=2) envDict['pskTurbMax'] = pm.floatFieldGrp(label="Turbidity Max:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMax'], self.renderGlobalsNodeName + ".turbidity_max", index=2) envDict['pskTurbMin'] = pm.floatFieldGrp(label="Turbidity Min:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMin'], self.renderGlobalsNodeName + ".turbidity_min", index=2) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.environmentType, pm.Callback(self.uiCallback, tab="environment")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.skyModel, pm.Callback(self.uiCallback, tab="environment")]) pm.scriptJob(attributeChange=[self.renderGlobalsNode.physicalSun, pm.Callback(self.uiCallback, tab="environment")]) self.updateEnvironment()
def AppleseedRendererCreateTab(self): log.debug("AppleseedRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("renderGlobalsTemplate", pushTemplate=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') uiDict = {} self.rendererTabUiDict['common'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="Pixel Sampler", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): # attr = pm.Attribute(self.renderGlobalsNodeName + ".pixel_renderer") # ui = pm.attrEnumOptionMenuGrp(label="Pixel Sampler", at=self.renderGlobalsNodeName + ".pixel_renderer", ei=self.getEnumList(attr)) self.addRenderGlobalsUIElement(attName='pixel_renderer', uiType='enum', displayName='Pixel Sampler', default='0', uiDict=uiDict, callback=self.AppleseedRendererUpdateTab) self.addRenderGlobalsUIElement(attName='minSamples', uiType='int', displayName='Min Samples', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='maxSamples', uiType='int', displayName='Max Samples', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='maxError', uiType='float', displayName='Max Error', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='enable_diagnostics', uiType='bool', displayName="Diagnostic AOV's", default=False, uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName='frameRendererPasses', uiType='int', displayName='Passes', uiDict=uiDict) with pm.frameLayout(label="Filtering", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp(label="Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei=self.getEnumList(attr)) self.addRenderGlobalsUIElement(attName='filtersize', uiType='int', displayName='Filter Size', default=False, uiDict=uiDict) with pm.frameLayout(label="Features", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='doMotionBlur', uiType='bool', displayName='Motion Blur', default=False, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='doDof', uiType='bool', displayName='Depth Of Field', default=False, uiDict=uiDict) with pm.frameLayout(label="Output", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".bitdepth") ui = pm.attrEnumOptionMenuGrp(label="Bit Depth", at=self.renderGlobalsNodeName + ".bitdepth", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".colorSpace") ui = pm.attrEnumOptionMenuGrp(label="Color Space", at=self.renderGlobalsNodeName + ".colorSpace", ei=self.getEnumList(attr)) ui = pm.checkBoxGrp(label="Clamping:", value1=False) pm.connectControl(ui, self.renderGlobalsNodeName + ".clamping", index=2) with pm.frameLayout(label="Lighting Engine", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='lightingEngine', uiType='enum', displayName='Lighting Engine', default='0', uiDict=uiDict, callback=self.AppleseedRendererUpdateTab) with pm.frameLayout(label="Lighting Engine Settings", collapsable=True, collapse=False) as uiDict['LE_framelayout']: with pm.columnLayout(self.rendererName + "LEColumnLayout", adjustableColumn=True, width=400) as uiDict['LE_layout']: pass with pm.frameLayout(label="Renderer", collapsable=True, collapse=True): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='threads', uiType='int', displayName='Threads:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='rendererVerbosity', uiType='int', displayName='Verbosity:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='tilesize', uiType='int', displayName='Tile Size:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='texCacheSize', uiType='int', displayName='Tex Cache Size (kb):', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='assemblySBVH', uiType='bool', displayName='Use SBVH Acc. for mb:', uiDict=uiDict) pm.setUITemplate("renderGlobalsTemplate", popTemplate=True) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) # pm.scriptJob(attributeChange=[self.renderGlobalsNode.samplingType, pm.Callback(self.KrayRendererUIUpdateCallback, "sampling")]) # self.updateEnvironment() self.AppleseedRendererUpdateTab()
def rp_surface(): """..............................................................................................//""" ncj = int(pm.intField('NCJ', q=1, v=1)) # > control joints rn = float(pm.intField('NJ', q=1, v=1)) bz = int(pm.checkBoxGrp('CTJP', q=1, v1=1)) s = pm.ls(sl=1) rp_check(s) if pm.objExists(s[0] + "_surface"): rp_del() rp_cr() cj = pm.ls((s[0] + "_ctj_*"), typ="joint") x = 0.0 if pm.optionMenuGrp('AXES', q=1, v=1) == "x": x = float(1) y = 0.0 if pm.optionMenuGrp('AXES', q=1, v=1) == "y": y = float(1) z = 0.0 if pm.optionMenuGrp('AXES', q=1, v=1) == "z": z = float(1) su = pm.extrude(s[0], upn=0, dl=3, ch=bz, d=(x, y, z), n=(s[0] + "_surface"), et=0, rn=0, po=0) pm.pm.cmds.move(((-1) * (x / 2)), ((-1) * (y / 2)), ((-1) * (z / 2)), su[0]) pm.makeIdentity(su[0], a=1, t=1) sj = pm.ls((s[0] + "_tw_*"), typ="joint") # pivot move t = (pm.xform(cj[0], q=1, ws=1, t=1)) pm.setAttr((su[0] + ".rpx"), (t.x)) pm.setAttr((su[0] + ".rpy"), (t.y)) pm.setAttr((su[0] + ".rpz"), (t.z)) pm.setAttr((su[0] + ".spx"), (t.x)) pm.setAttr((su[0] + ".spy"), (t.y)) pm.setAttr((su[0] + ".spz"), (t.z)) # hairs hsys = str(pm.createNode("hairSystem", n=(s[0] + "_position"))) hsysg = pm.listRelatives(hsys, p=1) pm.rename(hsysg[0], (s[0] + "_surface_grp_")) pm.select(su[0], hsys) pm.mel.createHair((len(sj)), 1, 2, 0, 0, 1, 1, 1, 0, 2, 2, 1) pm.delete((s[0] + "_surface_grp_"), (s[0] + "_surface_grp_OutputCurves")) # joints sg = pm.listRelatives((s[0] + "_surface_grp_Follicles"), c=1) pm.delete(s[0] + "_tw_hl") for i in range(0, (len(sj))): pm.parent(sj[i], sg[i]) pm.makeIdentity(sj[i], a=1, r=1) pm.connectAttr((s[0] + "_rig.s"), (sg[i] + ".s"), f=1) pm.parent(su[0], (s[0] + "_sistem")) pm.parent((s[0] + "_surface_grp_Follicles"), (s[0] + "_sistem")) # conection scale joints if bz == 0: if pm.checkBoxGrp('CTJ', q=1, v1=1): for i in range(0, (len(cj))): pm.disconnectAttr((s[0] + "_" + str((i + 1)) + "_CT.change"), (cj[i] + ".sy")) pm.disconnectAttr((s[0] + "_" + str((i + 1)) + "_CT.change"), (cj[i] + ".sz")) pm.delete((s[0] + "_sx"), (s[0] + "_s")) sx = str(pm.createNode('multiplyDivide', n=(s[0] + "_pow"))) # pow scale pm.setAttr((sx + ".op"), 2) pm.connectAttr((s[0] + "_rig.s"), (sx + ".i2"), f=1) pm.setAttr((sx + ".i1x"), 1) pm.setAttr((sx + ".i1y"), 1) pm.setAttr((sx + ".i1z"), 1) pm.connectAttr((sx + ".o"), (s[0] + "_surface_grp_Follicles.s"), f=1) # > skin fol = pm.ls((s[0] + "_surfaceFollicle*"), typ="transform") for i in range(0, (len(fol))): pm.setAttr((fol[i] + ".it"), 0) if bz == 0: pm.rebuildSurface(su[0], dv=1, du=3, sv=0, su=rn) pm.intField('NJ', e=1, v=rn) pm.skinCluster(cj, su[0], mi=2, rui=1, dr=2.0, n=(s[0] + "_skin_surface")) pm.setAttr((su[0] + ".it"), 0) pm.setAttr((su[0] + ".tmp"), 1) # > end pm.select(s[0])
def animateExport(): trans = pm.checkBoxGrp('exportType',q = 1,v1 = 1) rotate = pm.checkBoxGrp('exportType',q = 1,v2 = 1) custom = pm.checkBoxGrp('exportType',q = 1,v3 = 1) path = pm.textFieldGrp('exportPath',q = 1,tx = 1) animExport(trans,rotate,custom,path)
def child_tab_export(self): layout = pm.formLayout(numberOfDivisions=100) file_export_list_frame = pm.frameLayout(label=u"数据文件列表:", mw=10, mh=10, bgs=True) pm.textFieldButtonGrp('template_file_setter', label=u"模板文件", bl=u"指定", adj=2, cw3=[52, 100, 60], cat=[(2, "left", 5), (3, "left", 5)], text=self.template_file, bc=lambda *args: self._set_template_file()) pm.textScrollList('export_list_input', ams=True) pm.popupMenu() pm.menuItem(label=u"移除选择", c=lambda *args: self._remove_selected_item()) pm.menuItem(label=u"移除所有", c=lambda *args: self._remove_all_item()) pm.setParent("..") export_options_frame = pm.frameLayout(label=u"输出选项:", mw=10, mh=10, bgs=True) pm.textFieldButtonGrp('output_path_setter', label=u"存放路径", bl=u"设置", adj=2, cw3=[52, 100, 60], cat=[(2, "left", 5), (3, "left", 5)], text=self.output_path, bc=lambda *args: self._set_output_location()) pm.rowColumnLayout(nr=1) pm.checkBoxGrp('cleanFileChecked', label=u"清理文件", value1=self.clean_file, cw2=[52, 30], cat=[(2, "left", 5)], cc=lambda *args: self._set_clean_file_check()) pm.checkBoxGrp('exportAtomFileChecked', label=u"输出Atom动画数据", value1=self.export_atom, cw2=[120, 30], cat=[(2, "left", 5)], cc=lambda *args: self._set_export_atom_check()) pm.setParent("..") pm.setParent("..") execute_button = pm.button(label=u"输出!", c=lambda *args: self.start_export_work()) pm.formLayout( layout, edit=True, attachForm=[(file_export_list_frame, 'top', 10), (file_export_list_frame, 'left', 10), (file_export_list_frame, 'right', 10), (export_options_frame, 'left', 10), (export_options_frame, 'right', 10), (execute_button, 'left', 10), (execute_button, 'right', 10), (execute_button, 'bottom', 10)], attachControl=[ # (file_export_list_frame, 'top', 5, project_store_path_frame), (file_export_list_frame, 'bottom', 5, export_options_frame), (export_options_frame, 'bottom', 5, execute_button) ], # attachPosition=[(b1, 'right', 5, 75), # (column, 'left', 0, 75)], # attachNone=(b2, 'top')) ) pm.setParent("..") return layout
def __init__(self, inst): self.initializeFrame = pm.frameLayout( parent = inst.simpleSetup_layout, w =244, label='Initialize', borderStyle='out', cll = True, cl = True ) self.nameRigTFBG = pm.textFieldButtonGrp( parent = self.initializeFrame, cw = ( [ 1, 110 ], [ 2, 210 ], [ 3, 40 ] ), cal = ( 2, 'center'), label='Rig Name ', pht=' >>> Name Your Rig <<<', buttonLabel='Load', cc = self.rigName_load, bc = self.rigName_load ) self.displayVisChkBoxGRP = pm.checkBoxGrp( parent = self.initializeFrame, label = 'Display Visibility ', cw = ( [ 1, 110 ], [ 2, 80 ], [ 3, 80 ], [ 4, 80 ] ), numberOfCheckBoxes = 3, labelArray3 = ['Model', 'Skeleton', 'Control'], v1 = 1, v2 = 1, v3 = 1 ) self.displayTypeChkBoxGRP = pm.checkBoxGrp( parent = self.initializeFrame, label = 'Display Type ', cw = ( [ 1, 110 ], [ 2, 80 ], [ 3, 80 ], [ 4, 80 ] ), numberOfCheckBoxes = 3, labelArray3 = ['Model', 'Skeleton', 'Control'], v1 = 1, v2 = 1, v3 = 1 ) self.additionalAttrsChkBoxGRP = pm.checkBoxGrp( parent = self.initializeFrame, label = 'Additional Attributes ', cw = ( [ 1, 110 ], [ 2, 80 ], [ 3, 80 ], [ 4, 80 ] ), numberOfCheckBoxes = 3, labelArray3 = ['Speed', 'Pose', 'Costume'] )
def _set_clean_file_check(self): self.clean_file = pm.checkBoxGrp('cleanFileChecked', q=True, value1=True)
def createUi(self, node=None): log.debug("createUi for node %s" % str(node)) currentSegment = "" layoutList = [] for att in self.attList: if att.kategory != None and currentSegment != att.kategory: log.debug("kategory %s != %s" % (currentSegment, att.kategory)) katlist = att.kategory.split("|") diff = len(layoutList) - len(katlist) # neue liste ist kuerzer als alte, also solange dicht machen bis die laenge gleich ist log.debug("check diff %d" % diff) while diff > 0: layoutList.pop() pm.setParent("..") pm.setParent("..") diff = len(layoutList) - len(katlist) log.debug("new diff %d" % diff) # alte liste ist nun nicht laenger als neue liste # durchgehen und alles dichtmachen was nicht gleich ist for i in range(len(layoutList)): kat = katlist[i] ckat = layoutList[i] # wenn werte ungelich dann alles was noch kommt zumachen if kat != ckat: laylen = len(layoutList) for n in range(i, laylen): pm.setParent("..") pm.setParent("..") layoutList.pop(n) # nun sollte sichergestellt sein, dass layoutList nur noch elemente # enthaelt, die gleich sind, also kann man daran anknuepfen for i in range(len(layoutList), len(katlist)): log.debug("opening layout for katlist %s %d %s" % (str(katlist), i, katlist[i])) self.beginUISegment(katlist[i]) layoutList.append(katlist[i]) currentSegment = att.kategory if MAP_API_ATTR.has_key(att.type): log.debug("Adding element %s with displayName %s" % (att.attname, att.displayname)) attype, attypeval = MAP_API_ATTR[att.type] log.debug( "Adding attribute named %s type %s val %s default %s" % (att.attname, attype, attypeval, att.default)) if attypeval == 'bool': att.uiElement = pm.checkBoxGrp(att.attname, numberOfCheckBoxes=1, label1=att.displayname, cc=Callback( self.dimConnections, att)) att.uiDimFunction = pm.checkBoxGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index=2) if attypeval == 'int': att.uiElement = pm.intFieldGrp(att.attname, numberOfFields=1, label=att.displayname, value1=att.default, cc=Callback( self.dimConnections, att)) att.uiDimFunction = pm.intFieldGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index=2) if attypeval == 'long2': if node: att.uiDimFunction = pm.attrFieldGrp( attribute='%s' % (node + "." + att.attname), cc=Callback(self.dimConnections, att)) if attypeval == 'float': att.uiElement = pm.floatFieldGrp(att.attname, numberOfFields=1, label=att.displayname, value1=att.default, cc=Callback( self.dimConnections, att)) att.uiDimFunction = pm.floatFieldGrp if node: pm.connectControl(att.uiElement, node + "." + att.attname, index=2) if attypeval == 'float2': if node: att.uiDimFunction = pm.attrFieldGrp( attribute='%s' % (node + "." + att.attname), cc=Callback(self.dimConnections, att)) if attypeval == 'string': att.uiElement = pm.textFieldGrp(att.attname, label=att.displayname, text=att.default, cc=Callback( self.dimConnections, att)) pm.connectControl(att.uiElement, node + "." + att.attname, index=2) pm.textFieldGrp(att.uiElement, edit=True, text=att.default) if attypeval == 'enum': poplist = map(list, enumerate(att.values)) if node: nodeatt = node + "." + att.attname att.uiElement = pm.attrEnumOptionMenuGrp( att.attname, label=att.displayname, at=nodeatt, ei=poplist, vcc=Callback(self.dimConnections, att)) att.uiDimFunction = pm.attrEnumOptionMenuGrp else: att.uiElement = pm.attrEnumOptionMenuGrp( att.attname, label=att.displayname, ei=poplist, vcc=Callback(self.dimConnections, att)) att.uiDimFunction = pm.attrEnumOptionMenuGrp if attypeval == 'message': pass if len(layoutList) > 0: for i in range(len(layoutList)): pm.setParent("..") pm.setParent("..")
def _set_export_atom_check(self): self.export_atom = pm.checkBoxGrp('exportAtomFileChecked', q=True, value1=True)
def uIGenerator(self): if pm.window(self.myWinName, query=True, exists=True): pm.deleteUI(self.myWinName) try: if pm.windowPref(self.myWinName, query=True, exists=True) and self.window_development: pm.windowPref(self.myWinName, remove=True) except RuntimeError: pass myWindow = pm.window(self.myWinName, title='Object Instancer', widthHeight=[600, 300]) base = pm.verticalLayout() with base: with pm.verticalLayout() as header: title = pm.text(label='Object Instancer'.upper()) pm.separator() with pm.verticalLayout() as target: self.targetInstances = pm.intSliderGrp( label="Target Instances", field=True, minValue=0, maxValue=1000, changeCommand=self.storeTargetInstances) pm.separator() with pm.verticalLayout() as randomization: title3 = pm.text(label='Randomization') self.rotation = pm.checkBoxGrp( numberOfCheckBoxes=3, label="Rotation ", labelArray3=("RotateX", "RotateY", "RotateZ"), changeCommand=self.storeRotations) self.translation = pm.checkBoxGrp( numberOfCheckBoxes=3, label="Translation ", labelArray3=("TransX", "TransY", "TransZ"), changeCommand=self.storeTranslation) pm.separator() with pm.verticalLayout() as Randomness: self.rRPecentage = pm.floatSliderGrp( label="Rotation Randomness", field=True, minValue=0, maxValue=100) self.tRPecentage = pm.floatSliderGrp( label="Translation Randomness", field=True, minValue=0, maxValue=100) with pm.horizontalLayout() as Button: pm.button(label='Generate', backgroundColor=[0, 1, 0.5], align='left', command=self.generate) base.redistribute(.4) header.redistribute(1, .1) myWindow.show()
def create(self): if (pm.window(self.window, exists=True)): pm.deleteUI(self.window, window=True) # initialize the window self.window = pm.window(self.window, title=self.title, wh=self.size, s=0) # main form layout self.mainForm = pm.formLayout() # Locator area -------------------------------------------------------- # frame for locator generation self.locatorFrame = pm.frameLayout(l='Locators', collapsable=1) # form layout inside of frame self.locatorForm = pm.formLayout() # TODO: hook up locator generation to this button self.genLoc = pm.button(l='Generate Locators', c=self.generateLocatorsBtn, h=32) # attach controls in the locator form af = [] af.append([self.genLoc, 'top', 1]) af.append([self.genLoc, 'left', 2]) af.append([self.genLoc, 'right', 2]) af.append([self.genLoc, 'bottom', 1]) pm.formLayout(self.locatorForm, e=True, attachForm=af) # Skeleton area ------------------------------------------------------- # frame for skeleton generation pm.setParent(self.mainForm) self.skeletonFrame = pm.frameLayout(l='Skeleton', collapsable=1) # skeleton form self.skeletonForm = pm.formLayout() # TODO: hook up skeleton generation to this button self.genSkel = pm.button(l='Generate Skeleton', c=self.generateSkeletonBtn, h=32) pm.setParent(self.skeletonForm) # skeleton modifiers frame self.skelModFrame = pm.frameLayout(l='Skeleton Options', collapsable=1) self.skelModForm = pm.formLayout() # int field for specifying number of spine joints self.spineText = pm.text(label='Number of spine joints: ') self.spineIntField = pm.intField(ann='Number of spine joints', min=1, v=4) # skeleton modifer checkboxes self.skelModRadio = pm.checkBoxGrp( labelArray3=['Reverse Foot', 'Wrist Twists', 'IK/FK'], numberOfCheckBoxes=3) af = [] ac = [] ac.append([self.spineIntField, 'left', 1, self.spineText]) ac.append([self.skelModRadio, 'top', 4, self.spineText]) af.append([self.spineText, 'top', 4]) af.append([self.spineText, 'left', 3]) af.append([self.skelModRadio, 'left', 2]) af.append([self.spineIntField, 'top', 1]) pm.formLayout(self.skelModForm, e=True, attachControl=ac, attachForm=af) af = [] ac = [] ac.append([self.skelModFrame, 'top', 1, self.genSkel]) af.append([self.skelModFrame, 'right', 2]) af.append([self.skelModFrame, 'left', 5]) af.append([self.genSkel, 'top', 1]) af.append([self.genSkel, 'left', 2]) af.append([self.genSkel, 'right', 2]) pm.formLayout(self.skeletonForm, e=True, attachControl=ac, attachForm=af) # Control rig area ---------------------------------------------------- # frame for control rig generation pm.setParent(self.mainForm) self.controlFrame = pm.frameLayout(l='Control Rig', collapsable=1) # form layout for control rig self.controlForm = pm.formLayout() # control rig generation button self.genControl = pm.button(l='Generate Control Rig', c=self.generateControlRigBtn, h=32) af = [] af.append([self.genControl, 'top', 1]) af.append([self.genControl, 'left', 2]) af.append([self.genControl, 'right', 2]) pm.formLayout(self.controlForm, e=True, attachForm=af) # attach frames to main form ac = [] af = [] ac.append([self.skeletonFrame, 'top', 0, self.locatorFrame]) ac.append([self.controlFrame, 'top', 0, self.skeletonFrame]) af.append([self.locatorFrame, 'top', 0]) af.append([self.locatorFrame, 'left', 0]) af.append([self.locatorFrame, 'right', 0]) af.append([self.skeletonFrame, 'left', 0]) af.append([self.skeletonFrame, 'right', 0]) af.append([self.controlFrame, 'bottom', 0]) af.append([self.controlFrame, 'left', 0]) af.append([self.controlFrame, 'right', 0]) pm.formLayout(self.mainForm, e=True, attachControl=ac, attachForm=af) # show the window pm.showWindow(self.window) # force window size pm.window(self.window, e=True, wh=self.size)