LDD/reader/ldd_command.py

107 lines
3.3 KiB
Python

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())