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 layerCreate(self, attribute): print "layerCreate attr", attribute pmAttr = pm.Attribute(attribute) self.thisNode = pmAttr.node() parent = pm.setParent(query=True) with pm.columnLayout(adjustableColumn=True, parent=parent): pm.button(label="Create New Layer") with pm.columnLayout(adjustableColumn=True): for i in range(pmAttr.numElements()): with pm.frameLayout(collapsable=False, label="Layer {0}".format(i)): with pm.columnLayout(adjustableColumn=True): nameCtrl = pm.textFieldGrp(label="Name") pm.connectControl(nameCtrl, pmAttr[i].layerName, index=2) weightCtrl = pm.floatFieldGrp(label="Weight", value1=0.0) pm.connectControl(weightCtrl, pmAttr[i].layerWeight, index=2) texCtrl = pm.attrColorSliderGrp( at=pmAttr[i].layerTexture, label="Texture") shdCtrl = pm.attrColorSliderGrp( at=pmAttr[i].layerShader, label="Shader") with pm.columnLayout(adjustableColumn=True): with pm.rowLayout(nc=3): pm.button(label="Up") pm.button(label="Delete") pm.button(label="Down")
def updateList(self, name, lgt, totalLgt, *args): #create new buttons self.text = pm.text(name, label="Name: %s" %name) visibilityLgt = pm.getAttr(lgt+'.visibility') if visibilityLgt == True: self.button = pm.button(name, label="ON" ,command = lambda *args: self.turnOn(totalLgt, name)) else: self.button = pm.button(name, label="OFF" ,command = lambda *args: self.turnOn(totalLgt, name)) self.button = pm.button('btnNameS'+str(totalLgt), label="SOLO", command = lambda *args: self.turnSolo(totalLgt, name)) pm.attrColorSliderGrp(at='%s.color' % name ) pm.attrFieldSliderGrp( min=0.0, max=10.0, at='%s.intensity' % name )
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 customCreateRgb(self, attr): pname = attr.split('.')[-1] ptype = self.params[pname].ptype plabel = self.params[pname].label pann = self.params[pname].annotation presets = self.params[pname].presets controlName = pname + 'Ctrl' l = plabel if presets is not None: l += ' <span>≡</span>' # fix unicode problem in Windows using html pm.attrColorSliderGrp(controlName, attribute=attr, label=l, annotation=pann) if presets is not None: # pm.attrColorSliderGrp(controlName, edit=True) # pm.popupMenu() attrChildren = pm.layout(controlName, query=True, childArray=True) pm.popupMenu(button=1, parent=attrChildren[0]) for k in sorted(presets): pm.menuItem(label=k, command=pm.Callback(setPresetRgb, controlName, presets[k]))
def customCreateRgb(self, attr): pname = attr.split('.')[-1] ptype = self.params[pname].ptype plabel = self.params[pname].label pann = self.params[pname].annotation presets = self.params[pname].presets l = plabel if presets is not None: l = unicode(plabel) + u' \u1392' self.controls[pname] = pm.attrColorSliderGrp(pname + 'Ctrl', attribute=attr, label=l, annotation=pann) if presets is not None: pm.attrColorSliderGrp(self.controls[pname], edit=True) pm.popupMenu() for k in sorted(presets): pm.menuItem(label=k, command=pm.Callback(setPresetRgb, self.controls[pname], presets[k]))
def _deleteExisting(self): for key, value in self.controller.iteritems(): slider, name = value if slider == 'lcColorSlider' and pmc.attrColorSliderGrp(slider, ex=True): pmc.deleteUI(slider) elif slider == 'lcScaleSlider' and pmc.attrFieldGrp(slider, ex=True): pmc.deleteUI(slider) else: if pmc.attrFieldSliderGrp(slider, ex=True): pmc.deleteUI(slider)
def _updateSlider(self, sliderName, lightShape, attribute, state): # Checking for hidden attributes and skipping try: if pmc.Attribute('%s.%s' % (lightShape, attribute)).isHidden(): pmc.attrFieldSliderGrp(sliderName, edit=True, visible=False) return except pmc.MayaAttributeError: pass if sliderName == 'lcColorSlider': pmc.attrColorSliderGrp(sliderName, edit=True, visible=True, at='%s.%s' % (lightShape, attribute)) pmc.attrColorSliderGrp(sliderName, edit=True, cw4=[60, 70, 10, 10]) pmc.attrColorSliderGrp(sliderName, edit=True, en=state) return if sliderName == 'lcScaleSlider': pmc.attrFieldGrp(sliderName, edit=True, cw4=[60, 65, 65, 65], visible=True, at='%s.%s' % (lightShape, attribute)) pmc.attrFieldGrp(sliderName, edit=True, en=state) return pmc.attrFieldSliderGrp(sliderName, edit=True, cw=[1, 60]) pmc.attrFieldSliderGrp(sliderName, edit=True, cw=[2, 70]) try: pmc.attrFieldSliderGrp(sliderName, edit=True, visible=True, at='%s.%s' % (lightShape, attribute)) except RuntimeError: pmc.attrFieldSliderGrp(sliderName, edit=True, visible=False) pmc.attrFieldSliderGrp(sliderName, edit=True, en=state)
def customUpdateRgb(self, attr): pname = attr.split('.')[-1] ptype = self.params[pname].ptype controlName = pname + 'Ctrl' pm.attrColorSliderGrp(controlName, edit=True, attribute=attr)
def setPresetRgb(ctrl, value): attr = pm.attrColorSliderGrp(ctrl, query=True, attribute=True) pm.setAttr(attr + 'R', value[0]) pm.setAttr(attr + 'G', value[1]) pm.setAttr(attr + 'B', value[2])
def _addControls(self): self._deleteExisting() # Converting and Adding maya slider self.controlBoxLayout.addWidget(LightControl._addSeparator()) self.controlBoxLayout.addWidget( getQObject( pmc.attrColorSliderGrp('lcColorSlider', label='{:>10}'.format('Color:'), cw4=[55, 60, 60, 40], visible=False))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcTemperatureSlider', label='{:>10}'.format('Kelvin:'), pre=0, visible=False, min=-99999, max=99999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcIntensitySlider', label='{:>10}'.format('Intensity:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcExposureSlider', label='{:>10}'.format('Exposure:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcSpreadSlider', label='{:>10}'.format('Spread:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcRoundnessSlider', label='{:>10}'.format('Roundness:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcSoftEdgeSlider', label='{:>10}'.format('Soft Edge:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcConeAngleSlider', label='{:>10}'.format('Cone:'), pre=2, visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcPenumbraAngleSlider', label='{:>10}'.format('Penumbra:'), pre=2, visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcDropoffSlider', label='{:>10}'.format('Dropoff:'), pre=2, visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcSampleSlider', label='{:>10}'.format('Samples:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget(LightControl._addSeparator()) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcDiffuseSlider', label='{:>10}'.format('Diffuse:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lsSpecularSlider', label='{:>10}'.format('Specular:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcSssSlider', label='{:>10}'.format('SSS:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcIndirectSlider', label='{:>10}'.format('Indirect:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldSliderGrp('lcVolumeSlider', label='{:>10}'.format('Volume:'), visible=False, min=-9999, max=9999))) self.controlBoxLayout.addWidget(LightControl._addSeparator()) self.controlBoxLayout.addWidget( getQObject( pmc.attrFieldGrp('lcScaleSlider', label='{:>10}'.format('Scale:'), pre=3, visible=False))) self.controlBoxLayout.addWidget(LightControl._addSeparator()) self.controlBoxLayout.addItem( QtWidgets.QSpacerItem(0, 0, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding))
def customUpdateRgb(self, attr): pname = attr.split('.')[-1] ptype = self.params[pname].ptype pm.attrColorSliderGrp(self.controls[pname], edit=True, attribute=attr)