PeriDyno 1.0.0
Loading...
Searching...
No Matches
TetrahedralSystem.cpp
Go to the documentation of this file.
1#include "TetrahedralSystem.h"
2
4
5#include "Topology/PointSet.h"
6#include "Topology/TetrahedronSet.h"
7
10
11namespace dyno
12{
14
15 template<typename TDataType>
17 : Node()
18 {
19 auto topo = std::make_shared<TetrahedronSet<TDataType>>();
20 this->stateTetrahedronSet()->setDataPtr(topo);
21 }
22
23 template<typename TDataType>
27
28 template<typename TDataType>
30 {
31 Gmsh meshLoader;
32 meshLoader.loadFile(filename);
33
34 auto tetSet = TypeInfo::cast<TetrahedronSet<TDataType>>(this->stateTetrahedronSet()->getDataPtr());
35
36
37 tetSet->setPoints(meshLoader.m_points);
38 tetSet->setTetrahedrons(meshLoader.m_tets);
39 tetSet->update();
40 }
41
42 template<typename TDataType>
44 {
45 Smesh meshLoader;
46 meshLoader.loadNodeFile(filename + ".node");
47 //meshLoader.loadTriangleFile(filename + ".face");
48 meshLoader.loadTetFile(filename + ".ele");
49
50 auto tetSet = TypeInfo::cast<TetrahedronSet<TDataType>>(this->stateTetrahedronSet()->getDataPtr());
51
52 tetSet->setPoints(meshLoader.m_points);
53 tetSet->setTetrahedrons(meshLoader.m_tets);
54 tetSet->update();
55 }
56
57 template<typename TDataType>
59 {
60 auto tetSet = TypeInfo::cast<TetrahedronSet<TDataType>>(this->stateTetrahedronSet()->getDataPtr());
61 if (tetSet == nullptr) return;
62
63 if (!this->statePosition()->isEmpty())
64 {
65 int num = this->statePosition()->size();
66 auto& pts = tetSet->getPoints();
67 if (num != pts.size())
68 {
69 pts.resize(num);
70 }
71
72 //Function1Pt::copy(pts, this->statePosition()->getData());
73 pts.assign(this->statePosition()->getData(), this->statePosition()->getData().size());
74 }
75 }
76
77
78 template<typename TDataType>
80 {
81 auto tetSet = this->stateTetrahedronSet()->getDataPtr();
82 if (tetSet == nullptr) return;
83
84 auto& pts = tetSet->getPoints();
85
86 if (pts.size() > 0)
87 {
88 this->statePosition()->resize(pts.size());
89 this->stateVelocity()->resize(pts.size());
90 this->stateForce()->resize(pts.size());
91
92 this->statePosition()->getData().assign(pts);
93 this->stateVelocity()->getDataPtr()->reset();
94 }
95
97 }
98
99 template<typename TDataType>
101 {
102 auto ptSet = this->stateTetrahedronSet()->getDataPtr();
103 ptSet->translate(t);
104
105 return true;
106 }
107
108
109 template<typename TDataType>
111 {
112 auto ptSet = this->stateTetrahedronSet()->getDataPtr();
113 ptSet->scale(s);
114
115 return true;
116 }
117
118
119 template<typename TDataType>
121 {
122 auto ptSet = this->stateTetrahedronSet()->getDataPtr();
123 ptSet->rotate(q);
124
125 return true;
126 }
127
129}
#define DEFINE_CLASS(name)
Definition Object.h:140
#define IMPLEMENT_TCLASS(name, T1)
Definition Object.h:103
std::vector< TopologyModule::Tetrahedron > m_tets
Definition gmsh_helper.h:17
void loadFile(std::string filename)
std::vector< Vec3f > m_points
Definition gmsh_helper.h:16
virtual void resetStates()
Definition Node.cpp:214
void loadTetFile(std::string filename)
std::vector< TopologyModule::Tetrahedron > m_tets
void loadNodeFile(std::string filename)
std::vector< Vec3f > m_points
virtual bool scale(Real s)
virtual bool rotate(Quat< Real > q)
void loadVertexFromFile(std::string filename)
void loadVertexFromGmshFile(std::string filename)
virtual bool translate(Coord t)
TA * cast(TB *b)
Definition Typedef.inl:286
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25