LDD/LDD.py

144 lines
4.2 KiB
Python

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