def process(self, context):
        if "origin" not in context:
            context.create_instance("origin", family="metadata")

        instance = context["origin"]

        fpath = cmds.file(query=True, expandName=True)
        ProjectEnv.select_project_from_path(fpath)
        os.environ['PROJECT'] = os.environ["PYBLISH_CURRENT_PROJECT_ROOT"]
Exemplo n.º 2
0
def set_envvar_from_conf(conf):
    if validate_conf(conf):
        from pyblish_magenta.project import ProjectEnv
        ProjectEnv.set_projects(conf['project'])
        os.environ['TASK'] = conf['work']['task']
        os.environ['TOPICS'] = conf['work']['task']

        print('setting pyblish current project {0} on "{1}"'.format(
            os.environ['PYBLISH_CURRENT_PROJECT_NAME'],
            os.environ['PYBLISH_CURRENT_PROJECT_ROOT']))
Exemplo n.º 3
0
    def process(self, context):
        from maya import cmds

        schema = pyblish_magenta.schema.load()
        tester = schema.get_template("test_asset")
        fpath = cmds.file(query=True, expandName=True)
        fpath.replace("\\", "/")
        holders = tester.parse(fpath)
        model_name = holders['asset'].split('.')[0]

        if "modeling" not in os.environ["TASK"].split(','):
            return self.log.info("No model found")

        if 'genre' not in holders:
            self.log.info("No genre found")
        elif "model" not in holders['genre']:
            self.log.info("Asset's genre not modeling")

        name = model_name  # holders['container']
        os.environ['ITEM'] =  holders['container']

        # Get the root transform
        self.log.info("Model found: %s" % name)
        pattern = ProjectEnv.get_config(self.config_key)['root_node_name_pattern']
        assembly = pattern.format(name=name)

        assert cmds.objExists(assembly), (
            "Model did not have an appropriate assembly: %s" % assembly)

        self.log.info("Capturing instance contents: %s" % assembly)
        with pyblish_maya.maintained_selection():
            cmds.select(assembly)
            nodes = cmds.file(exportSelected=True,
                              preview=True,
                              constructionHistory=False,
                              force=True,
                              shader=False,
                              channels=False,
                              expressions=False,
                              constraints=False)
            nodes = cmds.ls(nodes, long=True)

        self.log.info("Reducing nodes to shapes only")
        shapes = cmds.ls(nodes,
                         noIntermediate=True,
                         exactType="mesh",
                         long=True,
                         dag=True)

        assert shapes, "Model did not have any shapes"

        instance = context.create_instance(name=name, family="model")
        instance[:] = nodes

        self.log.info("Successfully collected %s" % name)
    def _is_valid(self, shape):
        """ Return whether the shape's name is similar to Maya's default. """
        transform = cmds.listRelatives(shape, parent=True, fullPath=True)[0]

        transform_name = short_name(transform)
        shape_name = short_name(shape)

        # A Shape's name can be either {transform}{numSuffix}
        # Shape or {transform}Shape{numSuffix}
        # Upon renaming nodes in Maya that is
        # the pattern Maya will act towards.
        transform_no_num = transform_name.rstrip("0123456789")
        pattern = '^{transform}[0-9]*Shape[0-9]*$'.format(
            transform=transform_no_num)

        config = ProjectEnv.get_config(self.config_key)
        if config is not None and "pattern" in config:
            pattern = config["pattern"]

        if re.match(pattern, shape_name):
            return True
        else:
            return False