assimp.h
Go to the documentation of this file.
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2011-2014, Willow Garage, Inc.
5  * Copyright (c) 2014-2015, Open Source Robotics Foundation
6  * Copyright (c) 2016-2019, CNRS - LAAS
7  * Copyright (c) 2019, INRIA
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * * Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  * * Redistributions in binary form must reproduce the above
17  * copyright notice, this list of conditions and the following
18  * disclaimer in the documentation and/or other materials provided
19  * with the distribution.
20  * * Neither the name of Open Source Robotics Foundation nor the names of its
21  * contributors may be used to endorse or promote products derived
22  * from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  * POSSIBILITY OF SUCH DAMAGE.
36  */
37 
38 #ifndef HPP_FCL_MESH_LOADER_ASSIMP_H
39 #define HPP_FCL_MESH_LOADER_ASSIMP_H
40 
41 #include <hpp/fcl/fwd.hh>
42 #include <hpp/fcl/config.hh>
43 #include <hpp/fcl/BV/OBBRSS.h>
44 #include <hpp/fcl/BVH/BVH_model.h>
45 
46 struct aiScene;
47 namespace Assimp {
48 class Importer;
49 }
50 
51 namespace hpp {
52 namespace fcl {
53 
54 namespace internal {
55 
56 struct HPP_FCL_DLLAPI TriangleAndVertices {
57  std::vector<fcl::Vec3f> vertices_;
58  std::vector<fcl::Triangle> triangles_;
59 };
60 
61 struct HPP_FCL_DLLAPI Loader {
62  Loader();
63  ~Loader();
64 
65  void load(const std::string& resource_path);
66 
67  Assimp::Importer* importer;
68  aiScene const* scene;
69 };
70 
79 HPP_FCL_DLLAPI void buildMesh(const fcl::Vec3f& scale, const aiScene* scene,
80  unsigned vertices_offset,
82 
90 template <class BoundingVolume>
91 inline void meshFromAssimpScene(
92  const fcl::Vec3f& scale, const aiScene* scene,
93  const shared_ptr<BVHModel<BoundingVolume> >& mesh) {
95 
96  int res = mesh->beginModel();
97 
98  if (res != fcl::BVH_OK) {
99  HPP_FCL_THROW_PRETTY("fcl BVHReturnCode = " << res, std::runtime_error);
100  }
101 
102  buildMesh(scale, scene, (unsigned)mesh->num_vertices, tv);
103  mesh->addSubModel(tv.vertices_, tv.triangles_);
104 
105  mesh->endModel();
106 }
107 
108 } // namespace internal
109 
117 template <class BoundingVolume>
119  const std::string& resource_path, const fcl::Vec3f& scale,
120  const shared_ptr<BVHModel<BoundingVolume> >& polyhedron) {
121  internal::Loader scene;
122  scene.load(resource_path);
123 
124  internal::meshFromAssimpScene(scale, scene.scene, polyhedron);
125 }
126 
127 } // namespace fcl
128 } // namespace hpp
129 
130 #endif // HPP_FCL_MESH_LOADER_ASSIMP_H
hpp::fcl::Vec3f
Eigen::Matrix< FCL_REAL, 3, 1 > Vec3f
Definition: data_types.h:66
hpp::fcl::internal::meshFromAssimpScene
void meshFromAssimpScene(const fcl::Vec3f &scale, const aiScene *scene, const shared_ptr< BVHModel< BoundingVolume > > &mesh)
Convert an assimp scene to a mesh.
Definition: assimp.h:91
hpp::fcl::internal::Loader
Definition: assimp.h:61
hpp::fcl::loadPolyhedronFromResource
void loadPolyhedronFromResource(const std::string &resource_path, const fcl::Vec3f &scale, const shared_ptr< BVHModel< BoundingVolume > > &polyhedron)
Read a mesh file and convert it to a polyhedral mesh.
Definition: assimp.h:118
hpp::fcl::internal::Loader::importer
Assimp::Importer * importer
Definition: assimp.h:67
hpp::fcl::internal::Loader::scene
aiScene const * scene
Definition: assimp.h:68
hpp::fcl::BVH_OK
@ BVH_OK
Definition: BVH_internal.h:65
hpp::fcl::internal::TriangleAndVertices::triangles_
std::vector< fcl::Triangle > triangles_
Definition: assimp.h:58
hpp::fcl::internal::buildMesh
HPP_FCL_DLLAPI void buildMesh(const fcl::Vec3f &scale, const aiScene *scene, unsigned vertices_offset, TriangleAndVertices &tv)
Recursive procedure for building a mesh.
Definition: assimp.cpp:158
hpp::fcl::internal::TriangleAndVertices::vertices_
std::vector< fcl::Vec3f > vertices_
Definition: assimp.h:57
res
res
boost::serialization::load
void load(Archive &ar, hpp::fcl::BVSplitter< BV > &splitter_, const unsigned int)
Definition: serialization/BV_splitter.h:44
hpp
Main namespace.
Definition: broadphase_bruteforce.h:44
HPP_FCL_THROW_PRETTY
#define HPP_FCL_THROW_PRETTY(message, exception)
Definition: include/hpp/fcl/fwd.hh:57
OBBRSS.h
hpp::fcl::BVHModel
A class describing the bounding hierarchy of a mesh model or a point cloud model (which is viewed as ...
Definition: BVH/BVH_model.h:273
BVH_model.h
hpp::fcl::internal::Loader::load
void load(const std::string &resource_path)
Definition: assimp.cpp:80
fwd.hh
hpp::fcl::internal::TriangleAndVertices
Definition: assimp.h:56
Assimp
Definition: assimp.h:47


hpp-fcl
Author(s):
autogenerated on Fri Aug 2 2024 02:45:12