Blender V4.3
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
9#pragma once
10
11#include "COLLADAFWColor.h"
12#include "COLLADAFWController.h"
13#include "COLLADAFWEffect.h"
14#include "COLLADAFWEffectCommon.h"
15#include "COLLADAFWIWriter.h"
16#include "COLLADAFWImage.h"
17#include "COLLADAFWInstanceGeometry.h"
18#include "COLLADAFWMaterial.h"
19#include "COLLADAFWMorphController.h"
20#include "COLLADAFWSkinController.h"
21
22#include "BKE_constraint.h"
23#include "BKE_object.hh"
24
25#include "AnimationImporter.h"
26#include "ArmatureImporter.h"
27#include "ControllerExporter.h"
28#include "ImportSettings.h"
29#include "MeshImporter.h"
30#include "TransformReader.h"
31
32struct bContext;
33
35class DocumentImporter : COLLADAFW::IWriter {
36 public:
39 Fetching_Scene_data, /* First pass to collect all data except controller */
40 Fetching_Controller_data, /* Second pass to collect controller data */
41 };
43 DocumentImporter(bContext *C, const ImportSettings *import_settings);
44
47
49 bool import();
50
52 Object *create_camera_object(COLLADAFW::InstanceCamera *, Scene *);
53 Object *create_light_object(COLLADAFW::InstanceLight *, Scene *);
54 Object *create_instance_node(Object *, COLLADAFW::Node *, COLLADAFW::Node *, Scene *, bool);
59 void create_constraints(ExtraTags *et, Object *ob);
60 std::vector<Object *> *write_node(COLLADAFW::Node *, COLLADAFW::Node *, Scene *, Object *, bool);
61 void write_profile_COMMON(COLLADAFW::EffectCommon *, Material *);
62
63 void translate_anim_recursive(COLLADAFW::Node *, COLLADAFW::Node *, Object *);
64
70 void cancel(const COLLADAFW::String &errorMessage);
71
73 void start();
74
79 void finish();
80
85 bool writeGlobalAsset(const COLLADAFW::FileInfo *);
90 std::string get_import_version(const COLLADAFW::FileInfo *asset);
91
96 bool writeScene(const COLLADAFW::Scene *);
97
102 bool writeVisualScene(const COLLADAFW::VisualScene *);
103
109 bool writeLibraryNodes(const COLLADAFW::LibraryNodes *);
110
114 bool writeAnimation(const COLLADAFW::Animation *);
115
119 bool writeAnimationList(const COLLADAFW::AnimationList *);
120
121#if WITH_OPENCOLLADA_ANIMATION_CLIP
122 /* Please enable this when building with Collada 1.6.65 or newer (also in DocumentImporter.cpp)
123 */
124 bool writeAnimationClip(const COLLADAFW::AnimationClip *animationClip);
125#endif
126
131 bool writeGeometry(const COLLADAFW::Geometry *);
132
137 bool writeMaterial(const COLLADAFW::Material *);
138
143 bool writeEffect(const COLLADAFW::Effect *);
144
149 bool writeCamera(const COLLADAFW::Camera *);
150
155 bool writeImage(const COLLADAFW::Image *);
156
161 bool writeLight(const COLLADAFW::Light *);
162
167 bool writeSkinControllerData(const COLLADAFW::SkinControllerData *);
168
170 bool writeController(const COLLADAFW::Controller *);
171
172 bool writeFormulas(const COLLADAFW::Formulas *);
173
174 bool writeKinematicsScene(const COLLADAFW::KinematicsScene *);
175
177 bool addExtraTags(const COLLADAFW::UniqueId &uid, ExtraTags *extra_tags);
179 ExtraTags *getExtraTags(const COLLADAFW::UniqueId &uid);
180
181 bool is_armature(COLLADAFW::Node *node);
182
183 private:
184 const ImportSettings *import_settings;
185
187 ImportStage mImportStage;
188
189 bContext *mContext;
190 ViewLayer *view_layer;
191
192 UnitConverter unit_converter;
193 ArmatureImporter armature_importer;
194 MeshImporter mesh_importer;
195 AnimationImporter anim_importer;
196
198 typedef std::map<std::string, ExtraTags *> TagsMap;
200 TagsMap uid_tags_map;
201
202 UidImageMap uid_image_map;
203 std::map<COLLADAFW::UniqueId, Material *> uid_material_map;
204 std::map<COLLADAFW::UniqueId, Material *> uid_effect_map;
205 std::map<COLLADAFW::UniqueId, Camera *> uid_camera_map;
206 std::map<COLLADAFW::UniqueId, Light *> uid_light_map;
207 std::map<Material *, TexIndexTextureArrayMap> material_texture_mapping_map;
208 std::multimap<COLLADAFW::UniqueId, Object *> object_map;
209 std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> node_map;
210 std::vector<const COLLADAFW::VisualScene *> vscenes;
211 std::vector<Object *> libnode_ob;
212
213 std::map<COLLADAFW::UniqueId, COLLADAFW::Node *>
214 root_map; /* find root joint by child joint uid, for bone tree evaluation during resampling
215 */
216 std::map<COLLADAFW::UniqueId, const COLLADAFW::Object *> FW_object_map;
217
218 std::string import_from_version;
219
220 void report_unknown_reference(const COLLADAFW::Node &node, const std::string object_type);
221};
General operations, lookup, etc. for blender objects.
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 writeGeometry(const COLLADAFW::Geometry *)
bool writeKinematicsScene(const COLLADAFW::KinematicsScene *)
void cancel(const COLLADAFW::String &errorMessage)
bool writeEffect(const COLLADAFW::Effect *)
bool writeLibraryNodes(const COLLADAFW::LibraryNodes *)
bool writeFormulas(const COLLADAFW::Formulas *)
void translate_anim_recursive(COLLADAFW::Node *, COLLADAFW::Node *, Object *)
bool writeVisualScene(const COLLADAFW::VisualScene *)
bool writeScene(const COLLADAFW::Scene *)
Object * create_instance_node(Object *, COLLADAFW::Node *, COLLADAFW::Node *, Scene *, bool)
bool writeAnimationList(const COLLADAFW::AnimationList *)
bool writeAnimation(const COLLADAFW::Animation *)
bool writeController(const COLLADAFW::Controller *)
void create_constraints(ExtraTags *et, Object *ob)
DocumentImporter(bContext *C, const ImportSettings *import_settings)
bool writeImage(const COLLADAFW::Image *)
bool writeSkinControllerData(const COLLADAFW::SkinControllerData *)
bool writeCamera(const COLLADAFW::Camera *)
ExtraTags * getExtraTags(const COLLADAFW::UniqueId &uid)
bool writeLight(const COLLADAFW::Light *)
bool writeMaterial(const COLLADAFW::Material *)
Object * create_camera_object(COLLADAFW::InstanceCamera *, Scene *)
bool writeGlobalAsset(const COLLADAFW::FileInfo *)
bool is_armature(COLLADAFW::Node *node)
Class for saving <extra> tags for a specific UniqueId.
Definition ExtraTags.h:17
std::map< COLLADAFW::UniqueId, Image * > UidImageMap