Blender  V3.3
DocumentImporter.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #pragma once
8 
9 #include "COLLADAFWColor.h"
10 #include "COLLADAFWController.h"
11 #include "COLLADAFWEffect.h"
12 #include "COLLADAFWEffectCommon.h"
13 #include "COLLADAFWIWriter.h"
14 #include "COLLADAFWImage.h"
15 #include "COLLADAFWInstanceGeometry.h"
16 #include "COLLADAFWMaterial.h"
17 #include "COLLADAFWMorphController.h"
18 #include "COLLADAFWSkinController.h"
19 
20 #include "BKE_constraint.h"
21 #include "BKE_object.h"
22 
23 #include "AnimationImporter.h"
24 #include "ArmatureImporter.h"
25 #include "ControllerExporter.h"
26 #include "ImportSettings.h"
27 #include "MeshImporter.h"
28 #include "TransformReader.h"
29 
30 struct bContext;
31 
33 class DocumentImporter : COLLADAFW::IWriter {
34  public:
36  enum ImportStage {
37  Fetching_Scene_data, /* First pass to collect all data except controller */
38  Fetching_Controller_data, /* Second pass to collect controller data */
39  };
41  DocumentImporter(bContext *C, const ImportSettings *import_settings);
42 
45 
47  bool import();
48 
50  Object *create_camera_object(COLLADAFW::InstanceCamera *, Scene *);
51  Object *create_light_object(COLLADAFW::InstanceLight *, Scene *);
52  Object *create_instance_node(Object *, COLLADAFW::Node *, COLLADAFW::Node *, Scene *, bool);
57  void create_constraints(ExtraTags *et, Object *ob);
58  std::vector<Object *> *write_node(COLLADAFW::Node *, COLLADAFW::Node *, Scene *, Object *, bool);
59  void write_profile_COMMON(COLLADAFW::EffectCommon *, Material *);
60 
61  void translate_anim_recursive(COLLADAFW::Node *, COLLADAFW::Node *, Object *);
62 
68  void cancel(const COLLADAFW::String &errorMessage);
69 
71  void start();
72 
77  void finish();
78 
83  bool writeGlobalAsset(const COLLADAFW::FileInfo *);
88  std::string get_import_version(const COLLADAFW::FileInfo *asset);
89 
94  bool writeScene(const COLLADAFW::Scene *);
95 
100  bool writeVisualScene(const COLLADAFW::VisualScene *);
101 
107  bool writeLibraryNodes(const COLLADAFW::LibraryNodes *);
108 
112  bool writeAnimation(const COLLADAFW::Animation *);
113 
117  bool writeAnimationList(const COLLADAFW::AnimationList *);
118 
119 #if WITH_OPENCOLLADA_ANIMATION_CLIP
120  /* Please enable this when building with Collada 1.6.65 or newer (also in DocumentImporter.cpp)
121  */
122  bool writeAnimationClip(const COLLADAFW::AnimationClip *animationClip);
123 #endif
124 
129  bool writeGeometry(const COLLADAFW::Geometry *);
130 
135  bool writeMaterial(const COLLADAFW::Material *);
136 
141  bool writeEffect(const COLLADAFW::Effect *);
142 
147  bool writeCamera(const COLLADAFW::Camera *);
148 
153  bool writeImage(const COLLADAFW::Image *);
154 
159  bool writeLight(const COLLADAFW::Light *);
160 
165  bool writeSkinControllerData(const COLLADAFW::SkinControllerData *);
166 
168  bool writeController(const COLLADAFW::Controller *);
169 
170  bool writeFormulas(const COLLADAFW::Formulas *);
171 
172  bool writeKinematicsScene(const COLLADAFW::KinematicsScene *);
173 
175  bool addExtraTags(const COLLADAFW::UniqueId &uid, ExtraTags *extra_tags);
177  ExtraTags *getExtraTags(const COLLADAFW::UniqueId &uid);
178 
179  bool is_armature(COLLADAFW::Node *node);
180 
181  private:
182  const ImportSettings *import_settings;
183 
185  ImportStage mImportStage;
186 
187  bContext *mContext;
188  ViewLayer *view_layer;
189 
190  UnitConverter unit_converter;
191  ArmatureImporter armature_importer;
192  MeshImporter mesh_importer;
193  AnimationImporter anim_importer;
194 
196  typedef std::map<std::string, ExtraTags *> TagsMap;
198  TagsMap uid_tags_map;
199 
200  UidImageMap uid_image_map;
201  std::map<COLLADAFW::UniqueId, Material *> uid_material_map;
202  std::map<COLLADAFW::UniqueId, Material *> uid_effect_map;
203  std::map<COLLADAFW::UniqueId, Camera *> uid_camera_map;
204  std::map<COLLADAFW::UniqueId, Light *> uid_light_map;
205  std::map<Material *, TexIndexTextureArrayMap> material_texture_mapping_map;
206  std::multimap<COLLADAFW::UniqueId, Object *> object_map;
207  std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> node_map;
208  std::vector<const COLLADAFW::VisualScene *> vscenes;
209  std::vector<Object *> libnode_ob;
210 
211  std::map<COLLADAFW::UniqueId, COLLADAFW::Node *>
212  root_map; /* find root joint by child joint uid, for bone tree evaluation during resampling
213  */
214  std::map<COLLADAFW::UniqueId, const COLLADAFW::Object *> FW_object_map;
215 
216  std::string import_from_version;
217 
218  void report_unknown_reference(const COLLADAFW::Node &node, const std::string object_type);
219 };
General operations, lookup, etc. for blender objects.
struct Camera Camera
struct Effect Effect
struct Image Image
struct Light Light
struct Material Material
struct Scene Scene
#define C
Definition: RandGen.cpp:25
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:15
std::map< COLLADAFW::UniqueId, Image * > UidImageMap
Definition: collada_utils.h:55
OperationNode * node