import asset_reader from lxf_loader import LXFLoader import maya.api.OpenMaya as OpenMaya import maya.OpenMaya as om import maya.OpenMayaMPx as OpenMayaMPx import logging import maya.cmds as mc logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) def load_part(design_ids, debug=False): # design_ids = ['99251'] part_data_map = asset_reader.asset_extract(design_ids=design_ids, debug=debug) mesh_created = [] if not part_data_map: return mesh_created for design_id in design_ids: if debug: logger.debug('Load LDD part %s' % design_id) status, v_list, n_list, f_ids = LXFLoader.get_geometry(design_id, part_data_map, debug=debug) vertices = [OpenMaya.MPoint(v_list[x], v_list[x + 1], v_list[x + 2]) for x in range(0, len(v_list), 3)] polygon_counts = [3 for i in range(0, len(f_ids), 3)] fn_mesh = OpenMaya.MFnMesh() fn_mesh.create(vertices, polygon_counts, f_ids) mesh_parent = fn_mesh.parent(0) mesh_transform = OpenMaya.MFnTransform(mesh_parent) mesh_transform.setName('lego_part_%s_mesh' % design_id) force_element = 'initialShadingGroup' mc.sets(mesh_transform.fullPathName(), e=True, forceElement=force_element) if debug: logger.debug('Load LDD part %s finished.' % design_id) mesh_created.append(mesh_transform.fullPathName()) return mesh_created def part_exists(design_id, debug=False): design_id_list = asset_reader.asset_extract(debug=debug) if design_id in design_id_list: return True return False def get_part_list(debug=False): return asset_reader.asset_extract(debug=debug) kPluginCmdName = 'ldd' kImportFlag = '-ip' kImportFlagLong = '-importPart' kExistsFlag = '-ex' kExistsFlagLong = '-exists' kListFlag = '-lp' kListFlagLong = '-listParts' kDebugFlag = '-d' kDebugFlagLong = '-debug' class LddCommand(OpenMayaMPx.MPxCommand): def __init__(self): """Constructor. """ OpenMayaMPx.MPxCommand.__init__(self) def doIt(self, args): return self.parseArguments(args) def parseArguments(self, args): arg_data = om.MArgParser(self.syntax(), args) debug = False if arg_data.isFlagSet(kDebugFlagLong): debug = True if arg_data.isFlagSet(kImportFlagLong): design_id_str = arg_data.flagArgumentString(kImportFlagLong, 0) design_ids = [design_id_str] if ',' in design_id_str: design_ids = design_id_str.split(',') self.setResult(load_part(design_ids, debug=debug)) if arg_data.isFlagSet(kExistsFlagLong): design_id = arg_data.flagArgumentString(kExistsFlagLong, 0) self.setResult(part_exists(design_id, debug=debug)) if arg_data.isFlagSet(kListFlagLong): self.setResult(sorted(get_part_list(debug=debug))) def ldd_command_syntaxCreator(): syntax = om.MSyntax() syntax.addFlag(kImportFlag, kImportFlagLong, om.MSyntax.kString) syntax.addFlag(kExistsFlag, kExistsFlagLong, om.MSyntax.kString) syntax.addFlag(kListFlag, kListFlagLong, om.MSyntax.kNoArg) syntax.addFlag(kDebugFlag, kDebugFlagLong, om.MSyntax.kNoArg) return syntax def ldd_command_creater(): return OpenMayaMPx.asMPxPtr(LddCommand())