diff --git a/korman/exporter/convert.py b/korman/exporter/convert.py index ffcafe2..100dcb6 100644 --- a/korman/exporter/convert.py +++ b/korman/exporter/convert.py @@ -272,6 +272,11 @@ class Exporter: else: self.report.msg("No material(s) on the ObData, so no drawables", indent=1) + def _export_font_blobj(self, so, bo): + self.animation.convert_object_animations(bo, so) + with utils.temporary_mesh_object(bo) as meshObj: + self._export_mesh_blobj(so, meshObj) + def _export_referenced_node_trees(self): self.report.progress_advance() self.report.progress_range = len(self.want_node_trees) diff --git a/korman/exporter/utils.py b/korman/exporter/utils.py index 9385ecf..87d894b 100644 --- a/korman/exporter/utils.py +++ b/korman/exporter/utils.py @@ -92,3 +92,20 @@ def bmesh_object(name : str): bm.to_mesh(mesh) finally: bm.free() + +@contextmanager +def temporary_mesh_object(source : bpy.types.Object) -> bpy.types.Object: + """Creates a temporary mesh object from a nonmesh object that will only exist for the duration + of the context.""" + assert source.type != "MESH" + + obj = bpy.data.objects.new(source.name, source.to_mesh(bpy.context.scene, True, "RENDER")) + obj.draw_type = "WIRE" + obj.matrix_basis, obj.matrix_world = source.matrix_basis, source.matrix_world + obj.parent = source.parent + + bpy.context.scene.objects.link(obj) + try: + yield obj + finally: + bpy.data.objects.remove(obj)