[Bf-extensions-cvs] [51446dc] master: X3D Minor updates

Campbell Barton noreply at git.blender.org
Sat Nov 7 16:20:31 CET 2015


Commit: 51446dc2af8aa29ef2342ded6b10774ff626c288
Author: Campbell Barton
Date:   Sun Nov 8 02:12:29 2015 +1100
Branches: master
https://developer.blender.org/rBA51446dc2af8aa29ef2342ded6b10774ff626c288

X3D Minor updates

- Pass context/scene as arguments.
- Avoid try/except on entire geometry loading (instead use dict.get).
- Use keyword-only args for load/save module functions.
- Don't pass the operator as first arg.

===================================================================

M	io_scene_x3d/__init__.py
M	io_scene_x3d/export_x3d.py
M	io_scene_x3d/import_x3d.py

===================================================================

diff --git a/io_scene_x3d/__init__.py b/io_scene_x3d/__init__.py
index 4d2a401..d5c555a 100644
--- a/io_scene_x3d/__init__.py
+++ b/io_scene_x3d/__init__.py
@@ -78,7 +78,7 @@ class ImportX3D(bpy.types.Operator, ImportHelper, IOX3DOrientationHelper):
                                         ).to_4x4()
         keywords["global_matrix"] = global_matrix
 
-        return import_x3d.load(self, context, **keywords)
+        return import_x3d.load(context, **keywords)
 
 
 class ExportX3D(bpy.types.Operator, ExportHelper, IOX3DOrientationHelper):
@@ -156,7 +156,7 @@ class ExportX3D(bpy.types.Operator, ExportHelper, IOX3DOrientationHelper):
                                         ).to_4x4() * Matrix.Scale(self.global_scale, 4)
         keywords["global_matrix"] = global_matrix
 
-        return export_x3d.save(self, context, **keywords)
+        return export_x3d.save(context, **keywords)
 
 
 def menu_func_import(self, context):
diff --git a/io_scene_x3d/export_x3d.py b/io_scene_x3d/export_x3d.py
index e36b81e..819819c 100644
--- a/io_scene_x3d/export_x3d.py
+++ b/io_scene_x3d/export_x3d.py
@@ -1547,7 +1547,9 @@ def gzip_open_utf8(filepath, mode):
     return file
 
 
-def save(operator, context, filepath="",
+def save(context,
+         filepath,
+         *,
          use_selection=True,
          use_mesh_modifiers=False,
          use_triangulate=False,
@@ -1557,7 +1559,7 @@ def save(operator, context, filepath="",
          use_h3d=False,
          global_matrix=None,
          path_mode='AUTO',
-         name_decorations=True,
+         name_decorations=True
          ):
 
     bpy.path.ensure_ext(filepath, '.x3dz' if use_compress else '.x3d')
diff --git a/io_scene_x3d/import_x3d.py b/io_scene_x3d/import_x3d.py
index d2c18dd..8c39fcc 100644
--- a/io_scene_x3d/import_x3d.py
+++ b/io_scene_x3d/import_x3d.py
@@ -2975,9 +2975,11 @@ def appearance_LoadPixelTexture(pixelTexture, ancestry):
 
 # Called from importShape to insert a data object (typically a mesh)
 # into the scene
-def importShape_ProcessObject(vrmlname, bpydata, geom, geom_spec, node,
-                              bpymat, has_alpha, texmtx, ancestry,
-                              global_matrix):
+def importShape_ProcessObject(
+        bpyscene, vrmlname, bpydata, geom, geom_spec, node,
+        bpymat, has_alpha, texmtx, ancestry,
+        global_matrix):
+
     vrmlname += geom_spec
     bpydata.name = vrmlname
 
@@ -3021,7 +3023,7 @@ def importShape_ProcessObject(vrmlname, bpydata, geom, geom_spec, node,
     # bpymesh.transform(getFinalMatrix(node))
     bpyob = node.blendObject = bpy.data.objects.new(vrmlname, bpydata)
     bpyob.matrix_world = getFinalMatrix(node, None, ancestry, global_matrix)
-    bpy.context.scene.objects.link(bpyob).select = True
+    bpyscene.objects.link(bpyob).select = True
 
     if DEBUG:
         bpyob["source_line_no"] = geom.lineno
@@ -3060,10 +3062,11 @@ geometry_importers = {
     'Box': importMesh_Box,
     'Cylinder': importMesh_Cylinder,
     'Cone': importMesh_Cone,
-    'Text': importText}
+    'Text': importText,
+    }
 
 
-def importShape(node, ancestry, global_matrix):
+def importShape(bpyscene, node, ancestry, global_matrix):
     # Under Shape, we can only have Appearance, MetadataXXX and a geometry node
     def isGeometry(spec):
         return spec != "Appearance" and not spec.startswith("Metadata")
@@ -3074,7 +3077,7 @@ def importShape(node, ancestry, global_matrix):
         bpyob = node.blendData = node.blendObject = bpyob.copy()
         # Could transform data, but better the object so we can instance the data
         bpyob.matrix_world = getFinalMatrix(node, None, ancestry, global_matrix)
-        bpy.context.scene.objects.link(bpyob).select = True
+        bpyscene.objects.link(bpyob).select = True
         return
 
     vrmlname = node.getDefName()
@@ -3109,18 +3112,18 @@ def importShape(node, ancestry, global_matrix):
 
     # ccw is handled by every geometry importer separately; some
     # geometries are easier to flip than others
-    try:
-        bpydata = geometry_importers[geom_spec](geom, ancestry, bpyima)
+    geom_fn = geometry_importers.get(geom_spec)
+    if geom_fn is not None:
+        bpydata = geom_fn(geom, ancestry, bpyima)
 
         # There are no geometry importers that can legally return
         # no object.  It's either a bpy object, or an exception
-        importShape_ProcessObject(vrmlname, bpydata, geom, geom_spec,
-                                  node, bpymat, tex_has_alpha, texmtx,
-                                  ancestry, global_matrix)
-    except KeyError:
+        importShape_ProcessObject(
+                bpyscene, vrmlname, bpydata, geom, geom_spec,
+                node, bpymat, tex_has_alpha, texmtx,
+                ancestry, global_matrix)
+    else:
         print('\tImportX3D warning: unsupported type "%s"' % geom_spec)
-    # except Exception as exc:
-    #    print('\tImportX3D error: %s' % exc)
 
 
 # -----------------------------------------------------------------------------------
@@ -3210,7 +3213,7 @@ def importLamp_SpotLight(node, ancestry):
     return bpylamp, mtx
 
 
-def importLamp(node, spec, ancestry, global_matrix):
+def importLamp(bpyscene, node, spec, ancestry, global_matrix):
     if spec == 'PointLight':
         bpylamp, mtx = importLamp_PointLight(node, ancestry)
     elif spec == 'DirectionalLight':
@@ -3222,7 +3225,7 @@ def importLamp(node, spec, ancestry, global_matrix):
         raise ValueError
 
     bpyob = node.blendData = node.blendObject = bpy.data.objects.new("TODO", bpylamp)
-    bpy.context.scene.objects.link(bpyob).select = True
+    bpyscene.objects.link(bpyob).select = True
 
     bpyob.matrix_world = getFinalMatrix(node, mtx, ancestry, global_matrix)
 
@@ -3230,7 +3233,7 @@ def importLamp(node, spec, ancestry, global_matrix):
 # -----------------------------------------------------------------------------------
 
 
-def importViewpoint(node, ancestry, global_matrix):
+def importViewpoint(bpyscene, node, ancestry, global_matrix):
     name = node.getDefName()
     if not name:
         name = 'Viewpoint'
@@ -3248,17 +3251,17 @@ def importViewpoint(node, ancestry, global_matrix):
     mtx = Matrix.Translation(Vector(position)) * translateRotation(orientation)
 
     bpyob = node.blendData = node.blendObject = bpy.data.objects.new(name, bpycam)
-    bpy.context.scene.objects.link(bpyob).select = True
+    bpyscene.objects.link(bpyob).select = True
     bpyob.matrix_world = getFinalMatrix(node, mtx, ancestry, global_matrix)
 
 
-def importTransform(node, ancestry, global_matrix):
+def importTransform(bpyscene, node, ancestry, global_matrix):
     name = node.getDefName()
     if not name:
         name = 'Transform'
 
     bpyob = node.blendData = node.blendObject = bpy.data.objects.new(name, None)
-    bpy.context.scene.objects.link(bpyob).select = True
+    bpyscene.objects.link(bpyob).select = True
 
     bpyob.matrix_world = getFinalMatrix(node, None, ancestry, global_matrix)
 
@@ -3442,21 +3445,24 @@ ROUTE champFly001.bindTime TO vpTs.set_startTime
                 translateTimeSensor(time_node, action, ancestry)
 
 
-def load_web3d(path,
-               PREF_FLAT=False,
-               PREF_CIRCLE_DIV=16,
-               global_matrix=None,
-               HELPER_FUNC=None,
-               ):
+def load_web3d(
+        bpyscene,
+        filepath,
+        *,
+        PREF_FLAT=False,
+        PREF_CIRCLE_DIV=16,
+        global_matrix=None,
+        HELPER_FUNC=None
+        ):
 
     # Used when adding blender primitives
     GLOBALS['CIRCLE_DETAIL'] = PREF_CIRCLE_DIV
 
     #root_node = vrml_parse('/_Cylinder.wrl')
-    if path.lower().endswith('.x3d'):
-        root_node, msg = x3d_parse(path)
+    if filepath.lower().endswith('.x3d'):
+        root_node, msg = x3d_parse(filepath)
     else:
-        root_node, msg = vrml_parse(path)
+        root_node, msg = vrml_parse(filepath)
 
     if not root_node:
         print(msg)
@@ -3484,15 +3490,15 @@ def load_web3d(path,
             # by an external script. - gets first pick
             pass
         if spec == 'Shape':
-            importShape(node, ancestry, global_matrix)
+            importShape(bpyscene, node, ancestry, global_matrix)
         elif spec in {'PointLight', 'DirectionalLight', 'SpotLight'}:
-            importLamp(node, spec, ancestry, global_matrix)
+            importLamp(bpyscene, node, spec, ancestry, global_matrix)
         elif spec == 'Viewpoint':
-            importViewpoint(node, ancestry, global_matrix)
+            importViewpoint(bpyscene, node, ancestry, global_matrix)
         elif spec == 'Transform':
             # Only use transform nodes when we are not importing a flat object hierarchy
             if PREF_FLAT == False:
-                importTransform(node, ancestry, global_matrix)
+                importTransform(bpyscene, node, ancestry, global_matrix)
             '''
         # These are delt with later within importRoute
         elif spec=='PositionInterpolator':
@@ -3517,7 +3523,7 @@ def load_web3d(path,
                 node = defDict[key]
                 if node.blendData is None:  # Add an object if we need one for animation
                     node.blendData = node.blendObject = bpy.data.objects.new('AnimOb', None)  # , name)
-                    bpy.context.scene.objects.link(node.blendObject).select = True
+                    bpyscene.objects.link(node.blendObject).select = True
 
                 if node.blendData.animation_data is None:
                     node.blendData.animation_data_create()
@@ -3555,16 +3561,21 @@ def load_web3d(path,
                 c.parent = parent
 
         # update deps
-        bpy.context.scene.update()
+        bpyscene.update()
         del child_dict
 
 
-def loadWithProfiler(operator, context, filepath="", global_matrix=None):
+def load_with_profiler(
+        context,
+        filepath,
+        *,
+        global_matrix=None
+        ):
     import cProfile
     import pstats
     pro = cProfile.Profile()
-    pro.runctx("load_web3d(filepath,PREF_FLAT=True,"
-               "PREF_CIRCLE_DIV=16,global_matrix=global_matrix,)",
+    pro.runctx("load_web3d(context.scene, filepath, PREF_FLAT=True, 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list