Blender V4.3
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
9#pragma once
10
11#include <list>
12#include <string>
13// #include <vector>
14
15#include "COLLADASWInputList.h"
16#include "COLLADASWLibraryControllers.h"
17#include "COLLADASWNode.h"
18#include "COLLADASWStreamWriter.h"
19
20#include "DNA_armature_types.h"
22#include "DNA_listBase.h"
23#include "DNA_mesh_types.h"
24#include "DNA_object_types.h"
25#include "DNA_scene_types.h"
26
27#include "InstanceWriter.h"
28#include "TransformWriter.h"
29
30#include "ExportSettings.h"
31
32class SceneExporter;
33
34/* XXX exporter writes wrong data for shared armatures. A separate
35 * controller should be written for each armature-mesh binding how do
36 * we make controller ids then? */
37class ArmatureExporter : public COLLADASW::LibraryControllers,
38 protected TransformWriter,
39 protected InstanceWriter {
40 public:
41 /* XXX exporter writes wrong data for shared armatures. A separate
42 * controller should be written for each armature-mesh binding how do
43 * we make controller ids then? */
44 ArmatureExporter(BlenderContext &blender_context,
45 COLLADASW::StreamWriter *sw,
46 BCExportSettings &export_settings)
47 : COLLADASW::LibraryControllers(sw),
48 blender_context(blender_context),
49 export_settings(export_settings)
50 {
51 }
52
53 void add_bone_collections(Object *ob_arm, COLLADASW::Node &node);
54
55 /* write bone nodes */
56 void add_armature_bones(Object *ob_arm,
57 ViewLayer *view_layer,
58 SceneExporter *se,
59 std::vector<Object *> &child_objects);
60
62
63 private:
64 BlenderContext &blender_context;
65 BCExportSettings &export_settings;
66
67#if 0
68 std::vector<Object *> written_armatures;
69
70 bool already_written(Object *ob_arm);
71
72 void wrote(Object *ob_arm);
73
74 void find_objects_using_armature(Object *ob_arm, std::vector<Object *> &objects, Scene *sce);
75#endif
76
82 void add_bone_node(Bone *bone,
83 Object *ob_arm,
84 SceneExporter *se,
85 std::vector<Object *> &child_objects);
86
87 inline bool can_export(Bone *bone)
88 {
89 return !(export_settings.get_deform_bones_only() && bone->flag & BONE_NO_DEFORM);
90 }
91
92 bool is_export_root(Bone *bone);
93 void add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW::Node &node);
94
95 std::string get_controller_id(Object *ob_arm, Object *ob);
96
97 void write_bone_URLs(COLLADASW::InstanceController &ins, Object *ob_arm, Bone *bone);
98};
@ BONE_NO_DEFORM
These structs are the foundation for all linked lists in the library system.
Object is a sort of wrapper for general info.
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)