[Bf-extensions-cvs] [fb88c7f8] master: glTF importer: fix bug when joint/bone is a root node of the scene

Julien Duroure noreply at git.blender.org
Tue Jan 22 22:40:19 CET 2019


Commit: fb88c7f8a2697ff8e4a02b1169212da332dc1ddc
Author: Julien Duroure
Date:   Tue Jan 22 22:39:36 2019 +0100
Branches: master
https://developer.blender.org/rBAfb88c7f8a2697ff8e4a02b1169212da332dc1ddc

glTF importer: fix bug when joint/bone is a root node of the scene

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

M	io_scene_gltf2/blender/imp/gltf2_blender_scene.py

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

diff --git a/io_scene_gltf2/blender/imp/gltf2_blender_scene.py b/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
index 902cc290..2d986b0d 100755
--- a/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
+++ b/io_scene_gltf2/blender/imp/gltf2_blender_scene.py
@@ -87,17 +87,41 @@ class BlenderScene():
 
         # Parent root node to rotation object
         if list_nodes is not None:
+            exclude_nodes = []
             for node_idx in list_nodes:
-                bpy.data.objects[gltf.data.nodes[node_idx].blender_object].parent = obj_rotation
+                if gltf.data.nodes[node_idx].is_joint:
+                    # Do not change parent if root node is already parented (can be the case for skinned mesh)
+                    if not bpy.data.objects[gltf.data.nodes[node_idx].blender_armature_name].parent:
+                        bpy.data.objects[gltf.data.nodes[node_idx].blender_armature_name].parent = obj_rotation
+                    else:
+                        exclude_nodes.append(node_idx)
+                else:
+                    # Do not change parent if root node is already parented (can be the case for skinned mesh)
+                    if not bpy.data.objects[gltf.data.nodes[node_idx].blender_object].parent:
+                        bpy.data.objects[gltf.data.nodes[node_idx].blender_object].parent = obj_rotation
+                    else:
+                        exclude_nodes.append(node_idx)
 
             if gltf.animation_object is False:
 
 
+
+
                 for node_idx in list_nodes:
+
+                    if node_idx in exclude_nodes:
+                        continue # for root node that are parented by the process
+                        # for example skinned meshes
+
                     for obj_ in bpy.context.scene.objects:
                         obj_.select_set(False)
-                    bpy.data.objects[gltf.data.nodes[node_idx].blender_object].select_set(True)
-                    bpy.context.view_layer.objects.active = bpy.data.objects[gltf.data.nodes[node_idx].blender_object]
+                    if gltf.data.nodes[node_idx].is_joint:
+                        bpy.data.objects[gltf.data.nodes[node_idx].blender_armature_name].select_set(True)
+                        bpy.context.view_layer.objects.active = bpy.data.objects[gltf.data.nodes[node_idx].blender_armature_name]
+
+                    else:
+                        bpy.data.objects[gltf.data.nodes[node_idx].blender_object].select_set(True)
+                        bpy.context.view_layer.objects.active = bpy.data.objects[gltf.data.nodes[node_idx].blender_object]
 
                     bpy.ops.object.parent_clear(type='CLEAR_KEEP_TRANSFORM')



More information about the Bf-extensions-cvs mailing list