From 47ea656bdd61e5d19f577b1155789e443e26e3e3 Mon Sep 17 00:00:00 2001 From: Julien Duroure Date: Tue, 21 Jul 2020 20:28:43 +0200 Subject: glTF exporter: export curve/surface/text objects as meshes Thanks scurest! --- io_scene_gltf2/__init__.py | 2 +- .../blender/exp/gltf2_blender_gather_nodes.py | 46 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/io_scene_gltf2/__init__.py b/io_scene_gltf2/__init__.py index 02fc114f..92d828bb 100755 --- a/io_scene_gltf2/__init__.py +++ b/io_scene_gltf2/__init__.py @@ -15,7 +15,7 @@ bl_info = { 'name': 'glTF 2.0 format', 'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors', - "version": (1, 3, 37), + "version": (1, 3, 38), 'blender': (2, 90, 0), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py index 83984c2b..b2ca5be5 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_nodes.py @@ -248,6 +248,9 @@ def __gather_matrix(blender_object, export_settings): def __gather_mesh(blender_object, library, export_settings): + if blender_object.type in ['CURVE', 'SURFACE', 'FONT']: + return __gather_mesh_from_nonmesh(blender_object, library, export_settings) + if blender_object.type != "MESH": return None @@ -338,6 +341,49 @@ def __gather_mesh(blender_object, library, export_settings): return result +def __gather_mesh_from_nonmesh(blender_object, library, export_settings): + """Handles curves, surfaces, text, etc.""" + needs_to_mesh_clear = False + try: + # Convert to a mesh + try: + if export_settings[gltf2_blender_export_keys.APPLY]: + depsgraph = bpy.context.evaluated_depsgraph_get() + blender_mesh_owner = blender_object.evaluated_get(depsgraph) + blender_mesh = blender_mesh_owner.to_mesh(preserve_all_data_layers=True, depsgraph=depsgraph) + # TODO: do we need preserve_all_data_layers? + + else: + blender_mesh_owner = blender_object + blender_mesh = blender_mesh_owner.to_mesh() + + except Exception: + return None + + needs_to_mesh_clear = True + + skip_filter = True + material_names = tuple([ms.material.name for ms in blender_object.material_slots if ms.material is not None]) + vertex_groups = None + modifiers = None + blender_object_for_skined_data = None + + result = gltf2_blender_gather_mesh.gather_mesh(blender_mesh, + library, + blender_object_for_skined_data, + vertex_groups, + modifiers, + skip_filter, + material_names, + export_settings) + + finally: + if needs_to_mesh_clear: + blender_mesh_owner.to_mesh_clear() + + return result + + def __gather_name(blender_object, export_settings): return blender_object.name -- cgit v1.2.3