Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoffrey Bantle <hairbat@yahoo.com>2008-03-29 02:06:00 +0300
committerGeoffrey Bantle <hairbat@yahoo.com>2008-03-29 02:06:00 +0300
commit0010f33bdbd50515e1a38614016819431ff794b4 (patch)
tree84d22a587c4b0da2b67f029b4e9a8267d96e86b4 /release
parent5fa49b59478fb4ce7e54d53edf58915145b23922 (diff)
-> FLT I/O: UI now undo safe
Both the FLT importer and exporter now store and retrieve their settings from the blender python registry making them safe for use with global undo.
Diffstat (limited to 'release')
-rw-r--r--release/scripts/flt_export.py199
-rw-r--r--release/scripts/flt_import.py17
2 files changed, 114 insertions, 102 deletions
diff --git a/release/scripts/flt_export.py b/release/scripts/flt_export.py
index c02b87793a0..8756b1c654b 100644
--- a/release/scripts/flt_export.py
+++ b/release/scripts/flt_export.py
@@ -47,45 +47,51 @@ import shutil
FF = FileFinder()
records = process_recordDefs()
-
+
class ExporterOptions:
+
+ def read_state(self):
+ reg = Blender.Registry.GetKey('flt_export',1)
+ if reg:
+ for key in self.state:
+ if reg.has_key(key):
+ self.state[key] = reg[key]
+
+ def write_state(self):
+ d = dict()
+ for key in self.state:
+ d[key] = self.state[key]
+ Blender.Registry.SetKey('flt_export', d, 1)
def __init__(self):
self.verbose = 1
self.tolerance = 0.001
self.writevcol = True
- #new stuff
- self.export_shading = 0
- self.shading_default = 45.0
- self.basepath = os.path.dirname(Blender.Get('filename'))
- self.scale = 1.0
-
- #set externals path
- if(os.path.exists(os.path.join(self.basepath,'externals'))):
- self.externalspath = os.path.join(self.basepath,'externals')
+ self.state = {'export_shading' : 0,
+ 'shading_default' : 45,
+ 'basepath' : os.path.dirname(Blender.Get('filename')),
+ 'scale': 1.0,
+ 'doxrefs' : 1,
+ 'attrib' : 0,
+ 'copytex' : 0,
+ 'transform' : 0,
+ 'xapp' : 1}
+
+ #default externals path
+ if(os.path.exists(os.path.join(self.state['basepath'],'externals'))):
+ self.state['externalspath'] = os.path.join(self.state['basepath'],'externals')
else:
- self.externalspath = self.basepath
-
- self.doxrefs = 1
+ self.state['externalspath'] = self.state['basepath']
- #texture options
- if(os.path.exists(os.path.join(self.basepath,'textures'))):
- self.texturespath = os.path.join(self.basepath,'textures')
+ if(os.path.exists(os.path.join(self.state['basepath'],'textures'))):
+ self.state['texturespath'] = os.path.join(self.state['basepath'],'textures')
else:
- self.texturespath = self.basepath
+ self.state['texturespath'] = self.state['basepath']
+
+ self.state['xappath'] = ''
+ self.read_state() #read from registry
- #misc
- self.write_attrib_files = 0
- self.copy_textures = 0
- self.export_transform = 0
- self.flattenmesh = False
- self.xapp = 1
- reg = Blender.Registry.GetKey('flt_export',1)
- if(reg and 'xappath' in reg.keys()):
- self.xappath = reg['xappath']
- else:
- self.xappath = ''
options = ExporterOptions()
tex_files = dict() #a list of (possibly) modified texture path names
@@ -221,7 +227,7 @@ class GlobalResourceRepository:
indexhash = self.namehash[object.name]
#export in global space? THIS HAS BEEN MADE REDUNDANT... REMOVE ME
- if not options.export_transform:
+ if not options.state['transform']:
vertex = shadowVert(vertex,object,True,flatShadeNorm)
else:
vertex = shadowVert(vertex,object,False,flatShadeNorm)
@@ -463,9 +469,9 @@ class Node:
self.object = object
if object:
self.name = self.object.name
- if not options.export_transform:
+ if not options.state['transform']:
oloc = Blender.Mathutils.Vector(object.getLocation('worldspace'))
- vec = Blender.Mathutils.Vector(oloc[0] * options.scale, oloc[1] * options.scale, oloc[2] * options.scale) #scale
+ vec = Blender.Mathutils.Vector(oloc[0] * options.state['scale'], oloc[1] * options.state['scale'], oloc[2] * options.state['scale']) #scale
self.matrix = self.object.getMatrix('worldspace') * Blender.Mathutils.TranslationMatrix(vec - oloc)
else:
self.matrix = self.object.getMatrix('localspace') #do matrix mult here.
@@ -802,13 +808,13 @@ class FLTNode(Node):
self.exportmesh.getFromObject(self.object.name)
for vert in self.exportmesh.verts:
- if not options.export_transform:
+ if not options.state['transform']:
vec = vert.co
- vec = Blender.Mathutils.Vector(vec[0] * options.scale, vec[1] * options.scale, vec[2] * options.scale) #scale
+ vec = Blender.Mathutils.Vector(vec[0] * options.state['scale'], vec[1] * options.state['scale'], vec[2] * options.state['scale']) #scale
vert.co = Blender.Mathutils.TranslationMatrix(vec) * (vert.co * self.object.getMatrix('worldspace'))
- if options.scale != 1.0:
- vert.co = vert.co * options.scale
+ if options.state['scale'] != 1.0:
+ vert.co = vert.co * options.state['scale']
if("FLT_VCOL") in self.mesh.verts.properties:
for v in self.exportmesh.verts:
@@ -825,7 +831,7 @@ class FLTNode(Node):
default = None
- if options.export_shading:
+ if options.state['export_shading']:
mods = self.object.modifiers
hasedsplit = False
for mod in mods:
@@ -834,7 +840,7 @@ class FLTNode(Node):
break
if not hasedsplit:
default = mods.append(Modifier.Types.EDGESPLIT)
- default[Modifier.Settings.EDGESPLIT_ANGLE] = options.shading_default
+ default[Modifier.Settings.EDGESPLIT_ANGLE] = options.state['shading_default']
default[Modifier.Settings.EDGESPLIT_FROM_ANGLE] = True
default[Modifier.Settings.EDGESPLIT_FROM_SHARP] = False
self.object.makeDisplayList()
@@ -843,17 +849,17 @@ class FLTNode(Node):
#recalculate vertex positions
for vert in self.exportmesh.verts:
- if not options.export_transform:
+ if not options.state['transform']:
vec = vert.co
- vec = Blender.Mathutils.Vector(vec[0] * options.scale, vec[1] * options.scale, vec[2] * options.scale) #scale
+ vec = Blender.Mathutils.Vector(vec[0] * options.state['scale'], vec[1] * options.state['scale'], vec[2] * options.state['scale']) #scale
vert.co = Blender.Mathutils.TranslationMatrix(vec) * (vert.co * self.object.getMatrix('worldspace'))
- if options.scale != 1.0:
- vert.co = vert.co * options.scale
+ if options.state['scale'] != 1.0:
+ vert.co = vert.co * options.state['scale']
flipped = self.object.getMatrix('worldspace').determinant()
- if not options.export_transform:
+ if not options.state['export_transform']:
self.exportmesh.calcNormals()
@@ -885,7 +891,7 @@ class FLTNode(Node):
self.buildNormFaces()
self.buildTexData()
- if not options.export_transform:
+ if not options.state['export_transform']:
if flipped < 0:
for vdesc in self.header.GRR.vertex_lst:
vdesc.accum = 0
@@ -1041,9 +1047,9 @@ class FLTNode(Node):
if self.props.has_key(key):
exportdict[key] = self.props[key]
- if self.opcode == 63 and options.externalspath:
+ if self.opcode == 63 and options.state['externalspath']:
try:
- exportdict['3t200!filename'] = os.path.join(options.externalspath,self.object.DupGroup.name+'.flt')
+ exportdict['3t200!filename'] = os.path.join(options.state['externalspath'],self.object.DupGroup.name+'.flt')
self.header.xrefnames.append(self.object.DupGroup.name)
except:
pass
@@ -1071,7 +1077,7 @@ class FLTNode(Node):
self.write_longid(self.name) #fix this!
- if options.export_transform or self.opcode == 63:
+ if options.state['export_transform'] or self.opcode == 63:
#writing transform matrix....
self.write_matrix()
@@ -1234,21 +1240,16 @@ class Database(Node):
self.write_push()
- if options.flattenmesh:
- self.mnodes.reverse()
- for mnode in self.mnodes:
- mnode.write_faces()
- else:
- for child in self.children:
- child.write()
+ for child in self.children:
+ child.write()
self.write_pop()
def export_textures(self,texturepath):
for i in xrange(self.GRR.texture_count()):
texture = self.GRR.texture_lst[i]
- if options.copy_textures:
- filename = os.path.normpath(os.path.join(options.texturespath, os.path.basename(self.GRR.request_texture_filename(i))))
+ if options.state['copytex']:
+ filename = os.path.normpath(os.path.join(options.state['texturespath'], os.path.basename(self.GRR.request_texture_filename(i))))
else:
filename = os.path.normpath(self.GRR.request_texture_filename(i))
@@ -1335,10 +1336,10 @@ def dbexport_internal(scene):
global xrefsdone
global options
- if exportlevel == 0 or not options.externalspath:
- fname = os.path.join(options.basepath,scene.name + '.flt')
+ if exportlevel == 0 or not options.state['externalspath']:
+ fname = os.path.join(options.state['basepath'],scene.name + '.flt')
else:
- fname = os.path.join(options.externalspath,scene.name + '.flt')
+ fname = os.path.join(options.state['externalspath'],scene.name + '.flt')
fw = FltOut(fname)
db = Database(scene,fw)
@@ -1352,7 +1353,7 @@ def dbexport_internal(scene):
db.write()
fw.close_file()
- if options.doxrefs:
+ if options.state['doxrefs']:
for xname in xreflist:
try:
xrefscene = Blender.Scene.Get(xname)
@@ -1387,7 +1388,7 @@ def dbexport():
Blender.Window.WaitCursor(False)
#optional: Copy textures
- if options.copy_textures:
+ if options.state['copy_textures']:
for imgname in tex_files:
#Check to see if texture exists in target directory
if not os.path.exists(tex_files[imgname]):
@@ -1398,11 +1399,11 @@ def dbexport():
shutil.copyfile(origpath,tex_files[imgname])
#optional: Write attribute files
- if options.write_attrib_files:
+ if options.state['attrib']:
write_attribute_files()
- if options.xapp:
- cmd= options.xappath + " " + fname
+ if options.state['xapp']:
+ cmd= options.state['xappath'] + " " + fname
status = os.system(cmd)
@@ -1442,31 +1443,28 @@ FLTAttrib = None
def setshadingangle(ID,val):
global options
- options.shading_default = val
+ options.state['shading_default'] = val
def setBpath(fname):
global options
- options.basepath = os.path.dirname(fname)
+ options.state['basepath'] = os.path.dirname(fname)
#update xref and textures path too....
- if(os.path.exists(os.path.join(options.basepath,'externals'))):
- options.externalspath = os.path.join(options.basepath,'externals')
- if(os.path.exists(os.path.join(options.texturespath,'textures'))):
- options.texturespath = os.path.join(options.basepath,'textures')
+ if(os.path.exists(os.path.join(options.state['basepath'],'externals'))):
+ options.state['externalspath'] = os.path.join(options.state['basepath'],'externals')
+ if(os.path.exists(os.path.join(options.state['basepath'],'textures'))):
+ options.state['texturespath'] = os.path.join(options.state['basepath'],'textures')
def setexportscale(ID,val):
global options
- options.scale = val
+ options.state['scale'] = val
def setTpath(fname):
global options
- options.texturespath = os.path.dirname(fname)
+ options.state['texturespath'] = os.path.dirname(fname)
def setXpath(fname):
global options
- options.externalspath = os.path.dirname(fname)
+ options.state['externalspath'] = os.path.dirname(fname)
def setXApath(fname):
global options
- options.xappath = fname
- d = dict()
- d['xappath'] = options.xappath
- Blender.Registry.SetKey('flt_export', d, 1)
+ options.state['xappath'] = fname
def event(evt, val):
x = 1
def but_event(evt):
@@ -1506,39 +1504,37 @@ def but_event(evt):
global FLTAttrib
-
-
#choose base path for export
if evt == 4:
- Blender.Window.FileSelector(setBpath, "DB Root", options.basepath)
+ Blender.Window.FileSelector(setBpath, "DB Root", options.state['basepath'])
#choose XREF path
if evt == 6:
- Blender.Window.FileSelector(setXpath,"DB Externals",options.externalspath)
+ Blender.Window.FileSelector(setXpath,"DB Externals",options.state['externalspath'])
#choose texture path
if evt == 8:
- Blender.Window.FileSelector(setTpath,"DB Textures",options.texturespath)
+ Blender.Window.FileSelector(setTpath,"DB Textures",options.state['texturespath'])
#export shading toggle
if evt == 9:
- options.export_shading = FLTShadeExport.val
+ options.state['export_shading'] = FLTShadeExport.val
#export Textures
if evt == 11:
- options.copy_textures = FLTCopyTex.val
+ options.state['copytex']= FLTCopyTex.val
#export XRefs
if evt == 13:
- options.doxrefs = FLTDoXRef.val
+ options.state['doxrefs'] = FLTDoXRef.val
#export Transforms
if evt == 12:
- options.export_transform = FLTGlobal.val
+ options.state['transform'] = FLTGlobal.val
if evt == 14:
- options.xapp = FLTXAPP.val
+ options.state['xapp'] = FLTXAPP.val
if evt == 16:
- Blender.Window.FileSelector(setXApath,"External Application",options.xappath)
+ Blender.Window.FileSelector(setXApath,"External Application",options.state['xappath'])
if evt == 20:
- options.write_attrib_files = FLTAttrib.val
+ options.state['attrib'] = FLTAttrib.val
#Export DB
if evt == 1:
@@ -1548,6 +1544,8 @@ def but_event(evt):
if evt == 2:
Draw.Exit()
+ options.write_state()
+
from Blender.BGL import *
from Blender import Draw
def gui():
@@ -1608,47 +1606,46 @@ def gui():
#FLTLabel = Draw.Text("FLT Exporter V2.0",'large')
cy = height - 80
- #base path
FLTBaseLabel = Draw.Label("Base Path:",cx,cy,100,20)
- FLTBaseString = Draw.String("",3,cx+100,cy,300,20,options.basepath,255,"Folder to export to")
+ FLTBaseString = Draw.String("",3,cx+100,cy,300,20,options.state['basepath'],255,"Folder to export to")
FLTBaseChooser = Draw.PushButton("...",4,cx+400,cy,20,20,"Choose Folder")
cy = cy-40
#externals path
FLTXRefLabel = Draw.Label("XRefs:",cx,cy,100,20)
- FLTXRefString = Draw.String("",5,cx+100,cy,300,20,options.externalspath,255,"Folder for external references")
+ FLTXRefString = Draw.String("",5,cx+100,cy,300,20,options.state['externalspath'],255,"Folder for external references")
FLTXRefChooser = Draw.PushButton("...",6,cx+400,cy,20,20,"Choose Folder")
cy = cy-40
#Textures path
FLTTextureLabel = Draw.Label("Textures:",cx,cy,100,20)
- FLTTextureString = Draw.String("",7,cx+100,cy,300,20,options.texturespath,255,"Folder for texture files")
+ FLTTextureString = Draw.String("",7,cx+100,cy,300,20,options.state['texturespath'],255,"Folder for texture files")
FLTTextureChooser = Draw.PushButton("...",8,cx+400,cy,20,20,"Choose Folder")
cy=cy-40
#External application path
FLTXAPPLabel = Draw.Label("XApp:",cx,cy,100,20)
- FLTXAPPString = Draw.String("",15,cx+100,cy,300,20,options.xappath,255,"External application to launch when done")
+ FLTXAPPString = Draw.String("",15,cx+100,cy,300,20,options.state['xappath'],255,"External application to launch when done")
FLTXAPPChooser = Draw.PushButton("...",16,cx+400, cy,20,20,"Choose Folder")
cy = cy-60
#Shading Options
- FLTShadeExport = Draw.Toggle("Default Shading",9,cx,cy,100,20,options.export_shading,"Turn on export of custom shading")
- FLTShadDefault = Draw.Number("",10,cx + 120,cy,100,20,options.shading_default,0.0,180.0,"Default shading angle for objects with no custom shading assigned",setshadingangle)
+ FLTShadeExport = Draw.Toggle("Default Shading",9,cx,cy,100,20,options.state['export_shading'],"Turn on export of custom shading")
+ FLTShadDefault = Draw.Number("",10,cx + 120,cy,100,20,options.state['shading_default'],0.0,180.0,"Default shading angle for objects with no custom shading assigned",setshadingangle)
cy = cy-40
- FLTScale = Draw.Number("Export Scale",14,cx,cy,220,20,options.scale,0.0,100.0,"Export scaling factor",setexportscale)
+ FLTScale = Draw.Number("Export Scale",14,cx,cy,220,20,options.state['scale'],0.0,100.0,"Export scaling factor",setexportscale)
cy = cy-40
#misc Options
- FLTCopyTex = Draw.Toggle("Copy Textures",11,cx,cy,220,20,options.copy_textures,"Copy textures to folder indicated above")
+ FLTCopyTex = Draw.Toggle("Copy Textures",11,cx,cy,220,20,options.state['copytex'],"Copy textures to folder indicated above")
cy = cy-40
- FLTGlobal = Draw.Toggle("Export Transforms",12,cx,cy,220,20,options.export_transform,"If unchecked, Global coordinates are used (recommended)")
+ FLTGlobal = Draw.Toggle("Export Transforms",12,cx,cy,220,20,options.state['transform'],"If unchecked, Global coordinates are used (recommended)")
cy = cy-40
- FLTDoXRef = Draw.Toggle("Export XRefs", 13,cx,cy,220,20,options.doxrefs,"Export External references (only those below current scene!)")
+ FLTDoXRef = Draw.Toggle("Export XRefs", 13,cx,cy,220,20,options.state['doxrefs'],"Export External references (only those below current scene!)")
cy = cy-40
- FLTXAPP = Draw.Toggle("Launch External App", 14, cx,cy,220,20,options.xapp,"Launch External Application on export")
+ FLTXAPP = Draw.Toggle("Launch External App", 14, cx,cy,220,20,options.state['xapp'],"Launch External Application on export")
cy = cy-40
- FLTAttrib = Draw.Toggle("Write Attribute Files", 20, cx, cy, 220,20,options.write_attrib_files, "Write Texture Attribute files")
+ FLTAttrib = Draw.Toggle("Write Attribute Files", 20, cx, cy, 220,20,options.state['attrib'], "Write Texture Attribute files")
#FLTXAPPATH = Draw.String("",15,cx,cy,300,20,options.xappath,255,"External application path")
diff --git a/release/scripts/flt_import.py b/release/scripts/flt_import.py
index 4ea13e11ccd..d31376995d4 100644
--- a/release/scripts/flt_import.py
+++ b/release/scripts/flt_import.py
@@ -85,6 +85,14 @@ global_prefs['scale'] = 1.0
global_prefs['attrib'] = 0
msg_once = False
+reg = Blender.Registry.GetKey('flt_import',1)
+if reg:
+ for key in global_prefs:
+ if reg.has_key(key):
+ global_prefs[key] = reg[key]
+
+
+
throw_back_opcodes = [2, 73, 4, 11, 96, 14, 91, 98, 63,111] # Opcodes that indicate its time to return control to parent.
do_not_report_opcodes = [76, 78, 79, 80, 81, 82, 94, 83, 33, 112, 101, 102, 97, 31, 103, 104, 117, 118, 120, 121, 124, 125]
@@ -2390,6 +2398,10 @@ def setimportscale(ID,val):
global_prefs['scale'] = val
def setBpath(fname):
global_prefs['fltfile'] = fname
+ d = dict()
+ for key in global_prefs:
+ d[key] = global_prefs[key]
+ Blender.Registry.SetKey('flt_import', d, 1)
def event(evt,val):
pass
@@ -2434,7 +2446,10 @@ def but_event(evt):
if evt == 2:
Draw.Exit()
-
+ d = dict()
+ for key in global_prefs:
+ d[key] = global_prefs[key]
+ Blender.Registry.SetKey('flt_import', d, 1)
from Blender.BGL import *