Blender V4.5
ArmatureExporter.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include <string>
12
13#include <COLLADASWInputList.h>
14#include <COLLADASWInstanceController.h>
15#include <COLLADASWLibraryControllers.h>
16#include <COLLADASWNode.h>
17#include <COLLADASWStreamWriter.h>
18
19#include "DNA_armature_types.h"
20#include "DNA_object_types.h"
21
22#include "InstanceWriter.h"
23#include "TransformWriter.h"
24
25#include "ExportSettings.h"
26
27class SceneExporter;
28
29/* XXX exporter writes wrong data for shared armatures. A separate
30 * controller should be written for each armature-mesh binding how do
31 * we make controller ids then? */
32class ArmatureExporter : public COLLADASW::LibraryControllers,
33 protected TransformWriter,
34 protected InstanceWriter {
35 public:
36 /* XXX exporter writes wrong data for shared armatures. A separate
37 * controller should be written for each armature-mesh binding how do
38 * we make controller ids then? */
40 COLLADASW::StreamWriter *sw,
41 BCExportSettings &export_settings)
42 : COLLADASW::LibraryControllers(sw),
43 blender_context(blender_context),
44 export_settings(export_settings)
45 {
46 }
47
48 void add_bone_collections(Object *ob_arm, COLLADASW::Node &node);
49
50 /* write bone nodes */
51 void add_armature_bones(Object *ob_arm,
52 ViewLayer *view_layer,
53 SceneExporter *se,
54 std::vector<Object *> &child_objects);
55
57
58 private:
59 BlenderContext &blender_context;
60 BCExportSettings &export_settings;
61
62#if 0
63 std::vector<Object *> written_armatures;
64
65 bool already_written(Object *ob_arm);
66
67 void wrote(Object *ob_arm);
68
69 void find_objects_using_armature(Object *ob_arm, std::vector<Object *> &objects, Scene *sce);
70#endif
71
77 void add_bone_node(Bone *bone,
78 Object *ob_arm,
79 SceneExporter *se,
80 std::vector<Object *> &child_objects);
81
82 bool can_export(Bone *bone)
83 {
84 return !(export_settings.get_deform_bones_only() && bone->flag & BONE_NO_DEFORM);
85 }
86
87 bool is_export_root(Bone *bone);
88 void add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW::Node &node);
89
90 std::string get_controller_id(Object *ob_arm, Object *ob);
91
92 void write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone);
93};
struct Bone Bone
@ BONE_NO_DEFORM
Object is a sort of wrapper for general info.
struct Object Object
ArmatureExporter(BlenderContext &blender_context, COLLADASW::StreamWriter *sw, BCExportSettings &export_settings)
void add_bone_collections(Object *ob_arm, COLLADASW::Node &node)
bool add_instance_controller(Object *ob)
void add_armature_bones(Object *ob_arm, ViewLayer *view_layer, SceneExporter *se, std::vector< Object * > &child_objects)