Пример #1
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
Пример #2
0
def bind(description, meshes):
    """Bind description to meshes

    Args:
        description (str): XGen Legacy description name
        meshes (list): A list of meshes (transform node names) to bind with

    """
    palette = get_palette_by_description(description)
    with capsule.maintained_selection():
        cmds.select(meshes, replace=True)
        xg.modifyFaceBinding(palette,
                             description,
                             mode="Append",
                             placeGuidesWithUVBasedMethod=True,
                             rotateGuide=False)
Пример #3
0
    def createDescription(self,
                          description,
                          primitive='Spline',
                          generator='Random',
                          renderer='Renderman',
                          method='Guides'):
        """
        Create xgen description

        Parameters:
             description: Description name
             primitive: Primitive type
             generator: Generate type
             renderer: Renderer that render xgen primitives
             method: Method to control xgen primitives

        Returns:
            None
        """
        # Check user select a scalp mesh that right named
        sels = pm.selected()
        if not sels:
            pm.error('You must select a scalp mesh')
        scalp = sels[0].node()
        assert isinstance(scalp.getShape(),
                          pm.nodetypes.Mesh), 'Need to select a mesh'
        assert scalp.startswith(
            self.assetName), 'Scalp name must start with "{0}_"'.format(
                self.assetName)

        prefixedDescription = self.assetName + '_' + description + '_desc'
        xg.createDescription(self.collection, prefixedDescription, primitive,
                             generator, renderer, method)
        xg.modifyFaceBinding(self.collection, prefixedDescription)

        # Cleanup outliner
        pm.parent(scalp, self.scalpGrp)
        pm.parent(self.collection, self.hairFurGrp)