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 layersReplace(self, attribute): if attribute is not "none": self.thisNode = pm.PyNode(attribute).node() log.debug("layersReplace {0}".format(attribute)) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) materialEntries = self.thisNode.materialEntryMtl.numElements() #print "layersReplace: node has ", self.thisNode.materialEntryMtl.numElements(), "layers" if self.layersUi is not None: pm.deleteUI(self.layersUi) with pm.columnLayout(adj=True, parent=self.uiParent) as self.layersUi: for layerNumber in range(materialEntries): layerIndex = self.thisNode.materialEntryMtl.elementByPhysicalIndex(layerNumber).index() with pm.frameLayout(label="Layer {0}".format(layerNumber), collapsable=True, collapse=False): print "create layer", layerNumber with pm.columnLayout(adj=True): attribute = self.thisNode.materialEntryMtl[layerIndex] tf = pm.textFieldGrp(label="Shader", editable=False) if attribute.isConnected(): tf.setText(attribute.inputs(p=1)[0]) pm.attrColorSliderGrp(label="Material", at=attribute) attribute = self.thisNode.materialEntryAmount[layerIndex] pm.attrColorSliderGrp(label="Amount", at=attribute) with pm.columnLayout(adj=True): pm.button(label="Remove Layer", c=pm.Callback(self.removeLayer, layerIndex), height=18) pm.button(label="Layer Up", c=pm.Callback(self.moveLayerUp, layerIndex), height=18) pm.button(label="Layer Down", c=pm.Callback(self.moveLayerDown, layerIndex), height=18) pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
def create_vdb_path(self, param_name): pm.setUITemplate("attributeEditorPresetsTemplate", pushTemplate=True) pm.textFieldButtonGrp("OpenVDBPathGrp", label="VDB Path", buttonLabel="...") self.update_vdb_path(param_name) pm.setUITemplate(popTemplate=True)
def create_widgets(self): pm.setParent(pm.mel.globals['gPreferenceWindow']) # Stop if this already exists. if pm.columnLayout(_layout_name, q=True, numberOfChildren=True) > 0: return # Create the UI pm.setParent(_layout_name) pm.setUITemplate('prefsTemplate', pushTemplate=True) try: # This is used to force the width to fill the window pm.separator(style='none', h=1) pm.frameLayout(label='zMayaTools') pm.columnLayout(adj=True) for pref_handler in self.preference_handlers: pref_handler.create_widgets() finally: pm.setUITemplate(popTemplate=True) # Load the optvars into the window. self.all_optvars_to_window()
def buildUI(self): pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) with pm.frameLayout(label="Components", collapsable=False): with pm.columnLayout(adj=True): self.scrollList = pm.textScrollList(doubleClickCommand=self.componentClicked) pm.textScrollList(self.scrollList, edit=True, append=self.getComponentList()) pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
def TheaEnvironmentCreateTab(self): log.debug("TheaEnvironmentCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "EnvScrollLayout" if self.rendererTabUiDict.has_key('environment'): self.rendererTabUiDict.pop('environment') uiDict = {} self.rendererTabUiDict['environment'] = uiDict cb = self.TheaEnvironmentUpdateTab 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): self.addRenderGlobalsUIElement(attName = 'illumination', uiType = 'enum', displayName = 'Illumination', default='0', data='NoIllumination:DomeIllumination:IBLIllumination:PhysicalSkyIllumination', uiDict=uiDict, callback=cb) self.addRenderGlobalsUIElement(attName='backgroundColor', uiType='color', displayName='Background Color', default='0.4:0.4:1.0', uiDict=uiDict) with pm.frameLayout(label="Physical Sky", collapsable=False) as uiDict['physSkyFrame']: with pm.columnLayout(self.rendererName + 'ColumnLayout', adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName = 'turbidity', uiType = 'float', displayName = 'Turbidity', default='2.5', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'ozone', uiType = 'float', displayName = 'Ozone', default='0.35', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'waterVapor', uiType = 'float', displayName = 'Water Vapour', default='2.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'turbidityCoefficient', uiType = 'float', displayName = 'Turbidity Coeff', default='0.046', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'wavelengthExponent', uiType = 'float', displayName = 'Wavelength Exponent', default='1.3', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'albedo', uiType = 'float', displayName = 'Albedo', default='0.5', uiDict=uiDict) with pm.frameLayout(label="Physical Sun", collapsable=False) as uiDict['physSunFrame']: with pm.columnLayout(self.rendererName + 'ColumnLayout', adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName = 'sunPolarAngle', uiType = 'float', displayName = 'Sun Polar Angle', default='-1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'sunAzimuth', uiType = 'float', displayName = 'Sun Azimuth', default='-1.0', uiDict=uiDict) #self.addRenderGlobalsUIElement(attName = 'sunDirection', uiType = 'vector', displayName = 'Sun Direction', default='0:0:0', uiDict=uiDict) with pm.frameLayout(label="Time Zone", collapsable=False) as uiDict['timeZoneFrame']: with pm.columnLayout(self.rendererName + 'ColumnLayout', adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName = 'latitude', uiType = 'float', displayName = 'Latitude', default='0.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'longitude', uiType = 'float', displayName = 'Longitude', default='0.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'timezone', uiType = 'int', displayName = 'Timezone', default='0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'date', uiType = 'string', displayName = 'Date', default='"1/6/2014"', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'localtime', uiType = 'string', displayName = 'Localtime', default='"12:00:00"', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'ior', uiType = 'float', displayName = 'IOR', default='1.0', uiDict=uiDict) with pm.frameLayout(label="IBL", collapsable=False) as uiDict['iblFrame']: with pm.columnLayout(self.rendererName + 'ColumnLayout', adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName = 'illuminationMap', uiType = 'color', displayName = 'Illumination Map', default='0:0:0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'backgroundMap', uiType = 'color', displayName = 'Background Map', default='0:0:0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'reflectionMap', uiType = 'color', displayName = 'Reflection Map', default='0:0:0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'RefractionMap', uiType = 'color', displayName = 'Refraction Map', default='0:0:0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'medium', uiType = 'message', displayName = 'Medium', default='', uiDict=uiDict) # self.addRenderGlobalsUIElement(attName='useSunLightConnection', uiType='bool', displayName='Use Sun', uiDict=uiDict) # buttonLabel = "Create Sun" # suns = pm.ls("CoronaSun") # if len(suns) > 0: # buttonLabel = "Delete Sun" # uiDict['sunButton'] = pm.button(label=buttonLabel, command=self.editSun) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) self.TheaEnvironmentUpdateTab()
def buildUI(self): pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) self.passesParent = pm.setParent(query=True) frameLayout = None with pm.frameLayout(label="Passes", collapsable=False, parent=self.parent) as frameLayout: with pm.columnLayout(adj=True): with pm.rowLayout(adj=True, nc=2, cw=((1, 200), (2, 200)), h=350): with pm.frameLayout(label="Existing Passes", collapsable=False, h=350): self.availableAOVsListUI = pm.textScrollList( doubleClickCommand=self.AOVdoubleClicked) pm.textScrollList(self.availableAOVsListUI, edit=True, append=self.getAOVs()) with pm.frameLayout(label="Active Passes", collapsable=False, h=350): self.activeAOVsListUI = pm.textScrollList( selectCommand=self.exsistingAOVclicked, doubleClickCommand=self.exsistingAOVdoubleClicked) self.updateExistingAOVList() pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.scriptJob(event=("NameChanged", self.nameChangedCallback), parent=frameLayout)
def layersReplace(self, attribute): if attribute is not "none": self.thisNode = pm.PyNode(attribute).node() log.debug("layersReplace {0}".format(attribute)) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) materialEntries = self.thisNode.materialEntryMtl.numElements() #print "layersReplace: node has ", self.thisNode.materialEntryMtl.numElements(), "layers" if self.layersUi is not None and pm.columnLayout(self.layersUi, q=True, exists=True): pm.deleteUI(self.layersUi) with pm.columnLayout(adj=True, parent=self.uiParent) as self.layersUi: for layerNumber in range(materialEntries): layerIndex = self.thisNode.materialEntryMtl.elementByPhysicalIndex(layerNumber).index() with pm.frameLayout(label="Layer {0}".format(layerNumber), collapsable=True, collapse=False, bv=True) as fl: log.debug("create layers UI {0}".format(self.thisNode.materialEntryMtl[layerIndex])) with pm.columnLayout(adj=True): attribute = self.thisNode.materialEntryMtl[layerIndex] if attribute.isConnected(): pm.frameLayout(fl, edit=True, label=attribute.inputs(p=1)[0]) pm.attrColorSliderGrp(label="Material", at=attribute) attribute = self.thisNode.materialEntryMsk[layerIndex] pm.attrFieldSliderGrp(label="Mask", at=attribute) attribute = self.thisNode.materialEntryMode[layerIndex] pm.attrEnumOptionMenuGrp(label="Mode", at=attribute) with pm.columnLayout(adj=True): pm.button(label="Remove Layer", c=pm.Callback(self.removeLayer, layerIndex), height=18) pm.button(label="Layer Up", c=pm.Callback(self.moveLayerUp, layerIndex), height=18) pm.button(label="Layer Down", c=pm.Callback(self.moveLayerDown, layerIndex), height=18) pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
def initUI(self): pm.setUITemplate("DefaultTemplate", pushTemplate=True) form = pm.formLayout() versionData = pm.mayatoCorona(version=True) license = versionData[7].split("\r\n") with pm.columnLayout('AboutLayout') as StandinLayout: with pm.rowColumnLayout('AboutColumnLayout', nc=2, columnWidth=((1, 160), (2, 220)), co=(2, "left", 10)): pm.text(label="mayaToCorona:", align="right") pm.text(label=versionData[0], align="left") pm.text(label="Corna version:", align="right") pm.text(label=versionData[1], align="left") pm.text(label="OIIO:", align="right") pm.text(label=versionData[2], align="left") pm.text(label="OSL:", align="right") pm.text(label=versionData[3], align="left") pm.text(label="BOOST:", align="right") pm.text(label=versionData[4], align="left") pm.text(label="OpenEXR:", align="right") pm.text(label=versionData[5], align="left") pm.text(label="License type:", align="right") pm.text(label=license[0], align="left") pm.text(label="Valid until:", align="right") pm.text(label=license[1].replace("Activated until: ", ""), align="left") pm.separator() with pm.columnLayout(): pm.text(label="Corona Renderer\n(c) Render Legion s.r.o., 2014-2015", align="center") #pm.textField(text="Corona Renderer (c) Render Legion s.r.o., 2014-2015") pm.formLayout(form, edit=True, attachForm=[(StandinLayout, 'top', 5), (StandinLayout, 'bottom', 5), (StandinLayout, 'right', 5), (StandinLayout, 'left', 5)]) pm.setUITemplate("DefaultTemplate", popTemplate=True)
def buildUI(self): pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) with pm.frameLayout(label="Components", collapsable=False): with pm.columnLayout(adj=True): self.scrollList = pm.textScrollList( doubleClickCommand=self.componentClicked) pm.textScrollList(self.scrollList, edit=True, append=self.getComponentList()) pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
def FujiRendererCreateTab(self): log.debug("FujiRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query = True) pm.setUITemplate("attributeEditorTemplate", pushTemplate = True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') parentForm = pm.setParent(query = True) 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="Sampling", collapsable = True, collapse=False): self.addRenderGlobalsUIElement(attName = 'sampleJitter', uiType = 'float', displayName = 'SampleJitter', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'sample_time_range_min', uiType = 'float', displayName = 'Sample Time Range Min', default='0.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'sample_time_range_max', uiType = 'float', displayName = 'Sample Time Range Max', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'samplesX', uiType = 'int', displayName = 'Pixel Samples x', default=3, uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'samplesY', uiType = 'int', displayName = 'Pixel Samples y', default=3, uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName = 'cast_shadow', uiType = 'bool', displayName = 'Cast Shadows', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'max_reflect_depth', uiType = 'int', displayName = 'Max Reflection Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'max_refract_depth', uiType = 'int', displayName = 'Max Refraction Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_step', uiType = 'float', displayName = 'Raymarching Stepsize', default='0.05', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_shadow_step', uiType = 'float', displayName = 'Raymarching Shadow Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_reflect_ste', uiType = 'float', displayName = 'Raymarching Reflection Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'raymarch_refract_ste', uiType = 'float', displayName = 'Raymarching Refraction Stepsize', default='0.1', uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName = 'doMotionBlur', uiType = 'bool', displayName = 'Motionblur:', 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): attr = pm.Attribute(self.renderGlobalsNodeName + ".imageFormat") ui = pm.attrEnumOptionMenuGrp(label = "Image Format", at=self.renderGlobalsNodeName + ".imageFormat", ei = self.getEnumList(attr)) with pm.frameLayout(label="Filtering", collapsable = True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp(label = "Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei = self.getEnumList(attr)) ui = pm.intFieldGrp(label="Filter Size:", numberOfFields = 1) pm.connectControl(ui, self.renderGlobalsNodeName + ".filtersize", index = 2 ) with pm.frameLayout(label="Renderer", collapsable = True, collapse=False): self.addRenderGlobalsUIElement(attName = 'use_max_thread', uiType = 'bool', displayName = 'Use Max Threads', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'threads', uiType = 'int', displayName = 'Threads', default=8, uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'tilesize', uiType = 'int', displayName = 'Tile Size', default=64, uiDict=uiDict) ui = pm.intFieldGrp(label="Verbosity:", numberOfFields = 1) pm.connectControl(ui, self.renderGlobalsNodeName + ".rendererVerbosity", 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.FujiRendererUpdateTab()
def AppleseedEnvironmentCreateTab(self): 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="Environment Type", at=self.renderGlobalsNodeName + ".environmentType", ei=self.getEnumList(attr)) with pm.frameLayout(label="Environment Colors", collapsable=False) as envDict['commonEnvFrame']: with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): ui = pm.floatFieldGrp(label="Environment 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 Color:", at=self.renderGlobalsNodeName + ".gradientHorizon") envDict['gradientZenit'] = pm.attrColorSliderGrp(label="Gradient Zenith Color:", at=self.renderGlobalsNodeName + ".gradientZenit") envDict['environmentMap'] = pm.attrColorSliderGrp(label="Environment Map:", at=self.renderGlobalsNodeName + ".environmentMap") self.addRenderGlobalsUIElement(attName='latlongHoShift', uiType='float', displayName='Lat-Long Horizontal Shift:', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='latlongVeShift', uiType='float', displayName='Lat-Long Vertical Shift:', uiDict=uiDict) with pm.frameLayout(label="Physical Sky", collapsable=False) as envDict['pysSkyFrame']: 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)) uiDict['sunLightOptionMenu'] = pm.optionMenuGrp(label="Sun Light:", changeCommand=self.updateSunLightOptionMenu) 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['pskTurb'] = pm.floatFieldGrp(label="Turbidity:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurb'], self.renderGlobalsNodeName + ".turbidity", index=2) envDict['pskTurbMin'] = pm.floatFieldGrp(label="Turbidity Min:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMin'], self.renderGlobalsNodeName + ".turbidity_min", index=2) envDict['pskTurbMax'] = pm.floatFieldGrp(label="Turbidity Max:", value1=1.0, numberOfFields=1) pm.connectControl(envDict['pskTurbMax'], self.renderGlobalsNodeName + ".turbidity_max", index=2) with pm.frameLayout(label="OSL", collapsable=False) as envDict['oslFrame']: with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): envDict['environmentOSL'] = pm.attrColorSliderGrp(label="OSL Background", at=self.renderGlobalsNodeName + ".environmentOSL") 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")]) self.updateEnvironment()
def buildAOVFrame(self, nodeAttr): # TODO: move this into AttributeEditorTemplate self._setActiveNodeAttr(nodeAttr) nodeAttr = pm.Attribute(nodeAttr) aovList = aovs.getAOVs() self.updateNetworkData() self.updateCustomArrayData(nodeAttr, aovList) pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) pm.cmds.frameLayout(label='AOVs', collapse=False) pm.cmds.columnLayout(adjustableColumn=True) pm.cmds.frameLayout(label='Surface Shader AOVs', collapse=False) pm.cmds.columnLayout(adjustableColumn=True) pm.cmds.rowLayout(nc=2) pm.cmds.text(label='') pm.cmds.button( label='AOV Browser', c=lambda *args: aoveditor.arnoldAOVBrowser( listAOVGroups=True, nodeTypes=self.networkNodeTypes)) pm.setParent('..') # rowLayout pm.cmds.frameLayout(labelVisible=False, collapsable=False) self.networkCol = pm.cmds.columnLayout(adjustableColumn=True) self.buildNetworkAOVs(nodeAttr, aovList) pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.cmds.frameLayout(label='Other AOVs', collapse=False) pm.cmds.columnLayout(adjustableColumn=True) pm.cmds.rowLayout(nc=2) pm.cmds.text(label='') pm.cmds.button(label='Add Custom', c=lambda *args: shaderTemplate.newAOVPrompt()) pm.setParent('..') # rowLayout pm.cmds.frameLayout(labelVisible=False, collapsable=False) self.otherCol = pm.cmds.columnLayout(adjustableColumn=True) self.buildOtherAOVs(nodeAttr, aovList) pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setUITemplate('attributeEditorTemplate', popTemplate=True)
def MantraTranslatorCreateTab(self): log.debug("MantraTranslatorCreateTab()") 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): mantraAttributes.mantraTranslatorATList.createUi(self.renderGlobalsNodeName) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def buildAOVFrame(self, nodeAttr): # TODO: move this into AttributeEditorTemplate self._setActiveNodeAttr(nodeAttr) nodeAttr = pm.Attribute(nodeAttr) aovList = aovs.getAOVs() self.updateNetworkData() self.updateCustomArrayData(nodeAttr, aovList) pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) pm.cmds.frameLayout(label='AOVs', collapse=False) pm.cmds.columnLayout(adjustableColumn=True) pm.cmds.frameLayout(label='Surface Shader AOVs', collapse=False) pm.cmds.columnLayout(adjustableColumn=True) pm.cmds.rowLayout(nc=2) pm.cmds.text(label='') pm.cmds.button(label='AOV Browser', c=lambda *args: aoveditor.arnoldAOVBrowser(listAOVGroups=True, nodeTypes=self.networkNodeTypes)) pm.setParent('..') # rowLayout pm.cmds.frameLayout(labelVisible=False, collapsable=False) self.networkCol = pm.cmds.columnLayout(adjustableColumn=True) self.buildNetworkAOVs(nodeAttr, aovList) pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.cmds.frameLayout(label='Other AOVs', collapse=False) pm.cmds.columnLayout(adjustableColumn=True) pm.cmds.rowLayout(nc=2) pm.cmds.text(label='') pm.cmds.button(label='Add Custom', c=lambda *args: shaderTemplate.newAOVPrompt()) pm.setParent('..') # rowLayout pm.cmds.frameLayout(labelVisible=False, collapsable=False) self.otherCol = pm.cmds.columnLayout(adjustableColumn=True) self.buildOtherAOVs(nodeAttr, aovList) pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setParent('..') # columnLayout pm.setParent('..') # frameLayout pm.setUITemplate('attributeEditorTemplate', popTemplate=True)
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 createArnoldAOVTab(): parentForm = cmds.setParent(query=True) aovNode = aovs.AOVInterface() pm.columnLayout('enableAOVs', adjustableColumn=True) pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) pm.attrControlGrp(attribute=aovNode.node.aovMode, label='Mode') # the tab gets recreated from scratch each time rather than updated and each # time the AOVOptionMenuGrp adds itself to the AOVChanged callback list. # we must remove it or we'll leave behind invalid copies global _aovDisplayCtrl if _aovDisplayCtrl is not None: aovs.removeAOVChangedCallback(_aovDisplayCtrl.update) _aovDisplayCtrl = shaderTemplate.AOVOptionMenuGrp('aiOptions', 'displayAOV', label='Render View AOV', allowCreation=False, includeBeauty=True, allowEmpty=False, allowDisable=False) _aovDisplayCtrl._setToChildMode() _aovDisplayCtrl._doSetup(aovNode.node.name() + '.displayAOV') pm.setParent(parentForm) cmds.scrollLayout('arnoldAOVsScrollLayout', horizontalScrollBarThickness=0) cmds.columnLayout('arnoldTabColumn', adjustableColumn=True) ed = ArnoldAOVEditor(aovNode) cmds.formLayout(parentForm, edit=True, af=[('enableAOVs', "top", 5), ('enableAOVs', "left", 0), ('enableAOVs', "right", 0), ('arnoldAOVsScrollLayout', "bottom", 0), ('arnoldAOVsScrollLayout', "left", 0), ('arnoldAOVsScrollLayout', "right", 0)], an=[('enableAOVs', "bottom")], ac=[('arnoldAOVsScrollLayout', "top", 5, 'enableAOVs')]) pm.setUITemplate('attributeEditorTemplate', popTemplate=True) cmds.setParent(parentForm) pm.evalDeferred(ed.fixOptionMenus) ed.setEnabledState() pm.scriptJob(attributeChange=(aovNode.node.aovMode, ed.setEnabledState), parent=ed.mainCol)
def update(self): pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) try: for attr, updateFunc, parent in self._controls: pm.setParent(parent) updateFunc(self.nodeAttr(attr)) except: # print some useful info print("[mtoa] Template %r failed to update attribute '%s'" % (self.template, attr)) # re-raise the last exception raise finally: pm.setUITemplate(popTemplate=True)
def componentsListRebuild(self, node): if node.passType.get() == 2: self.componentsButton = pm.button(label="Add Component", c=pm.Callback(self.showComponentList, node), parent=self.uiParent) componentString = node.components.get() if componentString is None or len(componentString) == 0: return pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) with pm.frameLayout(labelVisible=False, collapsable=False, w=240, parent=self.uiParent) as self.componentsListUI: with pm.rowColumnLayout(nc=2, cw=((1,200), (2, 30))): for c in componentString.split(","): pm.text(label=c, align="right") pm.symbolButton(image="smallTrash.png", c=pm.Callback(self.removeComponent, node, c)) pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
def __init__(self): #pm.scriptJob(event = ["SelectionChanged", pm.Callback(self.updateObjectSelection)], parent=self) self.title = "MantraAttributeManager" pm.setUITemplate("DefaultTemplate", pushTemplate=True) self.height = 500 #with pm.paneLayout( configuration='vertical2') as pane: with pm.frameLayout(collapsable = False, labelVisible = False) as frame: self.objectTree = pm.treeView(abr=False, height = 150) self.fillObjectTree() pm.button(label = "Assign Selected Attributes", c = pm.Callback(self.setAttributes, "assignSelected")) pm.button(label = "Remove Selected Attributes", c = pm.Callback(self.setAttributes, "removeSelected")) pm.button(label = "Remove All Attributes from Scene", c = pm.Callback(self.setAttributes, "removeAllAttr")) self.show()
def createArnoldAOVTab(): parentForm = cmds.setParent(query=True) aovNode = aovs.AOVInterface() pm.columnLayout('enableAOVs', adjustableColumn=True) pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) pm.attrControlGrp(attribute=aovNode.node.aovMode, label='Mode') # the tab gets recreated from scratch each time rather than updated and each # time the AOVOptionMenuGrp adds itself to the AOVChanged callback list. # we must remove it or we'll leave behind invalid copies global _aovDisplayCtrl if _aovDisplayCtrl is not None: aovs.removeAOVChangedCallback(_aovDisplayCtrl.update) _aovDisplayCtrl = shaderTemplate.AOVOptionMenuGrp('aiOptions', 'displayAOV', label='Render View AOV', allowCreation=False, includeBeauty=True, allowEmpty=False, allowDisable=False) _aovDisplayCtrl._setToChildMode() _aovDisplayCtrl._doSetup(aovNode.node.name() + '.displayAOV') pm.setParent(parentForm) cmds.scrollLayout('arnoldAOVsScrollLayout', horizontalScrollBarThickness=0) cmds.columnLayout('arnoldTabColumn', adjustableColumn=True) ed = ArnoldAOVEditor(aovNode) cmds.formLayout(parentForm, edit=True, af=[('enableAOVs',"top", 5), ('enableAOVs', "left", 0), ('enableAOVs', "right", 0), ('arnoldAOVsScrollLayout', "bottom", 0), ('arnoldAOVsScrollLayout', "left", 0), ('arnoldAOVsScrollLayout', "right", 0)], an=[('enableAOVs', "bottom")], ac=[('arnoldAOVsScrollLayout', "top", 5, 'enableAOVs')]) pm.setUITemplate('attributeEditorTemplate', popTemplate=True) cmds.setParent(parentForm) pm.evalDeferred(ed.fixOptionMenus) ed.setEnabledState() pm.scriptJob(attributeChange = (aovNode.node.aovMode, ed.setEnabledState), parent=ed.mainCol)
def createAttributesButtons(self, attr): # print "ObjectSetTemplate Create Buttons %r for %r" % (self.nodeName, attr) # print "ObjectSetTemplate Created Buttons %r for %r" % (self.nodeName, attr) pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) pm.rowLayout(numberOfColumns=3, columnWidth3=(140, 80, 80), columnAttach3=("both", "both", "both"), columnAlign3=("center", "center", "center"), columnOffset3=(2, 2, 2)) pm.text(label="") pm.button('attr_add_button', label="Add", c=lambda *args: AttributeListWindow(self, mode='add')) pm.button('attr_remove_button', label="Remove", c=lambda *args: AttributeListWindow(self, mode='remove')) # pm.button('attr_remove_button', label="Remove", c=Callback(self.removeAttrWin)) pm.setUITemplate('attributeEditorTemplate', popTemplate=True)
def run(self): pm.setParent(pm.mel.eval('getOptionBox()')) pm.setUITemplate('DefaultTemplate', pushTemplate=True) pm.waitCursor(state=1) pm.tabLayout(tabsVisible=False, scrollable=True) self.options_box_setup() self.option_box_load() pm.waitCursor(state=0) pm.setUITemplate(popTemplate=True) # We need to set both apply and apply and close explicitly. Maya breaks apply and close # if apply is set to a Python function. def apply(unused): self.option_box_save() self.option_box_apply() def apply_and_close(unused): self.option_box_save() self.option_box_apply() pm.mel.eval('hideOptionBox()') pm.button(pm.mel.eval('getOptionBoxApplyBtn()'), edit=True, command=apply) pm.button(pm.mel.eval('getOptionBoxApplyAndCloseBtn()'), edit=True, command=apply_and_close) # XXX: Is there a way for us to add a help link? pm.mel.eval('setOptionBoxCommandName("%s")' % self.title) # pm.mel.eval('setOptionBoxHelpTag "%s"' % self.title) pm.mel.eval('setOptionBoxTitle("%s");' % self.title) pm.mel.eval('showOptionBox()') # These need to be set directly to the menu item after showing the option box to # work around a Maya bug that breaks these when they're connected to Python functions. pm.menuItem(pm.mel.globals['gOptionBoxEditMenuSaveItem'], edit=True, command=lambda unused: self.option_box_save()) pm.menuItem(pm.mel.globals['gOptionBoxEditMenuResetItem'], edit=True, command=lambda unused: self.option_box_reset())
def initialize_nodzgraph_button(self, attr): """ adds our custom widgets """ pmc.setUITemplate('attributeEditorTemplate', pushTemplate=True) pmc.cmds.columnLayout(adj=True) maya_button = pmc.button("nodegraph_eval", label=self.nodegraph_button_title) ptr = omui.MQtUtil.findControl(maya_button) button = Qt.QtCompat.wrapInstance(long(ptr), Qt.QtWidgets.QPushButton) button.setIcon(Qt.QtGui.QPixmap(COCONODZ_ICON)) button.clicked.connect(self.open_nodzgraph) pmc.setUITemplate('attributeEditorTemplate', popTemplate=True)
def __init__(self): #pm.scriptJob(event = ["SelectionChanged", pm.Callback(self.updateObjectSelection)], parent=self) self.title = "MantraAttributeManager" pm.setUITemplate("DefaultTemplate", pushTemplate=True) self.height = 500 #with pm.paneLayout( configuration='vertical2') as pane: with pm.frameLayout(collapsable=False, labelVisible=False) as frame: self.objectTree = pm.treeView(abr=False, height=150) self.fillObjectTree() pm.button(label="Assign Selected Attributes", c=pm.Callback(self.setAttributes, "assignSelected")) pm.button(label="Remove Selected Attributes", c=pm.Callback(self.setAttributes, "removeSelected")) pm.button(label="Remove All Attributes from Scene", c=pm.Callback(self.setAttributes, "removeAllAttr")) self.show()
def CoronaEnvironmentCreateTab(self): log.debug("CoronaEnvironmentCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "EnvScrollLayout" if self.rendererTabUiDict.has_key('environment'): self.rendererTabUiDict.pop('environment') uiDict = {} self.rendererTabUiDict['environment'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName = 'bgType', uiType = 'enum', displayName = 'Background', default='0', data='Color/Image:PhysicalSky', uiDict=uiDict, callback=self.CoronaEnvironmentUpdateTab) envLightingFrame = None physSkyFrame = None physSkyPreetham = None physSkyRawafake = None self.addRenderGlobalsUIElement(attName='useSunLightConnection', uiType='bool', displayName='Use Sun', uiDict=uiDict, callback=self.editSun) self.addRenderGlobalsUIElement(attName = 'sunSizeMulti', uiType = 'float', displayName = 'Sun Size Multiplier', default='1.0', uiDict=uiDict) with pm.frameLayout(label="Color/Image", collapsable=False) as envLightingFrame: with pm.columnLayout(self.rendererName + 'ColumnLayout', adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName='bgColor', uiType='color', displayName='Background Color', default='0.4:0.4:1.0', uiDict=uiDict) with pm.frameLayout(label="Physical Sky", collapsable=True, collapse=False) as physSkyFrame: with pm.columnLayout(self.rendererName + 'ColumnLayout', adjustableColumn=True, width=400): self.addRenderGlobalsUIElement(attName = 'pSkyModel', uiType = 'enum', displayName = 'Sky Model', default='0', data='Preetham:Rawafake:Hosek', uiDict=uiDict, callback=self.CoronaEnvironmentUpdateTab) self.addRenderGlobalsUIElement(attName = 'pSkyMultiplier', uiType = 'float', displayName = 'Sky Multiplier', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkyHorizBlur', uiType = 'float', displayName = 'Sky Horizon Blur', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkyGroundColor', uiType = 'color', displayName = 'Ground Color', default='0.25:0.25:0.25', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkyAffectGround', uiType = 'bool', displayName = 'Sky Affect Ground', default='true', uiDict=uiDict) with pm.columnLayout(self.rendererName + 'ColumnLayoutphysSkyPreetham', adjustableColumn=True, width=400) as physSkyPreetham: self.addRenderGlobalsUIElement(attName = 'pSkyPreethamTurb', uiType = 'float', displayName = 'Turbidity', default='2.5', uiDict=uiDict) with pm.columnLayout(self.rendererName + 'ColumnLayoutphysSkyRawafake', adjustableColumn=True, width=400) as physSkyRawafake: self.addRenderGlobalsUIElement(attName = 'pSkySunFalloff', uiType = 'float', displayName = 'Sun Falloff', default='3.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkyZenith', uiType = 'color', displayName = 'Zenith Color', default='0.1:0.1:0.5', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkyHorizon', uiType = 'color', displayName = 'Horizon Color', default='0.25:0.5:0.5', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkySunGlow', uiType = 'float', displayName = 'Sun Glow', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkySunSideGlow', uiType = 'float', displayName = 'Sun Side Glow', default='0.2', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'pSkySunBleed', uiType = 'float', displayName = 'Sun Bleed', default='1.0', uiDict=uiDict) uiDict['envLightingFrame'] = envLightingFrame uiDict['physSkyFrame'] = physSkyFrame uiDict['physSkyPreetham'] = physSkyPreetham uiDict['physSkyRawafake'] = physSkyRawafake pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ]) self.CoronaEnvironmentUpdateTab()
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 addOneTabToGlobalsWindow(self, renderer, tabLabel, createProc): # no windows no need to call if not pm.window('unifiedRenderGlobalsWindow', exists=True): return displayAllTabs = pm.mel.isDisplayingAllRendererTabs() if not displayAllTabs and pm.SCENE.defaultRenderGlobals.currentRenderer.get() != renderer: return # Set the correct tabLayout parent. if displayAllTabs: tabLayoutName = pm.mel.getRendererTabLayout(pm.melGlobals['gMasterLayerRendererName']) else: tabLayoutName = pm.mel.getRendererTabLayout(renderer) # Hide the tabForm while updating. tabFormManagedStatus = pm.formLayout('tabForm', q=True, manage=True) pm.formLayout('tabForm', edit=True, manage=False) pm.setParent('tabForm') if displayAllTabs: tabLayoutName = pm.mel.getRendererTabLayout(pm.melGlobals['gMasterLayerRendererName']) else: tabLayoutName = pm.mel.getRendererTabLayout(renderer) pm.setParent(tabLayoutName) tabName = pm.mel.rendererTabName(renderer, tabLabel) commonTabNames = { 'Common' : "m_unifiedRenderGlobalsWindow.kCommon", 'Passes' : "m_unifiedRenderGlobalsWindow.kPassesTab", 'Maya Software' : "m_unifiedRenderGlobalsWindow.kMayaSoftware", 'Maya Hardware' : "m_unifiedRenderGlobalsWindow.kMayaHardware", 'Maya Vector' : "m_unifiedRenderGlobalsWindow.kMayaVector", 'Features' : "m_unifiedRenderGlobalsWindow.kFeatures", 'Quality' : "m_unifiedRenderGlobalsWindow.kQuality", 'Indirect Lighting' : "m_unifiedRenderGlobalsWindow.kIndirectLighting", 'Options' : "m_unifiedRenderGlobalsWindow.kOptions" } if commonTabNames.has_key(tabLabel): tabLabel = pm.mel.uiRes(commonTabNames[tabLabel]) if not pm.layout(tabName, exists=True): pm.setUITemplate('renderGlobalsTemplate', pushTemplate=True) pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) pm.formLayout(tabName) createProcs = ['createMayaSoftwareCommonGlobalsTab', 'createMayaSoftwareGlobalsTab'] try: createProcs.extend(pm.renderer(renderer, q=True, globalsTabCreateProcNames=True)) except: pass if createProc in createProcs: pm.mel.eval(createProc) pm.setParent('..') pm.setUITemplate(popTemplate=True) pm.setUITemplate(popTemplate=True) pm.tabLayout(tabLayoutName, edit=True, tabLabel=(tabName, tabLabel)) pm.formLayout('tabForm', edit=True, manage=tabFormManagedStatus)
def KrayQualityCreateTab(self): log.debug("KrayFinalGatheringCreateTab()") self.createGlobalsNode() qDict = {} self.rendererTabUiDict['quality'] = qDict 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="Quality", collapsable=True, collapse=False): with pm.columnLayout(self.rendererName + "ColumnLayoutA", adjustableColumn=True, width=400): attr = pm.Attribute(self.renderGlobalsNodeName + ".qLuminosityModel") ui = pm.attrEnumOptionMenuGrp(label="Luminosity Model", at=self.renderGlobalsNodeName + ".qLuminosityModel", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".qAreaLights") ui = pm.attrEnumOptionMenuGrp(label="Area Lights Computation", at=self.renderGlobalsNodeName + ".qAreaLights", ei=self.getEnumList(attr)) attr = pm.Attribute(self.renderGlobalsNodeName + ".qAreaLightVisibility") ui = pm.attrEnumOptionMenuGrp(label="Area Light Visibility", at=self.renderGlobalsNodeName + ".qAreaLightVisibility", ei=self.getEnumList(attr)) pm.separator() attr = pm.Attribute(self.renderGlobalsNodeName + ".qOctreeDetail") ui = pm.attrEnumOptionMenuGrp(label="Octree Detail", at=self.renderGlobalsNodeName + ".qOctreeDetail", ei=self.getEnumList(attr)) # float qLevel; // float # bool qDoubleSided; // bool # bool qSpotlightsToArea; // bool # float qAreaLightsThreshold; // float # int qAMinRecursion; // int # int qAMaxRecursion; // int # float qLinearLightsThreshold; // float # int qLMinRecursion; // int # int qLMaxRecursion; // int # float qLuminosityThreshold; // float # int qLumMinRays; // int # int qLumMaxRays; // int # float qBlurringThreshold; // float # int qBLumMinRays; // int # int qBLumMaxRays; // int # float qBAccuracyLimit; // float # bool qTraceDirectLightReflections; // bool # pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[ (scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0) ])
def show(self): self.layout = pm.mel.getOptionBox() pm.setParent( self.layout ) pm.setUITemplate( 'DefaultTemplate', pushTemplate=True ) self.parentCol = pm.columnLayout( adjustableColumn=1 ) self._buildWidgets( parent=self.parentCol ) self._updateWidgets() pm.setUITemplate( popTemplate=True ) pm.mel.setOptionBoxTitle( self._title ) pm.mel.setOptionBoxHelpTag( self._help_tag ) pm.mel.showOptionBox() self._updateButtons()
def MantraTranslatorCreateTab(self): log.debug("MantraTranslatorCreateTab()") 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): mantraAttributes.mantraTranslatorATList.createUi( self.renderGlobalsNodeName) pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.formLayout(parentForm, edit=True, attachForm=[(scLo, "top", 0), (scLo, "bottom", 0), (scLo, "left", 0), (scLo, "right", 0)])
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 buildUI(self): pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) self.passesParent = pm.setParent(query=True) frameLayout = None with pm.frameLayout(label="Passes", collapsable=False, parent=self.parent) as frameLayout: with pm.columnLayout(adj=True): with pm.rowLayout(adj=True, nc=2, cw=((1,200), (2, 200)), h=350): with pm.frameLayout(label="Existing Passes", collapsable=False, h=350): self.availableAOVsListUI = pm.textScrollList(doubleClickCommand=self.AOVdoubleClicked) pm.textScrollList(self.availableAOVsListUI, edit=True, append=self.getAOVs()) with pm.frameLayout(label="Active Passes", collapsable=False, h=350): self.activeAOVsListUI = pm.textScrollList( selectCommand=self.exsistingAOVclicked, doubleClickCommand=self.exsistingAOVdoubleClicked) self.updateExistingAOVList() pm.setUITemplate("attributeEditorTemplate", popTemplate=True) pm.scriptJob(event=("NameChanged", self.nameChangedCallback), parent=frameLayout)
def AppleseedAOVsCreateTab(self): log.debug("AppleseedAOVsCreateTab()") aovDict = {} self.rendererTabUiDict['aovs'] = aovDict pm.setUITemplate("attributeEditorTemplate", pushTemplate = True) with pm.window() as win: scLo = "AOScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness = 0): with pm.columnLayout("ColumnLayout", adjustableColumn = True, width = 400): with pm.frameLayout(label="AOVs", collapsable = True, collapse=False): with pm.columnLayout(): with pm.paneLayout(configuration="vertical2", paneSize=(1, 25, 100)): aovDict['aovSourceField'] = pm.textScrollList("AOVSource", ams=True, append=self.aovShaders, selectCommand = pm.Callback(self.AppleseedAOVSelectCommand,"source")) aovList = self.AppleseedGetAOVConnections() aovDict['aovDestField'] = pm.textScrollList("AOVDest", append=aovList, ams=True, dcc=self.AppleseedDoubleClickCommand, selectCommand = pm.Callback(self.AppleseedAOVSelectCommand,"dest")) aovDict['aovButton'] = pm.button(label="Selection", enable=False, c=self.AppleseedAOVButtonCommand) win.show() pm.setUITemplate("attributeEditorTemplate", popTemplate = True)
def AEzFileSwitchPathNew(fileAttribute): pm.setUITemplate('attributeEditorTemplate', pst=True) pm.columnLayout(adj=True) pm.rowLayout(nc=3) if fileAttribute.split('.')[-1] == 'highResolution': label = 'High-resolution' else: label = 'Low-resolution' pm.text('filenameName', label=label) pm.textField('filenameField', fileName='') pm.symbolButton('browseFileSwitch', image='navButtonBrowse.png') pm.setParent('..') pm.setParent('..') pm.setUITemplate(ppt=True) AEzFileSwitchPathReplace(fileAttribute)
def AppleseedAOVsCreateTab(self): aovDict = {} self.rendererTabUiDict['aovs'] = aovDict self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "AOScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout("ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="AOVs", collapsable=True, collapse=False): with pm.columnLayout(): with pm.paneLayout(configuration="vertical2", paneSize=(1, 25, 100)): aovDict['aovSourceField'] = pm.textScrollList("AOVSource", ams=True, append=self.aovShaders, selectCommand=pm.Callback(self.AppleseedAOVSelectCommand, "source")) aovList = self.AppleseedGetAOVConnections() aovDict['aovDestField'] = pm.textScrollList("AOVDest", append=aovList, ams=True, dcc=self.AppleseedDoubleClickCommand, selectCommand=pm.Callback(self.AppleseedAOVSelectCommand, "dest")) aovDict['aovButton'] = pm.button(label="Selection", enable=False, c=self.AppleseedAOVButtonCommand) 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): 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 AppleseedAOVsCreateTab(self): log.debug("AppleseedAOVsCreateTab()") aovDict = {} self.rendererTabUiDict['aovs'] = aovDict pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) with pm.window() as win: scLo = "AOScrollLayout" with pm.scrollLayout(scLo, horizontalScrollBarThickness=0): with pm.columnLayout("ColumnLayout", adjustableColumn=True, width=400): with pm.frameLayout(label="AOVs", collapsable=True, collapse=False): with pm.columnLayout(): with pm.paneLayout(configuration="vertical2", paneSize=(1, 25, 100)): aovDict['aovSourceField'] = pm.textScrollList( "AOVSource", ams=True, append=self.aovShaders, selectCommand=pm.Callback( self.AppleseedAOVSelectCommand, "source")) aovList = self.AppleseedGetAOVConnections() aovDict['aovDestField'] = pm.textScrollList( "AOVDest", append=aovList, ams=True, dcc=self.AppleseedDoubleClickCommand, selectCommand=pm.Callback( self.AppleseedAOVSelectCommand, "dest")) aovDict['aovButton'] = pm.button( label="Selection", enable=False, c=self.AppleseedAOVButtonCommand) win.show() pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
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 IndigoTranslatorCreateTab(self): log.debug("IndigoTranslatorCreateTab()") 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="Indigo Scene File export", collapsable = True, collapse=False): ui = pm.checkBoxGrp(label="Export Indigo Scene file:", value1 = False) pm.connectControl(ui, self.renderGlobalsNodeName + ".exportSceneFile", index = 2 ) xmlDict = {} self.rendererTabUiDict['xml'] = xmlDict defaultXMLPath = pm.workspace.path + "/" + pm.sceneName().basename().split(".")[0] + ".igs" 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) 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 updateAOVFrame(self, nodeAttr): # TODO: move this into AttributeEditorTemplate self._setActiveNodeAttr(nodeAttr) nodeAttr = pm.Attribute(nodeAttr) self.updateNetworkData() for ctrl in self._msgCtrls: pm.deleteUI(ctrl) self._msgCtrls = [] pm.setUITemplate('attributeEditorTemplate', pushTemplate=True) aovList = aovs.getAOVs() self.updateCustomArrayData(nodeAttr, aovList) pm.setParent(self.networkCol) self.buildNetworkAOVs(nodeAttr, aovList) pm.setParent(self.otherCol) self.buildOtherAOVs(nodeAttr, aovList) pm.setUITemplate('attributeEditorTemplate', popTemplate=True)
def createMenu(self, nodeAttr): pm.setUITemplate(popTemplate=1) if self.allowDisable: kwargs = dict(nc=3, columnWidth3=[145, 20, 200], columnAttach3=['right', 'both', 'both']) else: kwargs = dict(nc=2, columnWidth2=[145, 220], columnAttach2=['right', 'both']) pm.rowLayout(**kwargs) pm.text(label=self.label) if self.allowDisable: pm.checkBox(label='') pm.optionMenu(self.menuName) pm.setParent('..') menu = self.updateMenu(nodeAttr) pm.scriptJob(parent=menu, attributeChange=(nodeAttr, lambda: self.updateMenu(nodeAttr)))
def MantraTranslatorTabCreate(): log.debug("MantraTabCreate from Attribute List") reload(mantraAttributes) if len(pm.ls(type = GLOBALSNAME)) == 0: mrg = pm.createNode(GLOBALSNAME, name = GLOBALSNAME) else: mrg = pm.ls(type = GLOBALSNAME)[0] parentForm = pm.setParent(query = True) pm.setUITemplate( "attributeEditorTemplate", pushTemplate = True) pm.scrollLayout( "MantraTrScrollLayout", horizontalScrollBarThickness = 0) pm.columnLayout("MantraTrColumnLayout", adjustableColumn = True) #mantraAttributes.mantraGlobalsATList.createUi(mrg) pm.setUITemplate( "attributeEditorTemplate", popTemplate = True) pm.formLayout(parentForm, edit = True, attachForm = [ ("MantraTrScrollLayout", "top", 0), ("MantraTrScrollLayout", "bottom", 0), ("MantraTrScrollLayout", "left", 0), ("MantraTrScrollLayout", "right", 0) ])
def componentsListRebuild(self, node): if node.passType.get() == 2: self.componentsButton = pm.button(label="Add Component", c=pm.Callback( self.showComponentList, node), parent=self.uiParent) componentString = node.components.get() if componentString is None or len(componentString) == 0: return pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) with pm.frameLayout(labelVisible=False, collapsable=False, w=240, parent=self.uiParent) as self.componentsListUI: with pm.rowColumnLayout(nc=2, cw=((1, 200), (2, 30))): for c in componentString.split(","): pm.text(label=c, align="right") pm.symbolButton(image="smallTrash.png", c=pm.Callback(self.removeComponent, node, c)) pm.setUITemplate("attributeEditorTemplate", popTemplate=True)
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 IndigoEnvironmentCreateTab(self): log.debug("IndigoEnvironmentCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query = True) pm.setUITemplate("attributeEditorTemplate", pushTemplate = True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('environment'): self.rendererTabUiDict.pop('environment') uiDict = {} self.rendererTabUiDict['environment'] = uiDict with pm.scrollLayout(scLo, horizontalScrollBarThickness = 0): with pm.columnLayout(self.rendererName + "ColumnLayout", adjustableColumn = True, width = 400): with pm.frameLayout(label='Environment', collapsable = True, collapse=False): with pm.columnLayout(self.rendererName + 'ColumnLayout', adjustableColumn = True, width = 400): self.addRenderGlobalsUIElement(attName = 'environmentType', uiType = 'enum', displayName = 'Environment Type', default='0', data='Color/Map:Sun', uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName = 'environmentColor', uiType = 'color', displayName = 'Environment Color', default='0.4:0.4:1.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'environmentMapMultiplier', uiType = 'float', displayName = 'Emission Multiplier', default='10', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'environmentMapType', uiType = 'enum', displayName = 'Environment Map Type', default='0', data='Spherical:Lat-Long', uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName = 'sky_model', uiType = 'enum', displayName = 'Sky Model', default='0', data='original:captured-simulation', uiDict=uiDict) buttonLabel = "Create Sun" suns = pm.ls("IndigoSun") if len(suns) > 0: buttonLabel = "Delete Sun" uiDict['sunButton'] = pm.button(label = buttonLabel, command = self.editSun) self.addRenderGlobalsUIElement(attName = 'turbidity', uiType = 'float', displayName = 'Sky Turbidity', default='2.0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'extra_atmospheric', uiType = 'bool', displayName = 'Extra Atmospheric', default='false', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'sun_layer', uiType = 'int', displayName = 'Sun Layer', default='0', uiDict=uiDict) self.addRenderGlobalsUIElement(attName = 'sky_layer', uiType = 'int', displayName = 'Sky Layer', default='0', uiDict=uiDict) 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")]) self.updateEnvironment()
def toBakeLayout(self, plug) : """ Layout for the geometryToBake connections. """ self.currentNode = pm.PyNode(plug.split(".")[0]) # store the node linked to the AE pm.setUITemplate ("attributeEditorTemplate", pst=True) vLayout = pm.verticalLayout(ratios=[4, 1]) # geometry textScrollList self.geometryToBakeTSL = pm.uitypes.TextScrollList(parent=vLayout) self.geometryToBakeTSL.setAllowMultiSelection(True) # button hLayout = pm.horizontalLayout(spacing=2) pm.uitypes.Button(parent=hLayout, l="Add", command=pm.Callback(self.bakeAddButtonCommand)) pm.uitypes.Button(parent=hLayout, l="Remove", command=pm.Callback(self.bakeRemoveButtonCommand)) pm.uitypes.Button(parent=hLayout, l="Refresh", command=pm.Callback(self.bakeRefreshButtonCommand)) hLayout.redistribute() vLayout.redistribute() pm.setUITemplate(ppt=True) self.bakeRefreshButtonCommand()
def create_additional_channel_export(self, param_name): grp = "OpenVDBAdditionalChannel" pm.setUITemplate("attributeEditorPresetsTemplate", pushTemplate=True) pm.textFieldGrp(grp, label="Channel Export") self.update_additional_channel_export(param_name) pm.setUITemplate(popTemplate=True)
def create_velocity_grid_export(self, param_name): grp = "OpenVDBVelocityGrids" pm.setUITemplate("attributeEditorPresetsTemplate", pushTemplate=True) pm.textFieldGrp(grp, label="Velocity Grids") self.update_velocity_grid_export(param_name) pm.setUITemplate(popTemplate=True)
def FujiRendererCreateTab(self): log.debug("FujiRendererCreateTab()") self.createGlobalsNode() parentForm = pm.setParent(query=True) pm.setUITemplate("attributeEditorTemplate", pushTemplate=True) scLo = self.rendererName + "ScrollLayout" if self.rendererTabUiDict.has_key('common'): self.rendererTabUiDict.pop('common') parentForm = pm.setParent(query=True) 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="Sampling", collapsable=True, collapse=False): self.addRenderGlobalsUIElement(attName='sampleJitter', uiType='float', displayName='SampleJitter', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='sample_time_range_min', uiType='float', displayName='Sample Time Range Min', default='0.0', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='sample_time_range_max', uiType='float', displayName='Sample Time Range Max', default='1.0', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='samplesX', uiType='int', displayName='Pixel Samples x', default=3, uiDict=uiDict) self.addRenderGlobalsUIElement( attName='samplesY', uiType='int', displayName='Pixel Samples y', default=3, uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName='cast_shadow', uiType='bool', displayName='Cast Shadows', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='max_reflect_depth', uiType='int', displayName='Max Reflection Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='max_refract_depth', uiType='int', displayName='Max Refraction Depth', default='3', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_step', uiType='float', displayName='Raymarching Stepsize', default='0.05', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_shadow_step', uiType='float', displayName='Raymarching Shadow Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_reflect_ste', uiType='float', displayName='Raymarching Reflection Stepsize', default='0.1', uiDict=uiDict) self.addRenderGlobalsUIElement( attName='raymarch_refract_ste', uiType='float', displayName='Raymarching Refraction Stepsize', default='0.1', uiDict=uiDict) pm.separator() self.addRenderGlobalsUIElement(attName='doMotionBlur', uiType='bool', displayName='Motionblur:', 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): attr = pm.Attribute(self.renderGlobalsNodeName + ".imageFormat") ui = pm.attrEnumOptionMenuGrp( label="Image Format", at=self.renderGlobalsNodeName + ".imageFormat", ei=self.getEnumList(attr)) with pm.frameLayout(label="Filtering", collapsable=True, collapse=False): attr = pm.Attribute(self.renderGlobalsNodeName + ".filtertype") ui = pm.attrEnumOptionMenuGrp( label="Filter Type", at=self.renderGlobalsNodeName + ".filtertype", ei=self.getEnumList(attr)) ui = pm.intFieldGrp(label="Filter Size:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".filtersize", index=2) with pm.frameLayout(label="Renderer", collapsable=True, collapse=False): self.addRenderGlobalsUIElement( attName='use_max_thread', uiType='bool', displayName='Use Max Threads', default='true', uiDict=uiDict) self.addRenderGlobalsUIElement(attName='threads', uiType='int', displayName='Threads', default=8, uiDict=uiDict) self.addRenderGlobalsUIElement(attName='tilesize', uiType='int', displayName='Tile Size', default=64, uiDict=uiDict) ui = pm.intFieldGrp(label="Verbosity:", numberOfFields=1) pm.connectControl(ui, self.renderGlobalsNodeName + ".rendererVerbosity", 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.FujiRendererUpdateTab()
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)