[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