Blender V4.5
DocumentImporter.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 "COLLADAFWController.h"
12#include "COLLADAFWEffect.h"
13#include "COLLADAFWEffectCommon.h"
14#include "COLLADAFWIWriter.h"
15#include "COLLADAFWImage.h"
16#include "COLLADAFWMaterial.h"
17
18#include "AnimationImporter.h"
19#include "ArmatureImporter.h"
20#include "ImportSettings.h"
21#include "MeshImporter.h"
22
23struct bContext;
24
26class DocumentImporter : COLLADAFW::IWriter {
27 public:
30 Fetching_Scene_data, /* First pass to collect all data except controller */
31 Fetching_Controller_data, /* Second pass to collect controller data */
32 };
33
34 DocumentImporter(bContext *C, const ImportSettings *import_settings);
35
37 ~DocumentImporter() override;
38
40 bool import();
41
43 Object *create_camera_object(COLLADAFW::InstanceCamera *, Scene *);
44 Object *create_light_object(COLLADAFW::InstanceLight *, Scene *);
45 Object *create_instance_node(Object *, COLLADAFW::Node *, COLLADAFW::Node *, Scene *, bool);
50 void create_constraints(ExtraTags *et, Object *ob);
51 std::vector<Object *> *write_node(COLLADAFW::Node *, COLLADAFW::Node *, Scene *, Object *, bool);
52 void write_profile_COMMON(COLLADAFW::EffectCommon *, Material *);
53
54 void translate_anim_recursive(COLLADAFW::Node *, COLLADAFW::Node *, Object *);
55
61 void cancel(const COLLADAFW::String &errorMessage) override;
62
64 void start() override;
65
70 void finish() override;
71
76 bool writeGlobalAsset(const COLLADAFW::FileInfo * /*asset*/) override;
81 std::string get_import_version(const COLLADAFW::FileInfo *asset);
82
87 bool writeScene(const COLLADAFW::Scene * /*scene*/) override;
88
93 bool writeVisualScene(const COLLADAFW::VisualScene * /*visualScene*/) override;
94
100 bool writeLibraryNodes(const COLLADAFW::LibraryNodes * /*libraryNodes*/) override;
101
105 bool writeAnimation(const COLLADAFW::Animation * /*animation*/) override;
106
110 bool writeAnimationList(const COLLADAFW::AnimationList * /*animationList*/) override;
111
112#if WITH_OPENCOLLADA_ANIMATION_CLIP
113 /* Please enable this when building with Collada 1.6.65 or newer (also in DocumentImporter.cpp)
114 */
115 bool writeAnimationClip(const COLLADAFW::AnimationClip *animationClip) override;
116#endif
117
122 bool writeGeometry(const COLLADAFW::Geometry * /*geometry*/) override;
123
128 bool writeMaterial(const COLLADAFW::Material * /*material*/) override;
129
134 bool writeEffect(const COLLADAFW::Effect * /*effect*/) override;
135
140 bool writeCamera(const COLLADAFW::Camera * /*camera*/) override;
141
146 bool writeImage(const COLLADAFW::Image * /*image*/) override;
147
152 bool writeLight(const COLLADAFW::Light * /*light*/) override;
153
159 const COLLADAFW::SkinControllerData * /*skinControllerData*/) override;
160
162 bool writeController(const COLLADAFW::Controller * /*controller*/) override;
163
164 bool writeFormulas(const COLLADAFW::Formulas * /*formulas*/) override;
165
166 bool writeKinematicsScene(const COLLADAFW::KinematicsScene * /*kinematicsScene*/) override;
167
169 bool addExtraTags(const COLLADAFW::UniqueId &uid, ExtraTags *extra_tags);
171 ExtraTags *getExtraTags(const COLLADAFW::UniqueId &uid);
172
173 bool is_armature(COLLADAFW::Node *node);
174
175 private:
176 const ImportSettings *import_settings;
177
179 ImportStage mImportStage;
180
181 bContext *mContext;
182 ViewLayer *view_layer;
183
184 UnitConverter unit_converter;
185 ArmatureImporter armature_importer;
186 MeshImporter mesh_importer;
187 AnimationImporter anim_importer;
188
190 using TagsMap = std::map<std::string, ExtraTags *>;
192 TagsMap uid_tags_map;
193
194 UidImageMap uid_image_map;
195 std::map<COLLADAFW::UniqueId, Material *> uid_material_map;
196 std::map<COLLADAFW::UniqueId, Material *> uid_effect_map;
197 std::map<COLLADAFW::UniqueId, Camera *> uid_camera_map;
198 std::map<COLLADAFW::UniqueId, Light *> uid_light_map;
199 std::map<Material *, TexIndexTextureArrayMap> material_texture_mapping_map;
200 std::multimap<COLLADAFW::UniqueId, Object *> object_map;
201 std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> node_map;
202 std::vector<const COLLADAFW::VisualScene *> vscenes;
203 std::vector<Object *> libnode_ob;
204
205 std::map<COLLADAFW::UniqueId, COLLADAFW::Node *>
206 root_map; /* find root joint by child joint uid, for bone tree evaluation during resampling
207 */
208 std::map<COLLADAFW::UniqueId, const COLLADAFW::Object *> FW_object_map;
209
210 std::string import_from_version;
211
212 void report_unknown_reference(const COLLADAFW::Node &node, const std::string object_type);
213};
#define C
Definition RandGen.cpp:29
bool writeScene(const COLLADAFW::Scene *) override
void write_profile_COMMON(COLLADAFW::EffectCommon *, Material *)
std::vector< Object * > * write_node(COLLADAFW::Node *, COLLADAFW::Node *, Scene *, Object *, bool)
std::string get_import_version(const COLLADAFW::FileInfo *asset)
bool addExtraTags(const COLLADAFW::UniqueId &uid, ExtraTags *extra_tags)
Object * create_light_object(COLLADAFW::InstanceLight *, Scene *)
bool writeVisualScene(const COLLADAFW::VisualScene *) override
bool writeSkinControllerData(const COLLADAFW::SkinControllerData *) override
bool writeImage(const COLLADAFW::Image *) override
bool writeGlobalAsset(const COLLADAFW::FileInfo *) override
~DocumentImporter() override
bool writeMaterial(const COLLADAFW::Material *) override
void finish() override
void translate_anim_recursive(COLLADAFW::Node *, COLLADAFW::Node *, Object *)
void cancel(const COLLADAFW::String &errorMessage) override
bool writeAnimationList(const COLLADAFW::AnimationList *) override
Object * create_instance_node(Object *, COLLADAFW::Node *, COLLADAFW::Node *, Scene *, bool)
bool writeLight(const COLLADAFW::Light *) override
bool writeGeometry(const COLLADAFW::Geometry *) override
bool writeLibraryNodes(const COLLADAFW::LibraryNodes *) override
bool writeController(const COLLADAFW::Controller *) override
bool writeKinematicsScene(const COLLADAFW::KinematicsScene *) override
bool writeCamera(const COLLADAFW::Camera *) override
void create_constraints(ExtraTags *et, Object *ob)
DocumentImporter(bContext *C, const ImportSettings *import_settings)
ExtraTags * getExtraTags(const COLLADAFW::UniqueId &uid)
void start() override
bool writeEffect(const COLLADAFW::Effect *) override
Object * create_camera_object(COLLADAFW::InstanceCamera *, Scene *)
bool writeFormulas(const COLLADAFW::Formulas *) override
bool is_armature(COLLADAFW::Node *node)
bool writeAnimation(const COLLADAFW::Animation *) override
Class for saving <extra> tags for a specific UniqueId.
Definition ExtraTags.h:17
std::map< COLLADAFW::UniqueId, Image * > UidImageMap