opensurgsim
SegmentMesh.h
1 // This file is a part of the OpenSurgSim project.
2 // Copyright 2013, SimQuest Solutions Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #ifndef SURGSIM_DATASTRUCTURES_SEGMENTMESH_H
17 #define SURGSIM_DATASTRUCTURES_SEGMENTMESH_H
18 
19 #include "SurgSim/DataStructures/SegmentEmptyData.h"
20 #include "SurgSim/DataStructures/TriangleMesh.h"
21 
22 namespace SurgSim
23 {
24 namespace DataStructures
25 {
26 
32 template <class VertexData, class EdgeData>
33 class SegmentMesh : public TriangleMesh<VertexData, EdgeData, SegmentEmptyData>
34 {
35 public:
42 
44  SegmentMesh();
45 
49 
55  template <class V, class E>
56  explicit SegmentMesh(const SegmentMesh<V, E>& other);
57 
59  virtual ~SegmentMesh();
60 
63  SegmentMesh(SegmentMesh&& other);
64 
69 
74 
77  void createDefaultEdges();
78 
88  bool save(const std::string& fileName,
89  bool asPhysics = true,
90  double radius = 0.0001,
91  double massDensity = 900,
92  double poissonRatio = 0.45,
93  double youngsModulus = 1.75e9);
94 
101 
104  size_t addTriangle(const TriangleType& triangle);
105  size_t getNumTriangles() const;
106  const std::vector<TriangleType>& getTriangles() const;
107  std::vector<TriangleType>& getTriangles();
108  const TriangleType& getTriangle(size_t id) const;
109  TriangleType& getTriangle(size_t id);
110  void removeTriangle(size_t id);
111  std::array<SurgSim::Math::Vector3d, 3> getTrianglePositions(size_t id) const;
112  void doClearTriangles() override;
114 
115 private:
117  void doClear() override;
118 };
119 
121 
122 } // namespace DataStructures
123 } // namespace SurgSim
124 
125 #include "SurgSim/DataStructures/SegmentMesh-inl.h"
126 
127 #endif // SURGSIM_DATASTRUCTURES_SEGMENTMESH_H
Wraps glewInit() to separate the glew opengl definitions from the osg opengl definitions only imgui n...
Definition: AddRandomSphereBehavior.cpp:36
size_t addTriangle(const TriangleType &triangle)
Definition: SegmentMesh-inl.h:72
void doClearTriangles() override
Remove all triangles from the mesh.
Definition: SegmentMesh-inl.h:141
virtual ~SegmentMesh()
Destructor.
Definition: SegmentMesh-inl.h:47
SegmentMesh()
Constructor. The mesh is initially empty (no vertices, no edges).
Definition: SegmentMesh-inl.h:28
TriangleMesh< VertexData, EdgeData, SegmentEmptyData > TriangleMeshType
TriangleMesh type for convenience.
Definition: SegmentMesh.h:37
Class to hold the type of a SegmentMesh.
Definition: SegmentMesh.h:33
void createDefaultEdges()
Creates edges for all vertices in the mesh connecting all the points consecutively.
Definition: SegmentMesh-inl.h:154
Basic class for storing Triangle Meshes, handling basic vertex, edge, and triangle functionality...
Definition: TriangleMesh.h:62
Element structure for meshes.
Definition: MeshElement.h:44
SegmentMesh< VertexData, EdgeData > & operator=(const SegmentMesh< VertexData, EdgeData > &other)
Copy Assignment.
Definition: SegmentMesh-inl.h:58
TriangleMeshType::TriangleType TriangleType
Triangle type for convenience (Ids of the 3 vertices)
Definition: SegmentMesh.h:41
bool save(const std::string &fileName, bool asPhysics=true, double radius=0.0001, double massDensity=900, double poissonRatio=0.45, double youngsModulus=1.75e9)
Save the current structure to a ply file.
Definition: SegmentMesh-inl.h:167
TriangleMeshType::EdgeType EdgeType
Edge type for convenience (Ids of the 2 vertices)
Definition: SegmentMesh.h:39