コード例 #1
0
 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')
コード例 #2
0
 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")
コード例 #3
0
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)
コード例 #4
0
    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
コード例 #5
0
 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')
コード例 #6
0
	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