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;
110 
113 
116 
119  {
120  double massDensity;
121  double poissonRatio;
122  double youngModulus;
123  int64_t overrun;
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;
143 };
144 
145 } // namespace Physics
146 } // namespace SurgSim
147 
148 #endif // SURGSIM_PHYSICS_FEMPLYREADERDELEGATE_H
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::overrun1
int64_t overrun1
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:104
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::thetaY
double thetaY
Definition: FemPlyReaderDelegate.h:106
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::z
double z
Definition: FemPlyReaderDelegate.h:103
SurgSim::Physics::FemPlyReaderDelegate::ElementData::type
unsigned int type
Definition: FemPlyReaderDelegate.h:132
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData
Vertex data containing 6 dofs (3 translational and 3 rotational)
Definition: FemPlyReaderDelegate.h:100
SurgSim::Physics::FemPlyReaderDelegate::fileIsAcceptable
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
SurgSim::Physics::FemPlyReaderDelegate::beginBoundaryConditions
void * beginBoundaryConditions(const std::string &elementName, size_t boundaryConditionCount)
Callback function, begin the processing of boundary conditions.
Definition: FemPlyReaderDelegate.cpp:188
SurgSim::Physics::FemPlyReaderDelegate::MaterialData
Internal data to receive the "material" data.
Definition: FemPlyReaderDelegate.h:119
SurgSim::Physics::FemPlyReaderDelegate::beginFemElements
void * beginFemElements(const std::string &elementName, size_t elementCount)
Callback function, begin the processing of FemElements.
Definition: FemPlyReaderDelegate.cpp:160
SurgSim::Physics::FemPlyReaderDelegate::processBoundaryCondition
virtual void processBoundaryCondition(const std::string &elementName)=0
Callback function to process one boundary condition.
SurgSim::Physics::FemPlyReaderDelegate::processFemElement
virtual void processFemElement(const std::string &elementName)=0
Callback function to process one FemElement.
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::thetaZ
double thetaZ
Definition: FemPlyReaderDelegate.h:107
SurgSim::Physics::FemPlyReaderDelegate::m_hasMaterial
bool m_hasMaterial
Definition: FemPlyReaderDelegate.h:126
SurgSim::Physics::FemPlyReaderDelegate::endFemElements
void endFemElements(const std::string &elementName)
Callback function to finalize processing of FemElements.
Definition: FemPlyReaderDelegate.cpp:167
SurgSim::Physics::FemPlyReaderDelegate::m_vertexData
struct SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData m_vertexData
SurgSim
Definition: CompoundShapeToGraphics.cpp:30
SurgSim::Physics::FemPlyReaderDelegate::beginMaterials
void * beginMaterials(const std::string &elementName, size_t materialCount)
Callback function, begin the processing of materials.
Definition: FemPlyReaderDelegate.cpp:175
SurgSim::Physics::FemPlyReaderDelegate::MaterialData::massDensity
double massDensity
Definition: FemPlyReaderDelegate.h:120
SurgSim::Physics::FemPlyReaderDelegate::MaterialData::poissonRatio
double poissonRatio
Definition: FemPlyReaderDelegate.h:121
SurgSim::Physics::FemPlyReaderDelegate::processVertex
virtual void processVertex(const std::string &elementName)=0
Callback function to process one vertex.
SurgSim::Physics::FemPlyReaderDelegate::endVertices
virtual void endVertices(const std::string &elementName)
Callback function to finalize processing of vertices.
Definition: FemPlyReaderDelegate.cpp:153
SurgSim::Physics::FemPlyReaderDelegate::m_hasRotationDOF
bool m_hasRotationDOF
Definition: FemPlyReaderDelegate.h:142
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::Physics::FemPlyReaderDelegate::m_hasPerElementMaterial
bool m_hasPerElementMaterial
Definition: FemPlyReaderDelegate.h:127
SurgSim::Physics::FemPlyReaderDelegate::ElementData::massDensity
double massDensity
Definition: FemPlyReaderDelegate.h:138
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::x
double x
Definition: FemPlyReaderDelegate.h:101
SurgSim::Physics::FemPlyReaderDelegate::m_boundaryConditionData
unsigned int m_boundaryConditionData
Internal data to receive the "boundary_condition" element.
Definition: FemPlyReaderDelegate.h:115
SurgSim::Physics::FemPlyReaderDelegate::ElementData
Internal data to receive the fem element.
Definition: FemPlyReaderDelegate.h:131
SurgSim::Physics::FemPlyReaderDelegate::endParseFile
virtual void endParseFile()=0
Callback for end of PlyReader::parseFile.
PlyReaderDelegate.h
SurgSim::Physics::FemPlyReaderDelegate::MaterialData::overrun
int64_t overrun
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:123
SurgSim::Physics::FemPlyReaderDelegate::m_hasBoundaryConditions
bool m_hasBoundaryConditions
Flag indicating if the associated file has boundary conditions.
Definition: FemPlyReaderDelegate.h:112
SurgSim::Physics::FemPlyReaderDelegate::ElementData::vertexCount
unsigned int vertexCount
Definition: FemPlyReaderDelegate.h:136
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::y
double y
Definition: FemPlyReaderDelegate.h:102
SurgSim::Physics::FemPlyReaderDelegate::ElementData::overrun2
int64_t overrun2
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:137
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::thetaX
double thetaX
Definition: FemPlyReaderDelegate.h:105
SurgSim::Physics::FemPlyReaderDelegate::Vertex6DData::overrun2
int64_t overrun2
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:108
SurgSim::Physics::FemPlyReaderDelegate::ElementData::indices
unsigned int * indices
Definition: FemPlyReaderDelegate.h:135
SurgSim::Physics::FemPlyReaderDelegate::ElementData::youngModulus
double youngModulus
Definition: FemPlyReaderDelegate.h:140
SurgSim::Physics::FemPlyReaderDelegate::beginVertices
virtual void * beginVertices(const std::string &elementName, size_t vertexCount)
Callback function, begin the processing of vertices.
Definition: FemPlyReaderDelegate.cpp:147
SurgSim::Physics::FemPlyReaderDelegate::ElementData::overrun1
int64_t overrun1
Used to check for buffer overruns.
Definition: FemPlyReaderDelegate.h:133
SurgSim::Physics::FemPlyReaderDelegate::MaterialData::youngModulus
double youngModulus
Definition: FemPlyReaderDelegate.h:122
SurgSim::Physics::FemPlyReaderDelegate::ElementData::poissonRatio
double poissonRatio
Definition: FemPlyReaderDelegate.h:139
string
string(TOUPPER ${DEVICE} DEVICE_UPPER_CASE) option(BUILD_DEVICE_$
Definition: CMakeLists.txt:38
Fem.h
SurgSim::Physics::FemPlyReaderDelegate::registerDelegate
bool registerDelegate(SurgSim::DataStructures::PlyReader *reader) override
Registers the delegate with the reader.
Definition: FemPlyReaderDelegate.cpp:31
SurgSim::Physics::FemPlyReaderDelegate::m_elementData
struct SurgSim::Physics::FemPlyReaderDelegate::ElementData m_elementData
SurgSim::Physics::FemPlyReaderDelegate::m_materialData
struct SurgSim::Physics::FemPlyReaderDelegate::MaterialData m_materialData
SurgSim::DataStructures::PlyReaderDelegate
PlyReaderDelegate abstract class.
Definition: PlyReaderDelegate.h:32
SurgSim::Physics::FemPlyReaderDelegate
Common part of implementation of PlyReaderDelegate for FemRepresentations.
Definition: FemPlyReaderDelegate.h:34
SurgSim::Physics::FemPlyReaderDelegate::endMaterials
void endMaterials(const std::string &elementName)
Callback function, end the processing of materials.
Definition: FemPlyReaderDelegate.cpp:181
SurgSim::Physics::FemPlyReaderDelegate::getElementName
virtual std::string getElementName() const =0
SurgSim::Physics::FemPlyReaderDelegate::FemPlyReaderDelegate
FemPlyReaderDelegate()
Constructor.
Definition: FemPlyReaderDelegate.cpp:27