def create_pipe_ids(**kwargs): from studio_usd_pipe.api import studioMaya reload(studioMaya) inputs = { 'spipe': kwargs['pipe'], 'scaption': kwargs['caption'], 'ssubfield': kwargs['subfield'], 'stype': kwargs['type'], 'stag': kwargs['tag'], 'sdependency': kwargs['dependency'], 'sversion': kwargs['version'], 'smodified': kwargs['modified'], 'slocation': kwargs['location'], 'sdescription': kwargs['description'], 'suser': kwargs['user'] } id_data = resource.getPipeIDData() for k, v in inputs.items(): id_data[k]['value'] = v smaya = studioMaya.Maya() root = get_root() mobject = smaya.get_mobject(root) created_data = smaya.create_pipe_ids(mobject, id_data) result = [] for k, v in created_data.items(): result.append([k.encode(), v.encode()]) return True, result
def create_model(): ''' :example from studio_usd_pipe.core import asset mpack.asset() ''' from maya import OpenMaya from studio_usd_pipe.api import studioNurbscurve from studio_usd_pipe.api import studioShader scurve = studioNurbscurve.Nurbscurve() sshader = studioShader.Shader() root = get_root() world = get_world() # remove depend nodes depend_nodes = scurve.extract_depend_nodes(default=False) for x in range(depend_nodes.length()): scurve.remove_node(depend_nodes[x]) scurve.remove_nodes(depend_nodes) # make model group mesh_mobjects = scurve.extract_transform_primitive(OpenMaya.MFn.kMesh, shape=False) model_dag_node = scurve.create_group(root) # make geometry hierarchy for x in range(mesh_mobjects.length()): scurve.set_locked(mesh_mobjects[x].node(), attributes=None, locked=False) scurve.disconnect_chanelbox(mesh_mobjects[x].node()) scurve.set_parent(mesh_mobjects[x], model_dag_node.object()) # assigin default shader sshader.assign_shading_engine(mesh_mobjects[x], shading_group=None) # remove unwanted dag nodes trans_dagpath_array = scurve.extract_top_transforms(default=False) for x in range(trans_dagpath_array.length()): if trans_dagpath_array[x].node() == model_dag_node.object(): continue scurve.remove_node(trans_dagpath_array[x].node()) # scurve.remove_nodes(transform_mobjects) # reset transforms for x in range(mesh_mobjects.length()): scurve.delete_history(mesh_mobjects[x]) scurve.freeze_transformations(mesh_mobjects[x]) scurve.set_default_position(mesh_mobjects[x].node()) # create world control world_dependency_node = scurve.create_world(model_dag_node, parent=True) # set the name model_dag_node.setName(root) world_dependency_node.setName(world) # create asset id id_data = resource.getPipeIDData() scurve.create_maya_ids(model_dag_node.object(), id_data) # OpenMaya.MGlobal.selectByName(model_dag_node.fullPathName()) OpenMaya.MGlobal.clearSelectionList() scurve.set_perspective_view() return True, [root], 're-generate hierarchy'
def removed_pipe_ids(self, mobject, id_data=None): if not id_data: id_data = resource.getPipeIDData() removed_ids = [] dependency_node = OpenMaya.MFnDependencyNode(mobject) for attribute in id_data: if dependency_node.hasAttribute(attribute): continue removed_ids.append(attribute) return removed_ids
def update_pipe_ids(self, mobject, id_data=None): if not id_data: id_data = resource.getPipeIDData() removed_ids = self.removed_pipe_ids(mobject, id_data=id_data) exists_attributes = set(id_data.keys()).difference(removed_ids) dependency_node = OpenMaya.MFnDependencyNode(mobject) for attribute in exists_attributes: mplug = dependency_node.findPlug(attribute) id_data[attribute]['value'] = mplug.asString() self.create_pipe_ids(mobject, id_data)
def update_pipe_ids(id_data=None): from maya import OpenMaya from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() root = get_root() mobject = smaya.get_mobject(root) if not id_data: id_data = resource.getPipeIDData() smaya.update_pipe_ids(mobject, id_data=id_data) return True, [id_data.keys()], 'updated with valid asset ids'
def make_packing_arguments(self, arguments): input_data = resource.getPipeIDData() for k, v in input_data.items(): if k not in arguments: continue if k == 'smodified': continue input_data[k]['value'] = arguments[k] dt_object = datetime.fromtimestamp(arguments['smodified']) input_data['smodified']['value'] = dt_object.strftime('%Y:%d:%B-%I:%M:%S:%p') return input_data
def removed_pipe_ids(): from maya import OpenMaya from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() root = get_root() mobject = smaya.get_mobject(root) id_data = resource.getPipeIDData() removed_ids = smaya.removed_pipe_ids(mobject, id_data=id_data) if not removed_ids: return True, [], 'asset ids are valid' return False, removed_ids, 'asset ids are invalid'
def check_shot_hierarchy(subfield): from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() id_data = resource.getPipeIDData() transforms = smaya.extract_top_transforms() nodes = [transforms[x].fullPathName() for x in range(transforms.length())] if transforms.length() > 1: return False, nodes, 'broken hierarchy' pipe_ids = resource.getPipeIDData() scene_subfield = {} for index in range(transforms.length()): pipe_id_data, valid = smaya.get_pipe_id_data(transforms[index].node(), pipe_ids) if not valid: continue subfield = pipe_id_data['ssubfield']['value'] scene_subfield.setdefault(subfield, []).append(transforms[index].fullPathName()) if subfield in scene_subfield: return True, scene_subfield[subfield], 'suitable hierarchy' return False, [], 'not found %s' % get_root()
def get_pipe_id_data(self, mobject, id_data=None): if not id_data: id_data = resource.getPipeIDData() data = {} dependency_node = OpenMaya.MFnDependencyNode(mobject) for attribute in id_data: if not dependency_node.hasAttribute(attribute): continue mplug = dependency_node.findPlug(attribute) id_value = mplug.asString() order = None if 'order' in id_data[attribute]: order = id_data[attribute]['order'] data[attribute] = {'order': order, 'value': id_value} if len(data) != len(id_data): return data, False return data, True
def find_shot_node(subfield): from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() transforms = smaya.extract_top_transforms() pipe_ids = resource.getPipeIDData() shot_nodes = [] for index in range(transforms.length()): pipe_id_data, valid = smaya.get_pipe_id_data(transforms[index].node(), pipe_ids) if not valid: continue if pipe_id_data['ssubfield']['value'] != subfield: continue shot_nodes.append(transforms[index]) if not shot_nodes: return False, shot_nodes if len(shot_nodes) > 1: return False, shot_nodes return True, shot_nodes[0].node()
def get_scene_pipe_ids(): from studio_usd_pipe import resource from studio_usd_pipe.api import studioMaya reload(studioMaya) smaya = studioMaya.Maya() transforms = smaya.extract_null_transform() pipe_ids = resource.getPipeIDData() pipe_data = {} for index in range(transforms.length()): pipe_id_data, valid = smaya.get_pipe_id_data(transforms[index].node(), pipe_ids) if not valid: continue contents = {transforms[index].fullPathName(): pipe_id_data} current_pipe = pipe_id_data['spipe']['value'] if current_pipe not in pipe_data: pipe_data.setdefault(current_pipe, {}) pipe_data[current_pipe].update(contents) return pipe_data
def create_shot(**kwargs): ''' from studio_usd_pipe.utils import maya_scene reload(maya_scene) kwargs = {'pipe': 'shots', 'caption': 'seq_1001|shot_101', 'subfield': 'layout', 'type': 'seq_1001', 'tag': 'shot_101', 'dependency': None, 'version': '0.0.0', 'modified': '1111111111', 'location': 'dddddddddd', 'description': 'ddddddddddd', 'user': '******' } valid, values, message = maya_scene.create_shot(kwargs) ''' from studio_usd_pipe.api import studioMaya reload(studioMaya) smaya = studioMaya.Maya() root = get_root() dag_node = smaya.create_group(root) valid, values = create_pipe_ids(dag_node.object(), **kwargs) if not valid: return False, values, 'failed' id_data = resource.getPipeIDData() transforms = smaya.extract_null_transform() for index in range(transforms.length()): pipe_id_data, valid = smaya.get_pipe_id_data(transforms[index].node(), id_data) if not valid: continue if pipe_id_data['spipe']['value'] != 'assets': continue smaya.set_parent(transforms[index], dag_node.object()) transforms = smaya.extract_top_transforms() for index in range(transforms.length()): if transforms[index].node() == dag_node.object(): continue smaya.remove_node(transforms[index].node()) dag_node.setName(root) return True, [root], 'success'
def create_kalembic(self, node, frame_range=[1001, 1001], attributes=None, output_path=None): self.set_bounding_box() if not frame_range: frame_range = self.get_frame_range() if not attributes: attributes = resource.getPipeIDData() attributes = ' -attr ' + ' -attr '.join(attributes.keys()) if not output_path: output_path = os.path.join( tempfile.gettempdir(), 'temp_%s.abc' % common.get_dynamic_name()) format = 'ogawa' output_path = '%s.abc' % (os.path.splitext(output_path)[0]) mel_command = 'AbcExport -j \"-frameRange %s %s %s -uvWrite -dataFormat %s -root %s -file %s";' % ( frame_range[0], frame_range[1], attributes, format, node, output_path) # example AbcExport -j "-frameRange 1 120 -attr spipe -attr scaption -uvWrite -dataFormat ogawa -root |pCube1 -file /venture/box.abc"; OpenMaya.MGlobal.executeCommand(mel_command, False, True) return output_path