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"]
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']))
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