hpp-fcl  1.4.4
HPP fork of FCL -- The Flexible Collision Library
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/BV/OBBRSS.h>
42 #include <hpp/fcl/BVH/BVH_model.h>
43 
44 class aiScene;
45 namespace Assimp {
46  class Importer;
47 }
48 
49 namespace hpp
50 {
51 namespace fcl
52 {
53 
54 namespace internal
55 {
56 
58 {
59  std::vector <fcl::Vec3f> vertices_;
60  std::vector <fcl::Triangle> triangles_;
61 };
62 
63 struct Loader {
64  Loader ();
65  ~Loader ();
66 
67  void load (const std::string& resource_path);
68 
69  Assimp::Importer* importer;
70  aiScene const* scene;
71 };
72 
81 void buildMesh (const fcl::Vec3f & scale,
82  const aiScene* scene,
83  unsigned vertices_offset,
84  TriangleAndVertices & tv);
85 
93 template<class BoundingVolume>
94 inline void meshFromAssimpScene(
95  const fcl::Vec3f & scale,
96  const aiScene* scene,
97  const boost::shared_ptr < BVHModel<BoundingVolume> > & mesh)
98 {
100 
101  int res = mesh->beginModel ();
102 
103  if (res != fcl::BVH_OK)
104  {
105  std::ostringstream error;
106  error << "fcl BVHReturnCode = " << res;
107  throw std::runtime_error (error.str ());
108  }
109 
110  buildMesh (scale, scene, (unsigned) mesh->num_vertices, tv);
111  mesh->addSubModel (tv.vertices_, tv.triangles_);
112 
113  mesh->endModel ();
114 }
115 
116 } // namespace internal
117 
125 template<class BoundingVolume>
126 inline void loadPolyhedronFromResource (const std::string & resource_path,
127  const fcl::Vec3f & scale,
128  const boost::shared_ptr < BVHModel<BoundingVolume> > & polyhedron)
129 {
130  internal::Loader scene;
131  scene.load (resource_path);
132 
133  internal::meshFromAssimpScene (scale, scene.scene, polyhedron);
134 }
135 
136 } // namespace fcl
137 } // namespace hpp
138 
139 #endif // HPP_FCL_MESH_LOADER_ASSIMP_H
Definition: assimp.h:63
Definition: assimp.h:45
Main namespace.
Definition: AABB.h:43
void buildMesh(const fcl::Vec3f &scale, const aiScene *scene, unsigned vertices_offset, TriangleAndVertices &tv)
Recursive procedure for building a mesh.
void loadPolyhedronFromResource(const std::string &resource_path, const fcl::Vec3f &scale, const boost::shared_ptr< BVHModel< BoundingVolume > > &polyhedron)
Read a mesh file and convert it to a polyhedral mesh.
Definition: assimp.h:126
std::vector< fcl::Triangle > triangles_
Definition: assimp.h:60
Definition: BVH_internal.h:65
A class describing the bounding hierarchy of a mesh model or a point cloud model (which is viewed as ...
Definition: BVH_model.h:255
aiScene const * scene
Definition: assimp.h:70
void meshFromAssimpScene(const fcl::Vec3f &scale, const aiScene *scene, const boost::shared_ptr< BVHModel< BoundingVolume > > &mesh)
Convert an assimp scene to a mesh.
Definition: assimp.h:94
std::vector< fcl::Vec3f > vertices_
Definition: assimp.h:59
Eigen::Matrix< FCL_REAL, 3, 1 > Vec3f
Definition: data_types.h:73
void load(const std::string &resource_path)
Assimp::Importer * importer
Definition: assimp.h:69