107 lines
3.3 KiB
Python
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())
|