diff options
author | Willian Padovani Germano <wpgermano@gmail.com> | 2007-05-06 19:47:07 +0400 |
---|---|---|
committer | Willian Padovani Germano <wpgermano@gmail.com> | 2007-05-06 19:47:07 +0400 |
commit | e85f145c19b8a59d7d9b12005865b06033fcb36d (patch) | |
tree | fa2d371e735fcd6fd5f2058d1d5579db88b5258e /release | |
parent | b2c888545ca3e876ea7ae306ed508daa216330b3 (diff) |
Scripts:
- Scripts config editor was not working due to changes in module BPyRegistry.py.
- AC3D exporter: a little cleanup + small improvements like sorting objects.
Diffstat (limited to 'release')
-rw-r--r-- | release/scripts/ac3d_export.py | 80 | ||||
-rw-r--r-- | release/scripts/config.py | 7 |
2 files changed, 51 insertions, 36 deletions
diff --git a/release/scripts/ac3d_export.py b/release/scripts/ac3d_export.py index 5ae4eaf2f2d..bccb7978f5f 100644 --- a/release/scripts/ac3d_export.py +++ b/release/scripts/ac3d_export.py @@ -10,7 +10,7 @@ Tip: 'Export selected meshes to AC3D (.ac) format' __author__ = "Willian P. Germano" __url__ = ("blender", "elysiun", "AC3D's homepage, http://www.ac3d.org", "PLib 3d gaming lib, http://plib.sf.net") -__version__ = "2.43.1 2007-02-22" +__version__ = "2.44 2007-05-05" __bpydoc__ = """\ This script exports selected Blender meshes to AC3D's .ac file format. @@ -72,7 +72,7 @@ Notes:<br> # $Id$ # # -------------------------------------------------------------------------- -# AC3DExport version 2.43.1 +# AC3DExport version 2.44 # Program versions: Blender 2.42+ and AC3Db files (means version 0xb) # new: updated for new Blender version and Mesh module; supports lines (edges) again; # option to export vertices transformed to global coordinates or not; now the modified @@ -107,7 +107,6 @@ from Blender import Object, Mesh, Material, Image, Mathutils, Registry from Blender import sys as bsys # Globals -ERROR_MSG = '' # popup error msg REPORT_DATA = { 'main': [], 'errors': [], @@ -291,14 +290,14 @@ class FooMesh: class AC3DExport: # the ac3d exporter part - def __init__(self, scene_objects, filename): + def __init__(self, scene_objects, file): global ARG, SKIP_DATA, ADD_DEFAULT_MAT, DEFAULT_MAT - global ERROR_MSG header = 'AC3Db' + self.file = file self.buf = '' - self.mbuf = '' + self.mbuf = [] self.mlist = [] world_kids = 0 parents_list = self.parents_list = [] @@ -307,14 +306,6 @@ class AC3DExport: # the ac3d exporter part exp_objs = self.exp_objs = [] tree = {} - try: - file = self.file = open(filename, 'w') - except IOError, (errno, strerror): - error = "IOError #%s: %s" % (errno, strerror) - REPORT_DATA['errors'].append("Saving failed - %s." % error) - ERROR_MSG = "Couldn't save file!%%t|%s" % error - return None - file.write(header+'\n') objs = \ @@ -356,9 +347,11 @@ class AC3DExport: # the ac3d exporter part # write materials self.MATERIALS(meshlist, TMP_mesh) - if not self.mbuf or ADD_DEFAULT_MAT: - self.mbuf = "%s\n%s" % (DEFAULT_MAT, self.mbuf) - file.write(self.mbuf) + mbuf = self.mbuf + if not mbuf or ADD_DEFAULT_MAT: + mbuf.insert(0, "%s\n" % DEFAULT_MAT) + mbuf = "".join(mbuf) + file.write(mbuf) file.write('OBJECT world\nkids %s\n' % world_kids) @@ -413,13 +406,13 @@ class AC3DExport: # the ac3d exporter part self.export_mesh(mesh, obj) self.kids() - file.close() - REPORT_DATA['main'].append("Done. Saved to: %s" % filename) def traverse_dict(self, d): kids_dict = self.kids_dict exp_objs = self.exp_objs keys = d.keys() + keys.sort() # sort for predictable output + keys.reverse() for k in keys: objname = k[2:] klen = len(d[k]) @@ -527,11 +520,12 @@ class AC3DExport: # the ac3d exporter part def MATERIALS(self, meshlist, me): for meobj in meshlist: me.getFromObject(meobj) - mat = me.materials + mats = me.materials mbuf = [] mlist = self.mlist - for m in xrange(len(mat)): - name = mat[m].name + for m in mats: + if not m: continue + name = m.name if name not in mlist: mlist.append(name) M = Material.Get(name) @@ -559,7 +553,7 @@ class AC3DExport: # the ac3d exporter part mbuf.append("%s %s %s %s %s %s %s\n" \ % (material, rgb, amb, emis, spec, shi, trans)) self.mlist = mlist - self.mbuf += "".join(mbuf) + self.mbuf.append("".join(mbuf)) def OBJECT(self, type): self.file.write('OBJECT %s\n' % type) @@ -658,11 +652,15 @@ class AC3DExport: # the ac3d exporter part materials = self.mesh.materials mlist = self.mlist - omlist = {} - matidx_error_told = 0 - objmats = [omat.name for omat in materials] + matidx_error_reported = False + objmats = [] + for omat in materials: + if omat: objmats.append(omat.name) + else: objmats.append(None) for f in faces: - if objmats[f.mat] in mlist: + if not objmats: + m_idx = 0 + elif objmats[f.mat] in mlist: m_idx = mlist.index(objmats[f.mat]) else: if not lc_MATIDX_ERROR: @@ -672,12 +670,13 @@ class AC3DExport: # the ac3d exporter part rdat.append("defined (not linked to an existing material).") rdat.append("Result: some faces may be exported with a wrong color.") rdat.append("You can assign materials in the Edit Buttons window (F9).") - elif not matidx_error_told: + elif not matidx_error_reported: midxmsg = "- Same for object %s." % self.obj.name REPORT_DATA['warns'].append(midxmsg) lc_MATIDX_ERROR += 1 - matidx_error_told = 1 + matidx_error_reported = True m_idx = 0 + if lc_ADD_DEFAULT_MAT: m_idx -= 1 refs = len(f) flaglow = 0 # polygon if lc_PER_FACE_1_OR_2_SIDED and hasFaceUV: # per face attribute @@ -771,7 +770,7 @@ def report_data(): # File Selector callback: def fs_callback(filename): - global ERROR_MSG, EXPORT_DIR, OBJS, CONFIRM_OVERWRITE, VERBOSE + global EXPORT_DIR, OBJS, CONFIRM_OVERWRITE, VERBOSE if not filename.endswith('.ac'): filename = '%s.ac' % filename @@ -787,17 +786,28 @@ def fs_callback(filename): EXPORT_DIR = export_dir update_RegistryInfo() - test = AC3DExport(OBJS, filename) - if ERROR_MSG: - Blender.Draw.PupMenu(ERROR_MSG) - ERROR_MSG = '' + try: + file = open(filename, 'w') + except IOError, (errno, strerror): + error = "IOError #%s: %s" % (errno, strerror) + REPORT_DATA['errors'].append("Saving failed - %s." % error) + error_msg = "Couldn't save file!%%t|%s" % error + Blender.Draw.PupMenu(error_msg) + return + + try: + test = AC3DExport(OBJS, file) + except: + file.close() + raise else: + file.close() endtime = bsys.time() - starttime + REPORT_DATA['main'].append("Done. Saved to: %s" % filename) REPORT_DATA['main'].append("Data exported in %.3f seconds." % endtime) if VERBOSE: report_data() Blender.Window.WaitCursor(0) - return # -- End of definitions diff --git a/release/scripts/config.py b/release/scripts/config.py index ea91d5e70d0..69f929dab97 100644 --- a/release/scripts/config.py +++ b/release/scripts/config.py @@ -106,7 +106,10 @@ import Blender from Blender import Draw, BGL, Registry, Window, sys as bsys from Blender.Window import Theme from BPyRegistry import LoadConfigData, SaveConfigData, HasConfigData,\ - BPY_KEY_IN_FILE, MAX_STR_LEN, MAX_ITEMS_NUM + BPY_KEY_IN_FILE + +MAX_STR_LEN = 300 # max length for a string +MAX_ITEMS_NUM = 100 # max number for each type of button # --- # The "General" configure options key is managed from this script. @@ -630,6 +633,8 @@ def gui(): # drawing the screen if tips and tips.has_key(l[0]): tooltip = tips[l[0]] else: tooltip = "click to write a new string" name = name.replace('_',' ') + ': ' + if len(l[1]) > MAX_STR_LEN: + l[1] = l[1][:MAX_STR_LEN] BUT_TYPES[str][i] = Draw.String(name, BEVT_STR + i, x, y, w, h, l[1], MAX_STR_LEN, tooltip) if is_dir: |