def renderableButtonToggledSlot(self, checked): if checked: self.renderableButton.setIcon(self.disRenderableIcon) xg.setAttr("percent", xge.prepForAttribute(str(0)), self.collection, self.description, "RendermanRenderer") else: self.renderableButton.setIcon(self.renderableIcon) xg.setAttr("percent", xge.prepForAttribute(str(100)), self.collection, self.description, "RendermanRenderer") self.de.refresh('Description')
def setDefaultSettings(self): xg.setAttr("inCameraOnly", xge.prepForAttribute(str(False)), self.collection, self.description, "GLRenderer") xg.setAttr("splineSegments", xge.prepForAttribute(str(1)), self.collection, self.description, "GLRenderer") xg.setAttr("renderer", xge.prepForAttribute('Arnold Renderer'), self.collection, self.description, "RendermanRenderer") xg.setAttr("custom__arnold_rendermode", xge.prepForAttribute(str(1)), self.collection, self.description, "RendermanRenderer") xg.setAttr("custom__arnold_minPixelWidth", xge.prepForAttribute(str(0.5)), self.collection, self.description, "RendermanRenderer")
def setupDescriptionFolder(paletteRoot, palette, newDesc=''): """ create the description folders """ descrs = None if len(newDesc): descrs = [newDesc] else: descrs = base.descriptions(palette) for desc in descrs: descDir = os.path.join(paletteRoot, desc) if not os.path.exists(descDir): os.mkdir(descDir)
def importDescription(self, palName, descName, version, binding=False): """ XGen description will imported without validator. When importing baked description, @binding set to False should be fine. """ xdscFileName = descName + '.xdsc' xdscFile = '/'.join( [self.paletteVerDir(palName, version), descName, xdscFileName]) if not os.path.isfile(xdscFile): pm.error('[XGen Hub] : .xdsc file is not exists. -> ' + xdscFile) return None self.clearPreview() # check if descriptions exists in current scene if descName in xg.descriptions(palName): # delete current description folder descDir = xg.expandFilepath('${DESC}', descName) if os.path.isdir(descDir): try: dir_util.remove_tree(descDir) except: pm.warning('[XGen Hub] : Dir may not remove. -> ' + descDir) # delete current description xg.deleteDescription(palName, descName) # IMPORT DESCRIPTION desc = base.importDescription(palName, xdscFile) # create imported descriptions folder dataPath = xg.getAttr('xgDataPath', palName) paletteRoot = xg.expandFilepath(dataPath, '') msxgApi.setupDescriptionFolder(paletteRoot, palName, desc) # wrap into maya nodes pm.mel.xgmWrapXGen(pal=palName, d=desc, gi=binding) # bind to selected geometry if binding: igdesc = xg.getAttr('groom', palName, desc) xg.modifyFaceBinding(palName, desc, 'Append', '', False, len(igdesc)) if igdesc: # set groom density and sampling method pm.setAttr(igdesc + '.density', 1) pm.setAttr(igdesc + '.interpStyle', 1) # import grooming as well self.importGrooming(palName, descName, version) # import guides as well self.importGuides(palName, descName, version) self.notifyMsg('Description Import Complete !', 0) return desc
def setDensity(self, val): xg.setAttr("density", xge.prepForAttribute(str(val)), self.collection, self.description, "RandomGenerator") pm.mel.eval('xgmPreview -progress {"%s"};' % self.description) self.de.refresh('Description')
def importPalette(self, palName, version, binding= False, anim= False, asDelta= False, delta= []): """ ** NOT SUPPORT NAMESPACE ** XGen palette will imported without validator. [!!!] When importing [BAKED] palette, @binding set to False should be fine. """ xgenFileName = palName + '.xgen' xgenFile = str('/'.join([self.paletteVerDir(palName, version), xgenFileName])) if not os.path.isfile(xgenFile): self.notifyMsg('.xgen file is not exists.', 2) pm.error('[XGen Hub] : .xgen file is not exists. -> ' + xgenFile) return None if asDelta and not pm.sceneName(): self.notifyMsg('Please save the scene.', 2) return None self.clearPreview() # check if palette exists in current scene if palName in xg.palettes(): # delete current palette folder palDir = xg.expandFilepath(xg.getAttr('xgDataPath', palName), '') if os.path.isdir(palDir): try: dir_util.remove_tree(palDir) except: pm.warning('[XGen Hub] : Dir may not remove. -> ' + palDir) # delete current palette # this action might cry about 'None type object has no attr "previewer"' # when there is no xgen ui panel xg.deletePalette(palName) # IMPORT PALETTE palName = base.importPalette(xgenFile, delta, '') # update the palette with the current project xg.setAttr('xgProjectPath', str(pm.workspace(q= 1, rd= 1)), palName) dataPath = xg.paletteRootVar() + '/' + palName xg.setAttr('xgDataPath', dataPath, palName) # create imported palette folder paletteRoot = xg.expandFilepath(dataPath, '', True, True) # create all imported descriptions folder msxgApi.setupDescriptionFolder(paletteRoot, palName) # wrap into maya nodes palName = str(pm.mel.xgmWrapXGen(pal= palName, wp= binding, wlg= binding, gi= binding)) # copy maps from source descNames = xg.descriptions(palName) msxgApi.setupImportedMap(xgenFile, palName, descNames, self.projPath) # bind grooming descriptions to geometry if binding: for desc in descNames: igdesc = xg.getAttr('groom', palName, desc) if igdesc: # get groom dag node igdesc = xg.igActivateDescription(desc) # bind groom to geo pm.mel.igBindFromXGen(desc) # set groom density and sampling method pm.setAttr(igdesc + '.density', 1) pm.setAttr(igdesc + '.interpStyle', 1) # set all groom visible on xg.igSetDescriptionVisibility(True) # sync primitives tab attritube map path with auto export path xg.igSyncMaps(desc) # import grooming as well self.importGrooming(palName) # import as anim, build hairSystem if anim: # build hairSystem self.linkHairSystem(palName) # check preset dir exists presetLocalDir = str(pm.internalVar(userPresetsDir= 1)) presetRepo = self.nDynPresetPath(palName, version) if os.path.exists(presetRepo): # copy preset for prs in os.listdir(presetRepo): dstPath = presetLocalDir + prs prs = '/'.join([presetRepo, prs]) shutil.copyfile(prs, dstPath) # load preset # [note] nucleus preset will not be loaded during current devlope presetMel = [] for nodeType in ['hairSystem', 'nRigid']: presetDict = self.ioAttrPreset(nodeType, False) presetMel.extend(presetDict.values()) # dump preset for prs in presetMel: if os.path.isfile(prs): os.remove(prs) else: pm.warning('[XGen Hub] : nDynamic attribute presets folder not found.') if asDelta: dataPath = xg.getAttr('xgDataPath', palName) dataPath = dataPath + ';' + self.paletteVerDir(palName, version, raw= True) xg.setAttr('xgDataPath', dataPath, palName) # save scenes pm.saveFile(f= 1) # set export delta pm.setAttr(palName + '.xgExportAsDelta', 1) pm.warning('[XGen Hub] : Collection Import Complete !') self.notifyMsg('Collection Import Complete !', 0) return palName