# Copyright 2018 The glTF-Blender-IO authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import bpy from io_scene_gltf2.io.com import gltf2_io from io_scene_gltf2.blender.exp import gltf2_blender_gather_nodes from io_scene_gltf2.blender.exp import gltf2_blender_gather_animations from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached from io_scene_gltf2.blender.exp import gltf2_blender_generate_extras from io_scene_gltf2.blender.exp import gltf2_blender_export_keys def gather_gltf2(export_settings): """ Gather glTF properties from the current state of blender. :return: list of scene graphs to be added to the glTF export """ scenes = [] animations = [] # unfortunately animations in gltf2 are just as 'root' as scenes. for blender_scene in bpy.data.scenes: scenes.append(__gather_scene(blender_scene, export_settings)) animations += __gather_animations(blender_scene, export_settings) return scenes, animations @cached def __gather_scene(blender_scene, export_settings): scene = gltf2_io.Scene( extensions=None, extras=__gather_extras(blender_scene, export_settings), name=blender_scene.name, nodes=[] ) for blender_object in blender_scene.objects: if blender_object.parent is None: node = gltf2_blender_gather_nodes.gather_node(blender_object, export_settings) if node is not None: scene.nodes.append(node) return scene def __gather_animations(blender_scene, export_settings): animations = [] for blender_object in blender_scene.objects: animations += gltf2_blender_gather_animations.gather_animations(blender_object, export_settings) return animations def __gather_extras(blender_object, export_settings): if export_settings[gltf2_blender_export_keys.EXTRAS]: return gltf2_blender_generate_extras.generate_extras(blender_object) return None