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'
Exemple #6
0
 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'
Exemple #8
0
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
Exemple #10
0
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()
Exemple #11
0
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
Exemple #12
0
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'
Exemple #13
0
 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