[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4718] trunk/py/scripts/addons/ io_import_scene_mhx.py: MHX importer.

Thomas Larsson thomas_larsson_01 at hotmail.com
Sat Aug 31 17:08:46 CEST 2013


Revision: 4718
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4718
Author:   thomasl
Date:     2013-08-31 15:08:45 +0000 (Sat, 31 Aug 2013)
Log Message:
-----------
MHX importer. All exec statements removed.

Modified Paths:
--------------
    trunk/py/scripts/addons/io_import_scene_mhx.py

Modified: trunk/py/scripts/addons/io_import_scene_mhx.py
===================================================================
--- trunk/py/scripts/addons/io_import_scene_mhx.py	2013-08-31 13:35:28 UTC (rev 4717)
+++ trunk/py/scripts/addons/io_import_scene_mhx.py	2013-08-31 15:08:45 UTC (rev 4718)
@@ -38,7 +38,7 @@
 bl_info = {
     'name': 'Import: MakeHuman (.mhx)',
     'author': 'Thomas Larsson',
-    'version': (1, 16, 3),
+    'version': (1, 16, 4),
     "blender": (2, 68, 0),
     'location': "File > Import > MakeHuman (.mhx)",
     'description': 'Import files in the MakeHuman eXchange format (.mhx)',
@@ -92,8 +92,6 @@
 theMessage = ""
 theMhxFile = ""
 
-todo = []
-
 #
 #    toggle flags
 #
@@ -203,7 +201,7 @@
 #
 
 def readMhxFile(filePath):
-    global todo, nErrors, theScale, theArmature, defaultScale, One
+    global nErrors, theScale, theArmature, defaultScale, One
     global toggle, warnedVersion, theMessage, alpha7, theDir
 
     defaultScale = theScale
@@ -295,16 +293,6 @@
     print( "Parsing" )
     parse(tokens)
 
-    for (expr, glbals, lcals) in todo:
-        try:
-            print("Doing %s" % expr)
-            exec(expr, glbals, lcals)
-        except:
-            msg = "Failed: %s\n" % expr
-            print( msg )
-            nErrors += 1
-            #MyError(msg)
-
     scn.objects.active = theArmature
     bpy.ops.object.mode_set(mode='OBJECT')
     bpy.ops.object.select_all(action='DESELECT')
@@ -320,10 +308,10 @@
     return
 
 #
-#    getObject(name, var, glbals, lcals):
+#    getObject(name, var):
 #
 
-def getObject(name, var, glbals, lcals):
+def getObject(name, var):
     try:
         ob = loadedData['Object'][name]
     except:
@@ -479,8 +467,6 @@
 #
 
 def parseDefaultType(typ, args, tokens):
-    global todo
-
     name = args[0]
     data = None
     expr = "bpy.data.%s.new('%s')" % (Plural[typ], name)
@@ -492,7 +478,7 @@
         return None
 
     for (key, val, sub) in tokens:
-        defaultKey(key, val, sub, 'data', [], globals(), locals())
+        defaultKey(key, val, sub, data)
     return data
 
 #
@@ -537,7 +523,7 @@
         if key == 'FCurve':
             fcu = parseActionFCurve(act, ob, val, sub)
         else:
-            defaultKey(key, val, sub, 'act', [], globals(), locals())
+            defaultKey(key, val, sub, act)
     ob.animation_data.action = None
     bpy.ops.object.mode_set(mode='OBJECT')
     return act
@@ -625,7 +611,7 @@
                 #print(tokens)
                 #MyError("kp", fcu, n, len(fcu.keyframe_points), val)
         else:
-            defaultKey(key, val, sub, 'fcu', [], globals(), locals())
+            defaultKey(key, val, sub, fcu)
     return fcu
 
 def parseKeyFramePoint(pt, args, tokens):
@@ -651,7 +637,7 @@
         if key == 'FCurve':
             fcu = parseAnimDataFCurve(adata, rna, val, sub)
         else:
-            defaultKey(key, val, sub, 'adata', [], globals(), locals())
+            defaultKey(key, val, sub, adata)
     return adata
 
 def parseAnimDataFCurve(adata, rna, args, tokens):
@@ -673,7 +659,7 @@
             pt = parseKeyFramePoint(pt, val, sub)
             n += 1
         else:
-            defaultKey(key, val, sub, 'fcu', [], globals(), locals())
+            defaultKey(key, val, sub, fcu)
     return fcu
 
 """
@@ -704,7 +690,7 @@
         if key == 'DriverVariable':
             var = parseDriverVariable(drv, rna, val, sub)
         else:
-            defaultKey(key, val, sub, 'drv', [], globals(), locals())
+            defaultKey(key, val, sub, drv)
     return fcu
 
 def parseDriverVariable(drv, rna, args, tokens):
@@ -717,14 +703,14 @@
             parseDriverTarget(var, nTarget, rna, val, sub)
             nTarget += 1
         else:
-            defaultKey(key, val, sub, 'var', [], globals(), locals())
+            defaultKey(key, val, sub, var)
     return var
 
 def parseFModifier(fcu, args, tokens):
     fmod = fcu.modifiers.new(args[0])
     #fmod = fcu.modifiers[0]
     for (key, val, sub) in tokens:
-        defaultKey(key, val, sub, 'fmod', [], globals(), locals())
+        defaultKey(key, val, sub, fmod)
     return fmod
 
 """
@@ -749,7 +735,7 @@
             else:
                 targ.data_path = propNames(val)[1]
         else:
-            defaultKey(key, val, sub, 'targ', [], globals(), locals())
+            defaultKey(key, val, sub, targ)
     return targ
 
 
@@ -760,7 +746,6 @@
 #
 
 def parseMaterial(args, tokens):
-    global todo
     name = args[0]
     mat = bpy.data.materials.new(name)
     if mat is None:
@@ -786,12 +771,11 @@
             parseAnimationData(mat, val, sub)
         else:
             exclude = ['specular_intensity', 'tangent_shading']
-            defaultKey(key, val, sub, 'mat', [], globals(), locals())
+            defaultKey(key, val, sub, mat)
 
     return mat
 
 def parseMTex(mat, args, tokens):
-    global todo
     index = int(args[0])
     texname = args[1]
     texco = args[2]
@@ -802,12 +786,11 @@
     mtex.texture = tex
 
     for (key, val, sub) in tokens:
-        defaultKey(key, val, sub, "mtex", [], globals(), locals())
+        defaultKey(key, val, sub, mtex)
 
     return mtex
 
 def parseTexture(args, tokens):
-    global todo
     if verbosity > 2:
         print( "Parsing texture %s" % args )
     name = args[0]
@@ -828,35 +811,32 @@
             tex.use_nodes = True
             parseNodeTree(tex.node_tree, val, sub)
         else:
-            defaultKey(key, val,  sub, "tex", ['use_nodes', 'use_textures', 'contrast', 'use_alpha'], globals(), locals())
+            defaultKey(key, val, sub, tex, ['use_nodes', 'use_textures', 'contrast', 'use_alpha'])
 
     return tex
 
 def parseRamp(data, args, tokens):
-    nvar = "data.%s" % args[0]
-    use = "data.use_%s = True" % args[0]
-    exec(use)
-    ramp = eval(nvar)
+    setattr(data, "use_%s" % args[0], True)
+    ramp = getattr(data, args[0])
     elts = ramp.elements
     n = 0
     for (key, val, sub) in tokens:
-        # print("Ramp", key, val)
         if key == 'Element':
             elts[n].color = eval(val[0])
             elts[n].position = eval(val[1])
             n += 1
         else:
-            defaultKey(key, val,  sub, "tex", ['use_nodes', 'use_textures', 'contrast'], globals(), locals())
+            defaultKey(key, val, sub, tex, ['use_nodes', 'use_textures', 'contrast'])
 
 def parseSSS(mat, args, tokens):
     sss = mat.subsurface_scattering
     for (key, val, sub) in tokens:
-        defaultKey(key, val, sub, "sss", [], globals(), locals())
+        defaultKey(key, val, sub, sss)
 
 def parseStrand(mat, args, tokens):
     strand = mat.strand
     for (key, val, sub) in tokens:
-        defaultKey(key, val, sub, "strand", [], globals(), locals())
+        defaultKey(key, val, sub, strand)
 
 #
 #    parseNodeTree(tree, args, tokens):
@@ -873,7 +853,7 @@
         if key == 'Node':
             parseNodes(tree.nodes, val, sub)
         else:
-            defaultKey(key, val, sub, "tree", [], globals(), locals())
+            defaultKey(key, val, sub, tree)
 
 def parseNodes(nodes, args, tokens):
     print("Nodes", nodes, args)
@@ -885,7 +865,7 @@
         elif key == 'Outputs':
             parseSocket(node.outputs, val, sub)
         else:
-            defaultKey(key, val, sub, "node", [], globals(), locals())
+            defaultKey(key, val, sub, node)
 
 def parseNode(node, args, tokens):
     print("Node", node, args)
@@ -897,7 +877,7 @@
         elif key == 'Outputs':
             parseSocket(node.outputs, val, sub)
         else:
-            defaultKey(key, val, sub, "node", [], globals(), locals())
+            defaultKey(key, val, sub, node)
 
 def parseSocket(socket, args, tokens):
     print("Socket", socket, args)
@@ -906,7 +886,7 @@
         if key == 'Node':
             parseNode(tree.nodes, val, sub)
         else:
-            defaultKey(key, val, sub, "tree", [], globals(), locals())
+            defaultKey(key, val, sub, tree)
 
 
 
@@ -932,7 +912,6 @@
 
 
 def parseImage(args, tokens):
-    global todo
     imgName = args[0]
     img = None
     for (key, val, sub) in tokens:
@@ -945,7 +924,7 @@
                 return None
             img.name = imgName
         else:
-            defaultKey(key, val,  sub, "img", ['depth', 'dirty', 'has_data', 'size', 'type', 'use_premultiply'], globals(), locals())
+            defaultKey(key, val, sub, img, ['depth', 'dirty', 'has_data', 'size', 'type', 'use_premultiply'])
     print ("Image %s" % img )
     loadedData['Image'][imgName] = img
     return img
@@ -997,7 +976,7 @@
         elif key == 'FieldSettings':
             parseDefault(ob.field, sub, {}, [])
         else:
-            defaultKey(key, val, sub, "ob", ['type', 'data'], globals(), locals())
+            defaultKey(key, val, sub, ob, ['type', 'data'])
 
     if bpy.context.object == ob:
         if ob.type == 'MESH':
@@ -1061,7 +1040,7 @@
             else:
                 MyError("Unknown hook %s" % val)
         else:
-            defaultKey(key, val, sub, 'mod', [], globals(), locals())
+            defaultKey(key, val, sub, mod)
     return mod
 
 def hookAssignNth(mod, n, select, points):
@@ -1106,7 +1085,7 @@
         if key == 'Particles':
             parseParticles(psys, val, sub)
         else:
-            defaultKey(key, val, sub, 'psys', [], globals(), locals())
+            defaultKey(key, val, sub, psys)
     return psys
 
 def parseParticles(psys, args, tokens):
@@ -1119,7 +1098,7 @@
             n += 1
         else:
             for par in particles:
-                defaultKey(key, val, sub, 'par', [], globals(), locals())
+                defaultKey(key, val, sub, par)
     bpy.ops.particle.particle_edit_toggle()
     return particles
 
@@ -1153,7 +1132,7 @@
 #
 
 def parseMesh (args, tokens):
-    global todo, BMeshAware
+    global BMeshAware
     if verbosity > 2:
         print( "Parsing mesh %s" % args )
 
@@ -1214,7 +1193,7 @@
             if mat:
                 me.materials.append(mat)
         else:
-            defaultKey(key, val,  sub, "me", [], globals(), locals())
+            defaultKey(key, val, sub, me)
 
     for (key, val, sub) in tokens:
         if key == 'Faces':
@@ -1333,7 +1312,7 @@
         if key == 'Data':
             parseUvTexDataBMesh(val, sub, uvloop.data)
         else:
-            defaultKey(key, val,  sub, "uvtex", [], globals(), locals())
+            defaultKey(key, val, sub, uvtex)
     return
 
 def parseUvTexDataBMesh(args, tokens, data):
@@ -1359,7 +1338,7 @@
         if key == 'Data':

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list