3D Repo Bouncer  1.4
repo_model_import_assimp.h
1 
23 #pragma once
24 
25 #include <string>
26 
27 #include <assimp/Importer.hpp>
28 #include <assimp/cimport.h>
29 #include <assimp/scene.h>
30 #include <assimp/postprocess.h>
31 
32 #include <boost/bimap.hpp>
33 
34 #include "repo_model_import_abstract.h"
35 #include "../../../core/model/collection/repo_scene.h"
36 #include "../../../core/model/bson/repo_node_camera.h"
37 #include "../../../core/model/bson/repo_node_material.h"
38 #include "../../../core/model/bson/repo_node_mesh.h"
39 #include "../../../core/model/bson/repo_node_metadata.h"
40 #include "../../../core/model/bson/repo_node_transformation.h"
41 
42 namespace repo{
43  namespace manipulator{
44  namespace modelconvertor{
46  {
47  public:
52 
57  AssimpModelImport(const ModelImportConfig *settings);
58 
62  virtual ~AssimpModelImport();
63 
64  static std::string getSupportedFormats();
65 
73 
80  bool importModel(std::string filePath, std::string &errMsg);
81 
82  private:
83 
89  repo::core::model::RepoScene* convertAiSceneToRepoScene();
90 
96  repo::core::model::CameraNode* createCameraRepoNode(
97  const aiCamera *assimpCamera);
106  repo::core::model::MaterialNode* createMaterialRepoNode(
107  const aiMaterial *material,
108  const std::string &name,
109  const std::unordered_map<std::string, repo::core::model::RepoNode *> &nameToTexture);
110 
118  repo::core::model::MeshNode createMeshRepoNode(
119  const aiMesh *assimpMesh,
120  const std::vector<repo::core::model::RepoNode *> &materials,
121  std::unordered_map < repo::core::model::RepoNode*, std::vector<repoUUID>> &matMap,
122  const bool hasTexture,
123  const std::vector<double> &offset);
124 
132  repo::core::model::MetadataNode* createMetadataRepoNode(
133  const aiMetadata *assimpMeta,
134  const std::string &metadataName,
135  const std::vector<repoUUID> &parents = std::vector<repoUUID>());
136 
148  repo::core::model::RepoNodeSet createTransformationNodesRecursive(
149  const aiNode *assimpNode,
150  const std::unordered_map<std::string, repo::core::model::RepoNode *> &cameras,
151  const std::vector<repo::core::model::RepoNode > &meshes,
152  const std::unordered_map<repoUUID, repo::core::model::RepoNode *, RepoUUIDHasher> &meshToMat,
153  std::unordered_map<repo::core::model::RepoNode *, std::vector<repoUUID>> &matParents,
154  repo::core::model::RepoNodeSet &newMeshes,
155  repo::core::model::RepoNodeSet &metadata,
156  uint32_t &count,
157  const std::vector<double> &worldOffset,
158  const std::vector<repoUUID> &parent = std::vector<repoUUID>()
159  );
160 
166  repo::core::model::RepoNode* duplicateMesh(
167  repoUUID &newParent,
169  const std::unordered_map<repoUUID, repo::core::model::RepoNode *, RepoUUIDHasher> &meshToMat,
170  std::unordered_map<repo::core::model::RepoNode *, std::vector<repoUUID>> &matParents);
171 
176  std::vector<std::vector<double>> getAiMeshBoundingBox(
177  const aiMesh *mesh) const;
178 
183  std::vector<std::vector<double>> getSceneBoundingBox() const;
184 
185  void getSceneBoundingBoxInternal(
186  const aiNode *node,
187  const aiMatrix4x4 &mat,
188  std::vector<std::vector<double>> &bbox) const;
189 
194  void loadTextures(std::string folderPath);
195 
199  void setAssimpProperties();
200 
206  uint32_t composeAssimpPostProcessingFlags(
207  uint32_t flag = 0);
208 
209  Assimp::Importer importer;
210  const aiScene *assimpScene;
211  std::string orgFile;
212  };
213  } //namespace AssimpModelImport
214  } //namespace manipulator
215 } //namespace repo
bool importModel(std::string filePath, std::string &errMsg)
Definition: repo_model_import_assimp.cpp:1154
AssimpModelImport()
Definition: repo_model_import_assimp.cpp:38
Definition: repo_connection_pool_mongo.h:32
Definition: repo_node_camera.h:41
repo::core::model::RepoScene * generateRepoScene()
Definition: repo_model_import_assimp.cpp:1034
Definition: repo_node_material.h:43
Definition: repo_scene.h:44
virtual ~AssimpModelImport()
Definition: repo_model_import_assimp.cpp:49
Definition: repo_node_mesh.h:62
Definition: repo_node.h:33
Definition: repo_model_import_assimp.h:45
Definition: repo_model_import_config.h:33
Definition: repo_node_metadata.h:35
Definition: repo_model_import_abstract.h:32