[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2948] contrib/py/scripts/addons/ io_directx_bel:
Jerome Neo
jerome.le.chat at free.fr
Wed Jan 25 04:20:57 CET 2012
Revision: 2948
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2948
Author: littleneo
Date: 2012-01-25 03:20:42 +0000 (Wed, 25 Jan 2012)
Log Message:
-----------
Modified Paths:
--------------
contrib/py/scripts/addons/io_directx_bel/README
contrib/py/scripts/addons/io_directx_bel/__init__.py
contrib/py/scripts/addons/io_directx_bel/bel/uv.py
contrib/py/scripts/addons/io_directx_bel/import_x.py
Modified: contrib/py/scripts/addons/io_directx_bel/README
===================================================================
--- contrib/py/scripts/addons/io_directx_bel/README 2012-01-24 20:56:51 UTC (rev 2947)
+++ contrib/py/scripts/addons/io_directx_bel/README 2012-01-25 03:20:42 UTC (rev 2948)
@@ -20,13 +20,17 @@
TO TEST THE SCRIPT :
- . copy the 'bel' folder in /scripts/modules. can reside in /addons but Blender will complain a bit in the console. (harmless)
- . copy the 'io_directx_bel' in /scripts/addons
+ . copy the 'io_directx_bel' in /scripts/addons or addons_contrib
. start blender
. enable then addon in user prefs > addons
. run the script with file > import > directX
-13/01/12 rc 0.16
+25/01/12 0.17
+ . faster, 60% faster in some case : various loops improvements, infile templates parsing disabled by default
+ saw another bottleneck about data chunks as string but will wait for binary support for better point of view.
+ . interface cosmetics
+
+23/01/12 rc 0.16
. committed to svn (and littleneo git as usual)
. corrected a bug about referenced token parenting
. corrected a bug about non parented meshes
Modified: contrib/py/scripts/addons/io_directx_bel/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_directx_bel/__init__.py 2012-01-24 20:56:51 UTC (rev 2947)
+++ contrib/py/scripts/addons/io_directx_bel/__init__.py 2012-01-25 03:20:42 UTC (rev 2948)
@@ -3,7 +3,7 @@
"name": "DirectX Importer",
"description": "Import directX Model Format (.x)",
"author": "Littleneo (Jerome Mahieux)",
- "version": (0, 16),
+ "version": (0, 17),
"blender": (2, 6, 1),
"location": "File > Import > DirectX (.x)",
"warning": "",
@@ -40,8 +40,14 @@
def execute(self,context) :
'''
-
-
+
+def hide_templates(self,context) :
+ if self.use_templates == False : self.show_templates = False
+
+def not_parented(self,context) :
+ self.parented = False
+ self.use_templates = False
+
class ImportX(bpy.types.Operator, ImportHelper):
'''Load a Direct x File'''
bl_idname = "import_scene.x"
@@ -60,7 +66,7 @@
)
show_templates = BoolProperty(
name="Show x templates",
- description="display templates defined in the .x file",
+ description="display any token structure definition found in the .x file",
default=False,
)
show_geninfo = BoolProperty(
@@ -73,6 +79,7 @@
name="Quick mode",
description="only retrieve mesh basics",
default=False,
+ update=not_parented
)
parented = BoolProperty(
@@ -80,6 +87,13 @@
description="import armatures, empties, rebuild parent-childs relations",
default=True,
)
+
+ use_templates = BoolProperty(
+ name="Use infile x templates",
+ description="parse any token structure definition found in the .x file, use it prior to standard ones",
+ default=False,
+ update=hide_templates
+ )
bone_maxlength = FloatProperty(
name="Bone length",
@@ -92,6 +106,8 @@
chunksize = EnumProperty(
name="Chunksize",
items=(('0', "all", ""),
+ ('16384', "16KB", ""),
+ ('8192', "8KB", ""),
('4096', "4KB", ""),
('2048', "2KB", ""),
('1024', "1KB", ""),
@@ -225,16 +241,15 @@
col = box.column(align=True)
col.label('Import Options :')
col.prop(self, "chunksize")
- col.prop(self, "use_smooth_groups")
- actif = not(self.quickmode)
+ col.prop(self, "use_smooth_groups")
+ col.prop(self, "quickmode")
row = col.row()
- row.enabled = actif
+ row.enabled = not(self.quickmode)
row.prop(self, "parented")
- if self.parented :
- row = col.row()
- row.enabled = actif
- row.prop(self, "bone_maxlength")
- col.prop(self, "quickmode")
+ #if self.parented :
+ row = col.row()
+ row.enabled = self.parented
+ row.prop(self, "bone_maxlength")
# source orientation box
box = layout.box()
@@ -254,8 +269,11 @@
col = box.column(align=True)
col.label('Info / Debug :')
col.prop(self, "show_tree")
- col.prop(self, "show_templates")
col.prop(self, "show_geninfo")
+ col.prop(self, "use_templates")
+ row = col.row()
+ row.enabled = self.use_templates
+ row.prop(self, "show_templates")
#row = layout.row(align=True)
#row.prop(self, "use_ngons")
Modified: contrib/py/scripts/addons/io_directx_bel/bel/uv.py
===================================================================
--- contrib/py/scripts/addons/io_directx_bel/bel/uv.py 2012-01-24 20:56:51 UTC (rev 2947)
+++ contrib/py/scripts/addons/io_directx_bel/bel/uv.py 2012-01-25 03:20:42 UTC (rev 2948)
@@ -4,6 +4,7 @@
def write(me, uvs, matimage = False) :
uvs, nest = bel.nested(uvs)
newuvs = []
+ append = newuvs.append
for uvi, uvlist in enumerate(uvs) :
uv = me.uv_textures.new()
@@ -24,7 +25,7 @@
uv.data[uvfi].uv3 = Vector((uvface[4],uvface[5]))
if len(uvface) == 8 :
uv.data[uvfi].uv4 = Vector((uvface[6],uvface[7]))
- newuvs.append(uv)
+ append(uv)
if nest : return newuvs
else : return newuvs[0]
@@ -35,11 +36,12 @@
# normal default when face has been built
def row(vertices,faces,normals=True) :
uvs = []
+ append = uvs.append
for face in faces :
v0 = vertices[face[0]]
v1 = vertices[face[1]]
v2 = vertices[face[-1]]
- print(v0,v1)
+ #print(v0,v1)
lx = (v1 - v0).length
ly = (v2 - v0).length
# init uv
@@ -52,13 +54,14 @@
else :
x = uvs[-1][0]
y = uvs[-1][1]
- if normals : uvs.append([x,y,x+lx,y,x+lx,y+ly,x,y+ly])
- else : uvs.append([x+lx,y,x,y,x,y+ly,x+lx,y+ly])
+ if normals : append([x,y,x+lx,y,x+lx,y+ly,x,y+ly])
+ else : append([x+lx,y,x,y,x,y+ly,x+lx,y+ly])
return uvs
## convert UV given as verts location to blender format
# eg : [ [v0x,v0y] , [vnx , vny] ... ] -> [ [ v1x,v1y,v0x,v0y,v4x,v4y] ... ]
-# found in directx
+# this format is found in directx files
+'''
def asVertsLocation(verts2d, faces) :
uv = []
for f in faces :
@@ -67,3 +70,12 @@
uvface.extend(verts2d[vi])
uv.append(uvface)
return uv
+'''
+def asVertsLocation(verts2d, idFaces) :
+ coFaces = []
+ uvBlender = []
+ conv0 = coFaces.extend
+ conv1 = uvBlender.extend
+ for f in idFaces : conv0([verts2d[vi] for vi in f])
+ for f in coFaces : conv1(f)
+ return uvBlender
\ No newline at end of file
Modified: contrib/py/scripts/addons/io_directx_bel/import_x.py
===================================================================
--- contrib/py/scripts/addons/io_directx_bel/import_x.py 2012-01-24 20:56:51 UTC (rev 2947)
+++ contrib/py/scripts/addons/io_directx_bel/import_x.py 2012-01-25 03:20:42 UTC (rev 2948)
@@ -62,8 +62,9 @@
show_geninfo=False,
quickmode=False,
parented=False,
+ use_templates=False,
bone_maxlength=1.0,
- chunksize=False,
+ chunksize=2048,
naming_method=0,
use_ngons=True,
use_edges=True,
@@ -214,7 +215,6 @@
trunkated = False
previouslvl = False
while True :
- #for l in data.readlines() :
lines, trunkated = nextFileChunk(data,trunkated)
if lines == None : break
for l in lines :
@@ -248,7 +248,7 @@
if quickmode == False :
## look for templates
- if re.match(r_template,l) :
+ if use_templates and re.match(r_template,l) :
tname = l.split(' ')[1]
templates[tname] = {'pointer' : ptr, 'line' : c}
continue
@@ -307,6 +307,7 @@
if format == 'txt' :
lines = chunk.decode('utf-8', errors='ignore')
#if stream : return lines.replace('\r','').replace('\n','')
+ #lines = [ l + '\n' for l in lines.replace('\r','\n').split('\n') ]
lines = lines.replace('\r','\n').split('\n')
if trunkated : lines[0] = trunkated + lines[0]
if len(lines) == 1 :
@@ -402,10 +403,12 @@
def dXtemplateData(tpl,block,ptr=0) :
#print('dxTPL',block[ptr])
pack = []
+ append = pack.append
+ namespace = locals()
for member in tpl['members'] :
#print(member)
+ datatype = member[0].lower()
dataname = member[-1]
- datatype = member[0].lower()
if datatype == 'array' :
datatype = member[1].lower()
s = dataname.index('[') + 1
@@ -423,8 +426,9 @@
#if len(str(datavalue)) > 50 : dispvalue = str(datavalue[0:25]) + ' [...] ' + str(datavalue[-25:])
#else : dispvalue = str(datavalue)
#print('%s : %s %s'%(dataname,dispvalue,type(datavalue)))
- exec('%s = datavalue'%(dataname))
- pack.append( datavalue )
+ #exec('%s = datavalue'%(dataname))
+ namespace[dataname] = datavalue
+ append( datavalue )
return pack, ptr + 1
def dXdata(block,datatype,length,s=0,eof=';') :
@@ -459,13 +463,14 @@
def dXarray(block, datatype, length, s=0) :
#print('dxARR',block[s])
lst = []
+ append = lst.append
if datatype in reserved_type :
eoi=','
for i in range(length) :
if i+1 == length : eoi = ';'
datavalue, s = dXdata(block,datatype,1,s,eoi)
- lst.append( datavalue )
-
+ append( datavalue )
+
else :
eoi = ';,'
for i in range(length) :
@@ -474,7 +479,7 @@
e = block.index(eoi,s)
#except : print(block,s) ; popo()
datavalue, na = dXdata(block[s:e+1],datatype,1)
- lst.append( datavalue )
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list