def show_window(standalone=True): if not standalone: from studio_usd_pipe.core import smaya reload(smaya) from studio_usd_pipe.api import studioMaya studio_maya = studioMaya.Maya() cfile, ctype = studio_maya.get_current_file() if not cfile: message = 'Empty scene\nOpen the maya scene and try!...' QtWidgets.QMessageBox.critical(None, 'warning', message, QtWidgets.QMessageBox.Ok) return main_window = smaya.get_qwidget() smaya.remove_exists_window('widget_shot_push') window = shot_push.Window(parent=main_window, standalone=False, application='maya') window.show() if standalone: app = QtWidgets.QApplication(sys.argv) window = shot_push.Window(parent=None, standalone=True, application='maya') window.show() sys.exit(app.exec_())
def create_studio_shot(output_path=None): from studio_usd_pipe.api import studioMaya reload(studioMaya) smaya = studioMaya.Maya() scene_pipe_ids = get_scene_pipe_ids() shot_data = {} for node in scene_pipe_ids['shots']: current_data = { 'subfield': scene_pipe_ids['shots'][node]['ssubfield']['value'], 'type': scene_pipe_ids['shots'][node]['stype']['value'], 'tag': scene_pipe_ids['shots'][node]['stag']['value'], } shot_data.update(current_data) asset_data = {} for index, asset in enumerate(scene_pipe_ids['assets']): current_data = { 'caption': scene_pipe_ids['assets'][asset]['scaption']['value'], 'subfield': scene_pipe_ids['assets'][asset]['ssubfield']['value'], 'version': scene_pipe_ids['assets'][asset]['sversion']['value'], } asset_data.setdefault(index, current_data) frame_range = smaya.get_frame_range() maya_settings = smaya.get_maya_settings() maya_data = { 'frame_range': frame_range, } maya_data.update(maya_settings) final_data = {'shot': shot_data, 'assets': asset_data, 'scene': maya_data} print json.dumps(final_data, indent=4) with (open(output_path, 'w')) as content: content.write(json.dumps(final_data, indent=4)) return output_path
def take_thumbnail(self, button): output_path = None if self.standalone: current_file = swidgets.brows_file( 'find the thumbnail(image) file', resource.getImageFormats()) if not current_file: return output_path = os.path.join( tempfile.gettempdir(), 'thumbnail_%s.png' % resource.getCurrentDateKey()) output_path = swidgets.image_resize(current_file, output_path, 768, 540) else: from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() output_path, w, h = smaya.vieport_snapshot( output_path=None, width=768, height=540, ) if not os.path.isfile(output_path): return qsize = button.minimumSize() swidgets.image_to_button(button, qsize.width(), qsize.height(), path=output_path) self.button_thumbnail.setToolTip(output_path)
def release(**kwargs): from maya import standalone standalone.initialize(name="python") from maya import OpenMaya maya_file = sys.argv[1] inputs = ast.literal_eval(sys.argv[2]) smaya = studioMaya.Maya() smaya.load_plugins( plugins=["pxrUsd", "pxrUsdPreviewSurface", "pxrUsdTranslators"]) smaya.open_maya(maya_file, None) current_show = inputs['show'] current_pipe = inputs['pipe'] current_application = inputs['application'] reapir = inputs['reapir'] from studio_usd_pipe.api import studioPush publish = studioPush.Push(current_show, current_pipe) valid, message = publish.validate(repair=reapir, **inputs) if not valid: returncode([valid, message]) standalone.uninitialize(name='python') return valid, message = publish.extract(repair=reapir, **inputs) if not valid: returncode([valid, message]) return extracted_data = publish.get_extracted_data() if not valid: returncode([valid, message]) return valid, message = publish.release() returncode([valid, message]) standalone.uninitialize(name='python')
def import_maya_scene(scene, namespace): if not os.path.isfile(scene): return False, None, 'not found scene' from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() smaya.import_maya(scene, file_type=None, namespace=namespace) return True, scene, 'success'
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 get_pipe_ids(): from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() root = get_root() if not smaya.object_exists(root): return None mobject = smaya.get_mobject(root) id_data, valid = smaya.get_pipe_id_data(mobject, id_data=None) return id_data
def references_maya_scene(input_data, new_scene=False): if new_scene: from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() smaya.new_maya_scene() valids = {} for namespace, path in input_data.items(): valid, value, message = reference_maya_scene(path, namespace) valids.setdefault(valid, []).append(value) return valids
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 reference_maya_scene(scene, namespace): if not os.path.isfile(scene): return False, None, 'not found scene' from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() smaya.reference_maya(scene, deferred=False, locked=False, namespace=namespace) return True, scene, 'success'
def update_pipe_ids(**kwargs): from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() valid, mobject = find_shot_node(kwargs['subfield']) if not valid: return False, mobject, 'found more than one shot nodes' valid, values = create_pipe_ids(mobject, **kwargs) if not valid: return False, values return True, values
def get_pipe_ids(**kwargs): from maya import standalone standalone.initialize(name="python") from maya import OpenMaya maya_file = sys.argv[1] smaya = studioMaya.Maya() smaya.open_maya(maya_file, None) data = maya_scene.get_scene_pipe_ids() returncode(data) standalone.uninitialize(name='python')
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_model_hierarchy(): from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() top_level_nodes = smaya.extract_top_transforms() if top_level_nodes.length() == 0: return False, [None], 'not found any transform nodes' elif top_level_nodes.length() > 1: nodes = [] for x in range(top_level_nodes.length()): nodes.append(top_level_nodes[x].fullPathName()) return False, nodes, 'found more than one top level transform nodes' elif not smaya.object_exists(get_root()): return False, [None], 'not found %s' % get_root() return True, [get_root()], 'suitable hierarchy'
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 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 create_puppet_maya(output_path): from studio_usd_pipe.api import studioMaya smaya = studioMaya.Maya() root = get_root() smaya.export_selected(root, output_path, force=True) return output_path
def execute(): from studio_usd_pipe.api import studioMaya reload(studioMaya) sm = studioMaya.Maya() sm.set_bounding_box()
def get_current_maya(self): from studio_usd_pipe.api import studioMaya studio_maya = studioMaya.Maya() self.source_maya, format = studio_maya.get_current_file() return format
def execute(): from studio_usd_pipe.api import studioMaya reload(studioMaya) sm = studioMaya.Maya() sm.set_perspective_view()