opensurgsim
MassSpringModel.h
1 // This file is a part of the OpenSurgSim project.
2 // Copyright 2020, 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_MASSSPRINGMODEL_H
17 #define SURGSIM_PHYSICS_MASSSPRINGMODEL_H
18 
19 #include <vector>
20 
21 #include "SurgSim/DataStructures/OptionalValue.h"
22 #include "SurgSim/DataStructures/Vertices.h"
23 #include "SurgSim/Framework/Asset.h"
24 #include "SurgSim/Math/OdeState.h"
25 #include "SurgSim/Physics/Mass.h"
26 
27 namespace SurgSim
28 {
29 namespace Physics
30 {
31 
32 class Spring;
33 
34 SURGSIM_STATIC_REGISTRATION(MassSpringModel);
35 
38  public std::enable_shared_from_this<MassSpringModel>
39 {
40 public:
43 
44  SURGSIM_CLASSNAME(SurgSim::Physics::MassSpringModel);
45 
50  void addMass(const std::shared_ptr<Mass> mass);
51 
54  void addSpring(const std::shared_ptr<Spring> spring);
55 
58  size_t getNumMasses() const;
59 
62  size_t getNumSprings() const;
63 
65  const std::vector<std::shared_ptr<Mass>>& getMasses() const;
66 
72  const std::vector<std::shared_ptr<Spring>>& getSprings() const;
73 
78  const std::shared_ptr<Mass>& getMass(size_t nodeId) const;
79 
84  const std::shared_ptr<Spring>& getSpring(size_t springId) const;
85 
89  size_t addBoundaryCondition(size_t boundaryCondition);
90 
93  const std::vector<size_t>& getBoundaryConditions() const;
94 
97  std::vector<size_t>& getBoundaryConditions();
98 
102  size_t getBoundaryCondition(size_t id) const;
103 
107  size_t addElement(const std::vector<size_t>& nodeIds);
108 
112  const std::vector<size_t>& getNodeIds(size_t index) const;
113 
115  size_t getNumElements() const;
116 
118  size_t getNumNodesPerElement() const;
119 
121  void setRadius(double radius);
124 
126  void setThickness(double thickness);
129 
134  bool save(const std::string& fileName, double physicsLength = 0.0) const;
135 
136 protected:
137  bool doLoad(const std::string& filePath) override;
138 
140  std::vector<std::shared_ptr<Mass>> m_masses;
141 
143  std::vector<std::shared_ptr<Spring>> m_springs;
144 
146  std::vector<size_t> m_boundaryConditions;
147 
149  std::vector<std::vector<size_t>> m_nodeIds;
150 
153 
156 };
157 
158 } // namespace Physics
159 } // namespace SurgSim
160 
161 #endif // SURGSIM_PHYSICS_MASSSPRINGMODEL_H
Wraps glewInit() to separate the glew opengl definitions from the osg opengl definitions only imgui n...
Definition: AddRandomSphereBehavior.cpp:36
This class is used to facilitate file loading.
Definition: Asset.h:39
DataStructures::OptionalValue< double > m_thickness
The thickness, if any.
Definition: MassSpringModel.h:155
size_t getNumNodesPerElement() const
Definition: MassSpringModel.cpp:117
size_t addElement(const std::vector< size_t > &nodeIds)
Stores an element&#39;s node ids, e.g., for a 2d shape this may store triangle nodes. ...
Definition: MassSpringModel.cpp:98
const std::vector< size_t > & getBoundaryConditions() const
Gets entire vector of boundary conditions.
Definition: MassSpringModel.cpp:83
size_t getNumElements() const
Definition: MassSpringModel.cpp:112
const std::shared_ptr< Mass > & getMass(size_t nodeId) const
Retrieves the mass of a given node.
Definition: MassSpringModel.cpp:65
size_t addBoundaryCondition(size_t boundaryCondition)
Add boundary condition to mesh.
Definition: MassSpringModel.cpp:77
std::vector< std::shared_ptr< Spring > > m_springs
Springs.
Definition: MassSpringModel.h:143
const std::shared_ptr< Spring > & getSpring(size_t springId) const
Retrieves a given spring from its id.
Definition: MassSpringModel.cpp:71
std::vector< std::shared_ptr< Mass > > m_masses
Masses.
Definition: MassSpringModel.h:140
void setThickness(double thickness)
Definition: MassSpringModel.cpp:134
const std::vector< std::shared_ptr< Mass > > & getMasses() const
Retrieves the masses.
Definition: MassSpringModel.cpp:55
MassSpringModel()
Default constructor.
Definition: MassSpringModel.cpp:31
Base class for a data structure for holding MassSpring mesh data.
Definition: MassSpringModel.h:37
void addSpring(const std::shared_ptr< Spring > spring)
Adds a spring, and sets its rest length.
Definition: MassSpringModel.cpp:40
const DataStructures::OptionalValue< double > & getRadius() const
Definition: MassSpringModel.cpp:129
void setRadius(double radius)
Definition: MassSpringModel.cpp:124
size_t getNumSprings() const
Gets the number of springs.
Definition: MassSpringModel.cpp:50
std::vector< std::vector< size_t > > m_nodeIds
The node ids for each element, e.g., for triangles it contains the three node ids for each triangle...
Definition: MassSpringModel.h:149
bool doLoad(const std::string &filePath) override
Derived classes will overwrite this method to do actual loading.
Definition: MassSpringModel.cpp:268
const std::vector< size_t > & getNodeIds(size_t index) const
Get an element&#39;s node ids.
Definition: MassSpringModel.cpp:107
size_t getBoundaryCondition(size_t id) const
Retrieves a specific boundary condition.
Definition: MassSpringModel.cpp:93
const std::vector< std::shared_ptr< Spring > > & getSprings() const
Retrieves a given spring from its id.
Definition: MassSpringModel.cpp:60
size_t getNumMasses() const
Gets the number of masses.
Definition: MassSpringModel.cpp:45
std::vector< size_t > m_boundaryConditions
Vector of vertex ids that have boundary conditions.
Definition: MassSpringModel.h:146
DataStructures::OptionalValue< double > m_radius
The radius, if any.
Definition: MassSpringModel.h:152
bool save(const std::string &fileName, double physicsLength=0.0) const
Save the current MassSpring mesh to a ply file.
Definition: MassSpringModel.cpp:144
void addMass(const std::shared_ptr< Mass > mass)
Adds a mass.
Definition: MassSpringModel.cpp:35
Base class for mesh structures, handling basic vertex functionality.
Definition: Vertices.h:51
const DataStructures::OptionalValue< double > & getThickness() const
Definition: MassSpringModel.cpp:139