FemPlyReaderDelegate.h
Go to the documentation of this file.
1 // This file is a part of the OpenSurgSim project.
2 // Copyright 2014-2015, 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_PHYSICS_FEMPLYREADERDELEGATE_H
17 #define SURGSIM_PHYSICS_FEMPLYREADERDELEGATE_H
18 
19 #include <array>
20 #include <memory>
21 
23 #include "SurgSim/Physics/Fem.h"
24 
25 namespace SurgSim
26 {
27 namespace Physics
28 {
29 
34 {
35 public:
38 
39 protected:
40  // \return Name of the element (1/2/3D), which this delegate processes.
41  virtual std::string getElementName() const = 0;
42 
44  bool fileIsAcceptable(const SurgSim::DataStructures::PlyReader& reader) override;
45 
47  virtual void endParseFile() = 0;
48 
53  virtual void* beginVertices(const std::string& elementName, size_t vertexCount);
54 
57  virtual void processVertex(const std::string& elementName) = 0;
58 
61  virtual void endVertices(const std::string& elementName);
62 
67  void* beginFemElements(const std::string& elementName, size_t elementCount);
68 
71  virtual void processFemElement(const std::string& elementName) = 0;
72 
75  void endFemElements(const std::string& elementName);
76 
81  void* beginMaterials(const std::string& elementName, size_t materialCount);
82 
85  void endMaterials(const std::string& elementName);
86 
91  void* beginBoundaryConditions(const std::string& elementName, size_t boundaryConditionCount);
92 
95  virtual void processBoundaryCondition(const std::string& elementName) = 0;
96 
97 protected:
99  struct Vertex6DData
100  {
101  double x;
102  double y;
103  double z;
104  int64_t overrun1;
105  double thetaX;
106  double thetaY;
107  double thetaZ;
108  int64_t overrun2;
109  } m_vertexData;
110 
113 
116 
119  {
120  double massDensity;
121  double poissonRatio;
122  double youngModulus;
123  int64_t overrun;
124  } m_materialData;
125 
128 
130  struct ElementData
131  {
132  unsigned int type; // “LinearBeam”, “CorotationalTetrahedron”…
133  int64_t overrun1;
134 
135  unsigned int* indices;
136  unsigned int vertexCount;
137  int64_t overrun2;
138  double massDensity;
139  double poissonRatio;
140  double youngModulus;
141  } m_elementData;
143 };
144 
145 } // namespace Physics
146 } // namespace SurgSim
147 
148 #endif // SURGSIM_PHYSICS_FEMPLYREADERDELEGATE_H
Definition: CompoundShapeToGraphics.cpp:29
bool m_hasMaterial
Definition: FemPlyReaderDelegate.h:126
double youngModulus
Definition: FemPlyReaderDelegate.h:122
Internal data to receive the "material" data.
Definition: FemPlyReaderDelegate.h:118
double massDensity
Definition: FemPlyReaderDelegate.h:120
double youngModulus
Definition: FemPlyReaderDelegate.h:140
Internal data to receive the fem element.
Definition: FemPlyReaderDelegate.h:130
double thetaZ
Definition: FemPlyReaderDelegate.h:107
void * beginMaterials(const std::string &elementName, size_t materialCount)
Callback function, begin the processing of materials.
Definition: FemPlyReaderDelegate.cpp:175
int64_t overrun2
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:137
virtual std::string getElementName() const =0
Common part of implementation of PlyReaderDelegate for FemRepresentations.
Definition: FemPlyReaderDelegate.h:33
FemPlyReaderDelegate()
Constructor.
Definition: FemPlyReaderDelegate.cpp:27
virtual void endVertices(const std::string &elementName)
Callback function to finalize processing of vertices.
Definition: FemPlyReaderDelegate.cpp:153
unsigned int vertexCount
Definition: FemPlyReaderDelegate.h:136
bool m_hasRotationDOF
Definition: FemPlyReaderDelegate.h:142
double thetaY
Definition: FemPlyReaderDelegate.h:106
bool m_hasPerElementMaterial
Definition: FemPlyReaderDelegate.h:127
struct SurgSim::Physics::FemPlyReaderDelegate::MaterialData m_materialData
struct SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData m_vertexData
double poissonRatio
Definition: FemPlyReaderDelegate.h:139
Wrapper for the C .ply file parser This class wraps the main functionality for the original C ...
Definition: PlyReader.h:85
unsigned int m_boundaryConditionData
Internal data to receive the "boundary_condition" element.
Definition: FemPlyReaderDelegate.h:115
int64_t overrun1
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:133
unsigned int * indices
Definition: FemPlyReaderDelegate.h:135
Vertex data containing 6 dofs (3 translational and 3 rotational)
Definition: FemPlyReaderDelegate.h:99
void * beginFemElements(const std::string &elementName, size_t elementCount)
Callback function, begin the processing of FemElements.
Definition: FemPlyReaderDelegate.cpp:160
virtual void processBoundaryCondition(const std::string &elementName)=0
Callback function to process one boundary condition.
virtual void * beginVertices(const std::string &elementName, size_t vertexCount)
Callback function, begin the processing of vertices.
Definition: FemPlyReaderDelegate.cpp:147
void * beginBoundaryConditions(const std::string &elementName, size_t boundaryConditionCount)
Callback function, begin the processing of boundary conditions.
Definition: FemPlyReaderDelegate.cpp:188
double x
Definition: FemPlyReaderDelegate.h:101
double y
Definition: FemPlyReaderDelegate.h:102
virtual void processFemElement(const std::string &elementName)=0
Callback function to process one FemElement.
void endFemElements(const std::string &elementName)
Callback function to finalize processing of FemElements.
Definition: FemPlyReaderDelegate.cpp:167
bool registerDelegate(SurgSim::DataStructures::PlyReader *reader) override
Registers the delegate with the reader.
Definition: FemPlyReaderDelegate.cpp:31
double thetaX
Definition: FemPlyReaderDelegate.h:105
unsigned int type
Definition: FemPlyReaderDelegate.h:132
void endMaterials(const std::string &elementName)
Callback function, end the processing of materials.
Definition: FemPlyReaderDelegate.cpp:181
int64_t overrun2
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:108
virtual void processVertex(const std::string &elementName)=0
Callback function to process one vertex.
struct SurgSim::Physics::FemPlyReaderDelegate::ElementData m_elementData
int64_t overrun
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:123
virtual void endParseFile()=0
Callback for end of PlyReader::parseFile.
double massDensity
Definition: FemPlyReaderDelegate.h:138
bool fileIsAcceptable(const SurgSim::DataStructures::PlyReader &reader) override
Check whether the file in the reader can be used with this delegate, this gives the delegate a chance...
Definition: FemPlyReaderDelegate.cpp:113
bool m_hasBoundaryConditions
Flag indicating if the associated file has boundary conditions.
Definition: FemPlyReaderDelegate.h:112
int64_t overrun1
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:104
double z
Definition: FemPlyReaderDelegate.h:103
double poissonRatio
Definition: FemPlyReaderDelegate.h:121
PlyReaderDelegate abstract class.
Definition: PlyReaderDelegate.h:31