Blender  V2.93
DocumentImporter.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
21 #pragma once
22 
23 #include "COLLADAFWColor.h"
24 #include "COLLADAFWController.h"
25 #include "COLLADAFWEffect.h"
26 #include "COLLADAFWEffectCommon.h"
27 #include "COLLADAFWIWriter.h"
28 #include "COLLADAFWImage.h"
29 #include "COLLADAFWInstanceGeometry.h"
30 #include "COLLADAFWMaterial.h"
31 #include "COLLADAFWMorphController.h"
32 #include "COLLADAFWSkinController.h"
33 
34 #include "BKE_constraint.h"
35 #include "BKE_object.h"
36 
37 #include "AnimationImporter.h"
38 #include "ArmatureImporter.h"
39 #include "ControllerExporter.h"
40 #include "ImportSettings.h"
41 #include "MeshImporter.h"
42 #include "TransformReader.h"
43 
44 struct bContext;
45 
47 class DocumentImporter : COLLADAFW::IWriter {
48  public:
50  enum ImportStage {
51  Fetching_Scene_data, /* First pass to collect all data except controller */
52  Fetching_Controller_data, /* Second pass to collect controller data */
53  };
55  DocumentImporter(bContext *C, const ImportSettings *import_settings);
56 
59 
61  bool import();
62 
64  Object *create_camera_object(COLLADAFW::InstanceCamera *, Scene *);
65  Object *create_light_object(COLLADAFW::InstanceLight *, Scene *);
66  Object *create_instance_node(Object *, COLLADAFW::Node *, COLLADAFW::Node *, Scene *, bool);
67  void create_constraints(ExtraTags *et, Object *ob);
68  std::vector<Object *> *write_node(COLLADAFW::Node *, COLLADAFW::Node *, Scene *, Object *, bool);
69  void write_profile_COMMON(COLLADAFW::EffectCommon *, Material *);
70 
71  void translate_anim_recursive(COLLADAFW::Node *, COLLADAFW::Node *, Object *);
72 
78  void cancel(const COLLADAFW::String &errorMessage);
79 
81  void start();
82 
85  void finish();
86 
87  bool writeGlobalAsset(const COLLADAFW::FileInfo *);
88  std::string get_import_version(const COLLADAFW::FileInfo *asset);
89 
90  bool writeScene(const COLLADAFW::Scene *);
91 
92  bool writeVisualScene(const COLLADAFW::VisualScene *);
93 
94  bool writeLibraryNodes(const COLLADAFW::LibraryNodes *);
95 
96  bool writeAnimation(const COLLADAFW::Animation *);
97 
98  bool writeAnimationList(const COLLADAFW::AnimationList *);
99 
100 #if WITH_OPENCOLLADA_ANIMATION_CLIP
101  /* Please enable this when building with Collada 1.6.65 or newer (also in DocumentImporter.cpp)
102  */
103  bool writeAnimationClip(const COLLADAFW::AnimationClip *animationClip);
104 #endif
105 
106  bool writeGeometry(const COLLADAFW::Geometry *);
107 
108  bool writeMaterial(const COLLADAFW::Material *);
109 
110  bool writeEffect(const COLLADAFW::Effect *);
111 
112  bool writeCamera(const COLLADAFW::Camera *);
113 
114  bool writeImage(const COLLADAFW::Image *);
115 
116  bool writeLight(const COLLADAFW::Light *);
117 
118  bool writeSkinControllerData(const COLLADAFW::SkinControllerData *);
119 
120  bool writeController(const COLLADAFW::Controller *);
121 
122  bool writeFormulas(const COLLADAFW::Formulas *);
123 
124  bool writeKinematicsScene(const COLLADAFW::KinematicsScene *);
125 
127  bool addExtraTags(const COLLADAFW::UniqueId &uid, ExtraTags *extra_tags);
129  ExtraTags *getExtraTags(const COLLADAFW::UniqueId &uid);
130 
131  bool is_armature(COLLADAFW::Node *node);
132 
133  private:
134  const ImportSettings *import_settings;
135 
137  ImportStage mImportStage;
138 
139  bContext *mContext;
140  ViewLayer *view_layer;
141 
142  UnitConverter unit_converter;
143  ArmatureImporter armature_importer;
144  MeshImporter mesh_importer;
145  AnimationImporter anim_importer;
146 
148  typedef std::map<std::string, ExtraTags *> TagsMap;
150  TagsMap uid_tags_map;
151 
152  UidImageMap uid_image_map;
153  std::map<COLLADAFW::UniqueId, Material *> uid_material_map;
154  std::map<COLLADAFW::UniqueId, Material *> uid_effect_map;
155  std::map<COLLADAFW::UniqueId, Camera *> uid_camera_map;
156  std::map<COLLADAFW::UniqueId, Light *> uid_light_map;
157  std::map<Material *, TexIndexTextureArrayMap> material_texture_mapping_map;
158  std::multimap<COLLADAFW::UniqueId, Object *> object_map;
159  std::map<COLLADAFW::UniqueId, COLLADAFW::Node *> node_map;
160  std::vector<const COLLADAFW::VisualScene *> vscenes;
161  std::vector<Object *> libnode_ob;
162 
163  std::map<COLLADAFW::UniqueId, COLLADAFW::Node *>
164  root_map; /* find root joint by child joint uid, for bone tree evaluation during resampling
165  */
166  std::map<COLLADAFW::UniqueId, const COLLADAFW::Object *> FW_object_map;
167 
168  std::string import_from_version;
169 
170  void report_unknown_reference(const COLLADAFW::Node &node, const std::string object_type);
171 };
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
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction Transparent Toon Principled Hair Volume Principled Geometry
Group RGB to Bright Vector Camera Vector Combine Material Light Line Style Layer Add Ambient Diffuse Glossy Refraction Transparent Toon Principled Hair Volume Principled Light Particle Volume Image Sky Noise Wave Voronoi Brick Texture Vector Combine Vertex Separate Vector White RGB Map Separate Set Z Dilate Combine Combine Color Channel Split ID Combine Luminance Directional Alpha Distance Hue Movie Ellipse Bokeh View Corner Anti Mix RGB Hue Separate TEX_NODE_PROC TEX_NODE_PROC TEX_NODE_PROC TEX_NODE_PROC TEX_NODE_PROC Boolean Random String
#define C
Definition: RandGen.cpp:39
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:29
std::map< COLLADAFW::UniqueId, Image * > UidImageMap
Definition: collada_utils.h:69
OperationNode * node