import maya.OpenMaya as OpenMaya import maya.OpenMayaMPx as OpenMayaMPx import sys import os import logging import subprocess as sp import reader.lxf_loader as lxf_loader import reader.ldd_command as ldd_command reload(lxf_loader) reload(ldd_command) logger = logging.getLogger('LDD') kFileVersion = '' kExtension = '.lxf' kPluginName = 'Lego Digital Designer Reader for Maya ' kFilterName = '*.lxf' kTranslatorName = 'LXF File' class LXFReader(OpenMayaMPx.MPxFileTranslator): def __init__(self): OpenMayaMPx.MPxFileTranslator.__init__(self) def haveReadMethod(self): return True def haveWriteMethod(self): return False def canBeOpened(self): return True def translatorName(self): return kTranslatorName def defaultExtension(self): return kExtension def filter(self): return kFilterName def identifyFile(self, fileName, buf, size): if 'lxf' in fileName.name().lower(): logger.info('File is LDD lxf %s' % fileName.name()) return OpenMayaMPx.MPxFileTranslator.kIsMyFileType return OpenMayaMPx.MPxFileTranslator.kNotMyFileType def reader(self, fileName, options, mode): logger.info('reader') try: loader = lxf_loader.LXFLoader() loader.read(fileName.rawFullName()) except: sys.stderr.write("Failed reader : %s" % kPluginName) (typ, value, traceback) = sys.exc_info() sys.excepthook(typ, value, traceback) raise def lxf_reader_creator(): return OpenMayaMPx.asMPxPtr(LXFReader()) def check_ldd_install(): program_dir = os.getenv('ProgramFiles(x86)') ldd_install_dir = os.path.join(program_dir, 'LEGO Company', 'LEGO Digital Designer') exec_file = os.path.normpath(os.path.join(ldd_install_dir, 'LDD.exe')) if not os.path.exists(exec_file): return False cmd = r'powershell.exe [System.Diagnostics.FileVersionInfo]::GetVersionInfo(\"%s\").FileVersion' % exec_file ldd_version = '' p = sp.Popen(cmd, shell=True, stdout=sp.PIPE) for li in p.stdout: ldd_version = li.strip() asset_file = os.path.join(ldd_install_dir, 'Assets.lif') if not os.path.exists(asset_file): logger.warning('LEGO Digital Designer Assets.lif not found.') return False logger.debug('LEGO Digital Designer %s installed.' % ldd_version) return True def init_ldd_asset_map(): """ Pre generate asset.lif data index for reading geometry data """ def initializePlugin(mobject): if os.getenv('OS') not in ['Windows_NT']: sys.stderr.write('LDD.py only support window platform.') return if not check_ldd_install(): sys.stderr.write('LEGO Digital Designer not install.') return mplugin = OpenMayaMPx.MFnPlugin(mobject, "CGCG", "1.0", "Any") try: mplugin.registerFileTranslator(kTranslatorName, None, lxf_reader_creator, None, None, False) logger.debug('Register LDD File Translater :: %s' % kTranslatorName) except: sys.stderr.write("Failed to register translator: %s\n" % kPluginName) raise try: mplugin.registerCommand(ldd_command.kPluginCmdName, ldd_command.ldd_command_creater, ldd_command.ldd_command_syntaxCreator) logger.debug('Register LDD Command :: %s' % ldd_command.kPluginCmdName) except: sys.stderr.write('Failed to register command: ' + ldd_command.kPluginCmdName) raise def uninitializePlugin(mobject): mplugin = OpenMayaMPx.MFnPlugin(mobject) try: mplugin.deregisterFileTranslator(kTranslatorName) logger.debug('Deregister LDD File Translator :: %s' % kTranslatorName) except: sys.stderr.write("Failed to deregister translator: %s\n" % kPluginName) raise try: mplugin.deregisterCommand(ldd_command.kPluginCmdName) except: sys.stderr.write('Failed to deregister command: ' + ldd_command.kPluginCmdName) raise