TriangleMeshPlyReaderDelegate.h
Go to the documentation of this file.
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_TRIANGLEMESHPLYREADERDELEGATE_H
17 #define SURGSIM_DATASTRUCTURES_TRIANGLEMESHPLYREADERDELEGATE_H
18 
19 #include <array>
20 #include <memory>
21 
25 
26 namespace SurgSim
27 {
28 namespace DataStructures
29 {
30 
32 template <class M>
34 {
35 public:
36 
37  typedef M MeshType;
38 
41 
44  explicit TriangleMeshPlyReaderDelegate(std::shared_ptr<MeshType> mesh);
45 
48  std::shared_ptr<MeshType> getMesh();
49 
53  bool registerDelegate(PlyReader* reader) override;
54 
58  bool fileIsAcceptable(const PlyReader& reader) override;
59 
64  void* beginVertices(const std::string& elementName, size_t vertexCount);
65 
68  virtual void processVertex(const std::string& elementName);
69 
72  void endVertices(const std::string& elementName);
73 
78  void* beginFaces(const std::string& elementName, size_t faceCount);
79 
82  void processFace(const std::string& elementName);
83 
86  void endFaces(const std::string& elementName);
87 
88  void* beginEdges(const std::string& elementName, size_t edgeCount);
89 
90  void processEdge(const std::string& elementName);
91 
92  void endEdges(const std::string& elementName);
93 
95  void endFile();
96 
97 protected:
98 
100  bool hasTextureCoordinates();
101 
104  struct VertexData
105  {
106  double x;
107  double y;
108  double z;
109  int64_t overrun1;
110  double s;
111  double t;
112  int64_t overrun2;
114 
116  struct ListData
117  {
118  unsigned int count;
119  unsigned int* indices;
120  int64_t overrun;
122 
124  std::shared_ptr<MeshType> m_mesh;
125 
126  // Statically allocated index array to receive data for the faces
127  std::array<size_t, 3> m_face;
128  std::array<size_t, 2> m_edge;
129 
130 private:
133 
136 
139 };
140 
141 
142 };
143 };
144 
146 
147 #endif
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::hasTextureCoordinates
bool hasTextureCoordinates()
Definition: TriangleMeshPlyReaderDelegate-inl.h:189
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData::z
double z
Definition: TriangleMeshPlyReaderDelegate.h:108
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::ListData::count
unsigned int count
Definition: TriangleMeshPlyReaderDelegate.h:118
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData::overrun1
int64_t overrun1
Used to check for buffer overruns.
Definition: TriangleMeshPlyReaderDelegate.h:109
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::endEdges
void endEdges(const std::string &elementName)
Definition: TriangleMeshPlyReaderDelegate-inl.h:215
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_listData
struct SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::ListData m_listData
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::beginFaces
void * beginFaces(const std::string &elementName, size_t faceCount)
Callback function, begin the processing of faces.
Definition: TriangleMeshPlyReaderDelegate-inl.h:156
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData::overrun2
int64_t overrun2
Used to check for buffer overruns.
Definition: TriangleMeshPlyReaderDelegate.h:112
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::processVertex
virtual void processVertex(const std::string &elementName)
Callback function to process one vertex.
Definition: TriangleMeshPlyReaderDelegate-inl.h:141
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::MeshType
M MeshType
Definition: TriangleMeshPlyReaderDelegate.h:37
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData::y
double y
Definition: TriangleMeshPlyReaderDelegate.h:107
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::ListData
Internal structure, the received for data from the "face" element.
Definition: TriangleMeshPlyReaderDelegate.h:117
PlyReader.h
EmptyData.h
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::endFile
void endFile()
Callback function to finalize processing of the mesh.
Definition: TriangleMeshPlyReaderDelegate-inl.h:183
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::endFaces
void endFaces(const std::string &elementName)
Callback function to finalize processing of faces.
Definition: TriangleMeshPlyReaderDelegate-inl.h:175
SurgSim
Definition: CompoundShapeToGraphics.cpp:30
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::processEdge
void processEdge(const std::string &elementName)
Definition: TriangleMeshPlyReaderDelegate-inl.h:204
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_hasFaces
bool m_hasFaces
Set to true if faces are found in the .ply file.
Definition: TriangleMeshPlyReaderDelegate.h:135
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::registerDelegate
bool registerDelegate(PlyReader *reader) override
Registers the delegate with the reader, overridden from.
Definition: TriangleMeshPlyReaderDelegate-inl.h:52
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_hasTextureCoordinates
bool m_hasTextureCoordinates
Set to true if s/t coordinates are found in the .ply file.
Definition: TriangleMeshPlyReaderDelegate.h:132
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_face
std::array< size_t, 3 > m_face
Definition: TriangleMeshPlyReaderDelegate.h:127
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::endVertices
void endVertices(const std::string &elementName)
Callback function to finalize processing of vertices.
Definition: TriangleMeshPlyReaderDelegate-inl.h:148
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData::x
double x
Definition: TriangleMeshPlyReaderDelegate.h:106
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate
Implementation of PlyReaderDelegate for simple triangle meshes.
Definition: TriangleMeshPlyReaderDelegate.h:34
SurgSim::DataStructures::PlyReader
Wrapper for the C .ply file parser This class wraps the main functionality for the original C ....
Definition: PlyReader.h:86
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::TriangleMeshPlyReaderDelegate
TriangleMeshPlyReaderDelegate()
Default constructor.
Definition: TriangleMeshPlyReaderDelegate-inl.h:24
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData
Internal structure, the receiver for data from the "vertex" element Provide space for standard ply ve...
Definition: TriangleMeshPlyReaderDelegate.h:105
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData::t
double t
Definition: TriangleMeshPlyReaderDelegate.h:111
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_hasEdges
bool m_hasEdges
Set to true if edges are found in the .ply file.
Definition: TriangleMeshPlyReaderDelegate.h:138
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::beginVertices
void * beginVertices(const std::string &elementName, size_t vertexCount)
Callback function, begin the processing of vertices.
Definition: TriangleMeshPlyReaderDelegate-inl.h:131
TriangleMeshPlyReaderDelegate-inl.h
PlyReaderDelegate.h
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::ListData::overrun
int64_t overrun
Used to check for buffer overruns.
Definition: TriangleMeshPlyReaderDelegate.h:120
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData::s
double s
Definition: TriangleMeshPlyReaderDelegate.h:110
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_vertexData
struct SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::VertexData m_vertexData
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::processFace
void processFace(const std::string &elementName)
Callback function to process one face.
Definition: TriangleMeshPlyReaderDelegate-inl.h:165
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::beginEdges
void * beginEdges(const std::string &elementName, size_t edgeCount)
Definition: TriangleMeshPlyReaderDelegate-inl.h:195
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_edge
std::array< size_t, 2 > m_edge
Definition: TriangleMeshPlyReaderDelegate.h:128
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::fileIsAcceptable
bool fileIsAcceptable(const PlyReader &reader) override
Check whether this file is acceptable to the delegate, overridden from.
Definition: TriangleMeshPlyReaderDelegate-inl.h:111
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::m_mesh
std::shared_ptr< MeshType > m_mesh
The mesh that will be created.
Definition: TriangleMeshPlyReaderDelegate.h:124
string
string(TOUPPER ${DEVICE} DEVICE_UPPER_CASE) option(BUILD_DEVICE_$
Definition: CMakeLists.txt:38
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::ListData::indices
unsigned int * indices
Definition: TriangleMeshPlyReaderDelegate.h:119
SurgSim::DataStructures::PlyReaderDelegate
PlyReaderDelegate abstract class.
Definition: PlyReaderDelegate.h:32
SurgSim::DataStructures::TriangleMeshPlyReaderDelegate::getMesh
std::shared_ptr< MeshType > getMesh()
Gets the mesh.
Definition: TriangleMeshPlyReaderDelegate-inl.h:46