[Bf-extensions-cvs] [a646de64] blender2.8: FBX IO: fix wrong usage of COW data in exporter in dupli instances case.

Bastien Montagne noreply at git.blender.org
Tue Oct 2 16:31:15 CEST 2018


Commit: a646de64a5e58e53a96be21ce2d7c289f254bb03
Author: Bastien Montagne
Date:   Tue Oct 2 16:29:41 2018 +0200
Branches: blender2.8
https://developer.blender.org/rBAa646de64a5e58e53a96be21ce2d7c289f254bb03

FBX IO: fix wrong usage of COW data in exporter in dupli instances case.

That happened to work because our FBX object wrappers tend to get
created frist with real data-blocks (and the key of a real and COW
datablock would be the same)... But that definitively wasn't healthy
behavior!

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

M	io_scene_fbx/__init__.py
M	io_scene_fbx/fbx_utils.py

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

diff --git a/io_scene_fbx/__init__.py b/io_scene_fbx/__init__.py
index 92817fa2..680f1f5c 100644
--- a/io_scene_fbx/__init__.py
+++ b/io_scene_fbx/__init__.py
@@ -21,7 +21,7 @@
 bl_info = {
     "name": "FBX format",
     "author": "Campbell Barton, Bastien Montagne, Jens Restemeier",
-    "version": (4, 10, 3),
+    "version": (4, 10, 4),
     "blender": (2, 80, 0),
     "location": "File > Import-Export",
     "description": "FBX IO meshes, UV's, vertex colors, materials, textures, cameras, lamps and actions",
diff --git a/io_scene_fbx/fbx_utils.py b/io_scene_fbx/fbx_utils.py
index 8142f000..bbf4ac74 100644
--- a/io_scene_fbx/fbx_utils.py
+++ b/io_scene_fbx/fbx_utils.py
@@ -872,10 +872,11 @@ class MetaObjectWrapper(type):
             key = get_blenderID_key(bdata)
         elif isinstance(bdata, DepsgraphObjectInstance):
             if bdata.is_instance:
-                key = "|".join((get_blenderID_key((bdata.parent, bdata.instance_object)), cls._get_dup_num_id(bdata)))
+                key = "|".join((get_blenderID_key((bdata.parent.original, bdata.instance_object.original)),
+                                cls._get_dup_num_id(bdata)))
                 dup_mat = bdata.matrix_world.copy()
             else:
-                key = get_blenderID_key(bdata.object)
+                key = get_blenderID_key(bdata.object.original)
         else:  # isinstance(bdata, (Bone, PoseBone)):
             if isinstance(bdata, PoseBone):
                 bdata = armature.data.bones[bdata.name]
@@ -948,14 +949,14 @@ class ObjectWrapper(metaclass=MetaObjectWrapper):
             if bdata.is_instance:
                 # Note that dupli instance matrix is set by meta-class initialization.
                 self._tag = 'DP'
-                self.name = "|".join((get_blenderID_name((bdata.parent, bdata.instance_object)),
+                self.name = "|".join((get_blenderID_name((bdata.parent.original, bdata.instance_object.original)),
                                       "Dupli", self._get_dup_num_id(bdata)))
-                self.bdata = bdata.instance_object
-                self._ref = bdata.parent
+                self.bdata = bdata.instance_object.original
+                self._ref = bdata.parent.original
             else:
                 self._tag = 'OB'
                 self.name = get_blenderID_name(bdata)
-                self.bdata = bdata.object
+                self.bdata = bdata.object.original
                 self._ref = None
         else:  # isinstance(bdata, (Bone, PoseBone)):
             if isinstance(bdata, PoseBone):
@@ -1191,7 +1192,8 @@ class ObjectWrapper(metaclass=MetaObjectWrapper):
     # #### Duplis...
     def dupli_list_gen(self, depsgraph):
         if self._tag == 'OB' and self.bdata.is_duplicator:
-            return (ObjectWrapper(dup) for dup in depsgraph.object_instances if dup.parent and ObjectWrapper(dup.parent) == self)
+            return (ObjectWrapper(dup) for dup in depsgraph.object_instances
+                                       if dup.parent and ObjectWrapper(dup.parent.original) == self)
         return ()



More information about the Bf-extensions-cvs mailing list