Blender-ZeroEngine-MSH2-Plugin/src_research_readme/zero-edit-tool-python-base/Application/Logic/exporter.py

123 lines
3.8 KiB
Python

'''
UI functionality for the export dialog.
'''
from win32com.client import constants as const
import win32com.client
import softimage
import zetcore
import zetexport
reload(zetcore)
reload(softimage)
reload(zetexport)
xsi = Application
addonpath = xsi.InstallationPath(const.siUserAddonPath)
sigen = softimage.SIGeneral()
def store_flags_OnClicked():
settings = zetcore.load_settings('export', PPG.Inspected(0))
zetcore.save_settings('export', settings)
sigen.msg('Stored.')
return
def exportbutton_OnClicked():
settings = zetcore.load_settings('export', PPG.Inspected(0))
export = zetexport.Export(xsi, settings)
try:
export.export()
except SystemExit:
return
except Exception as e:
if sigen.msg('Encountered an error while exporting, copy error to clipboard?', const.siMsgYesNo) == 6:
import win32clipboard, traceback
log_path = zetcore.get_export_log_path()
lines = []
if log_path:
with open(log_path, 'r') as file_handle:
lines = file_handle.readlines()[-15:]
message = ['Last 15 log lines:', '\n']
message.extend(['\t{0}'.format(line.strip('\n')) for line in lines])
message.extend(('\n', 'Traceback:', '\n'))
message.extend(['\t{0}'.format(element) for element in traceback.format_exc().split('\n')])
message = '\n'.join(message)
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(message, win32clipboard.CF_TEXT)
win32clipboard.CloseClipboard()
else:
raise
return
def check_sel_OnClicked():
mdls = sigen.get_all_children(xsi.Selection(0))
if not mdls:
sigen.msg('No models selected.')
return
checksel = zetcore.CheckSel(xsi, mdls, xsi.ActiveSceneRoot, softimage.SIProgressBar())
checksel.check()
checksel.build_UI()
def help_OnClicked():
ps = xsi.ActiveSceneRoot.AddProperty('CustomProperty', False, 'Export Help')
lay = ps.PPGLayout
lay.Language = "pythonscript"
agr = lay.AddGroup
egr = lay.EndGroup
text = lay.AddStaticText
agr('Auto-Overwrite', 1)
text('Overwrites output files if they already exist.')
egr()
agr('Root model name for .msh filename')
text('''Usees the name of the hierarchy root as filename.
Has to be enabled when using Batch Export.''')
egr()
agr('Batch Export', 1)
text('''Loops through all direct children of the current
selection and exports each one with all its children. Root
model name for .msh filename has to be enabled for this.''')
egr()
agr('Animation')
text('''Exports animation from the current frame range.
Current frame as Basepose only exports the selected frame
and the following to minimize file size. Export Animation
has to be enabled.''')
egr()
agr('Buttons')
text('''Check Sel iterates through the current hierarchy and analyses
every model for problems which could break the export and smaller
problems like unnecessary clusters.
Store Flags stores the current config(path, checked boxes etc).
Export should be self-explanatory.''')
egr()
xsi.InspectObj(ps, '', 'Export Help', 4, False)
for prop in xsi.ActiveSceneRoot.Properties:
if prop.Name == 'Export_Help':
xsi.DeleteObj('Export_Help')
def basepose_OnChanged():
ppg = PPG.Inspected(0)
if ppg.Parameters('basepose').Value:
ppg.Parameters('anim').Value = True
def anim_OnChanged():
ppg = PPG.Inspected(0)
if not ppg.Parameters('anim').Value:
ppg.Parameters('basepose').Value = False
def batch_OnChanged():
ppg = PPG.Inspected(0)
if ppg.Parameters('batch').Value:
ppg.Parameters('rootname').Value = True
def EClose_OnClicked():
PPG.Close()
xsi.DeleteObj('MSHExport')