Choreonoid  1.5
MeshGenerator.h
Go to the documentation of this file.
1 
6 #ifndef CNOID_UTIL_MESH_GENERATOR_H
7 #define CNOID_UTIL_MESH_GENERATOR_H
8 
9 #include "EigenTypes.h"
10 #include <Eigen/StdVector>
11 #include "exportdecl.h"
12 
13 namespace cnoid {
14 
15 class SgMesh;
16 class SgLineSet;
17 class MeshNormalGenerator;
18 
20 {
21 public:
22  MeshGenerator();
23  MeshGenerator(const MeshGenerator& org);
24  ~MeshGenerator();
25 
26  void setDivisionNumber(int n);
27  int divisionNumber() const;
28 
29  void enableNormalGeneration(bool on);
30  bool isNormalGenerationEnabled() const;
31 
32  SgMesh* generateBox(Vector3 size);
33  SgMesh* generateSphere(double radius);
34  SgMesh* generateCylinder(double radius, double height, bool bottom = true, bool top = true, bool side = true);
35  SgMesh* generateCone(double radius, double height, bool bottom = true, bool side = true);
36  SgMesh* generateDisc(double radius, double innerRadius);
37  SgMesh* generateArrow(double length, double width, double coneLengthRatio = 0.1, double coneWidthRatio = 2.5);
38  //SgMesh* generateArrow(double length, double width, double conePosRatio = 0.5, double coneLengthRatio = 0.1, double coneWidthRatio = 2.5);
39  SgMesh* generateTorus(double radius, double crossSectionRadius);
40 
41  typedef std::vector<Vector2, Eigen::aligned_allocator<Vector2> > Vector2Array;
42  typedef std::vector<Vector3, Eigen::aligned_allocator<Vector3> > Vector3Array;
43  typedef std::vector<AngleAxis, Eigen::aligned_allocator<AngleAxis> > AngleAxisArray;
44 
45  struct Extrusion
46  {
47  Vector2Array crossSection;
48  Vector3Array spine;
49  AngleAxisArray orientation;
50  Vector2Array scale;
51  double creaseAngle;
52  bool beginCap;
53  bool endCap;
55  creaseAngle = 0.0;
56  beginCap = true;
57  endCap = true;
58  }
59  };
60 
61  SgMesh* generateExtrusion(const Extrusion& extrusion);
62  SgLineSet* generateExtrusionLineSet(const Extrusion& extrusion, SgMesh* mesh);
63 
64 private:
65  int divisionNumber_;
66  bool isNormalGenerationEnabled_;
67  MeshNormalGenerator* normalGenerator;
68 
69  void generateNormals(SgMesh* mesh, double creaseAngle);
70 };
71 
72 }
73 
74 #endif
75 
76 
77 
Definition: SceneDrawables.h:291
std::vector< Vector3, Eigen::aligned_allocator< Vector3 > > Vector3Array
Definition: MeshGenerator.h:42
Definition: MeshNormalGenerator.h:16
std::vector< AngleAxis, Eigen::aligned_allocator< AngleAxis > > AngleAxisArray
Definition: MeshGenerator.h:43
std::vector< Vector2, Eigen::aligned_allocator< Vector2 > > Vector2Array
Definition: MeshGenerator.h:41
double creaseAngle
Definition: MeshGenerator.h:51
bool endCap
Definition: MeshGenerator.h:53
Vector2Array crossSection
Definition: MeshGenerator.h:47
bool beginCap
Definition: MeshGenerator.h:52
Vector3Array spine
Definition: MeshGenerator.h:48
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
Vector2Array scale
Definition: MeshGenerator.h:50
Definition: MeshGenerator.h:19
Eigen::Vector3d Vector3
Definition: EigenTypes.h:58
Definition: SceneDrawables.h:532
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
Extrusion()
Definition: MeshGenerator.h:54
AngleAxisArray orientation
Definition: MeshGenerator.h:49
Definition: MeshGenerator.h:45