PeriDyno 1.0.0
Loading...
Searching...
No Matches
smesh_helper.cpp
Go to the documentation of this file.
1#include "smesh_helper.h"
2#include <string.h>
3#include <fstream>
4#include <iostream>
5using namespace std;
6
7namespace dyno
8{
9
10void Smesh::loadFile(string filename)
11{
12 fstream filein(filename);
13 if (!filein.is_open())
14 {
15 cout << "can't open smesh file:" << filename << endl;
16 exit(0);
17 }
18
19 string part_str;
20 filein >> part_str;
21 if (part_str != "*VERTICES")
22 {
23 cout << "first non-empty line must be '*VERTICES'." << endl;
24 exit(0);
25 }
26 int num_points = 0, point_dim = 0;
27 filein >> num_points >> point_dim;
28 int dummy;
29 filein >> dummy >> dummy;
30 m_points.resize(num_points, Vec3f(0.0f));
31 for (int i = 0; i < num_points; ++i)
32 {
33 int vert_index;
34 filein >> vert_index;
35 for (int j = 0; j < point_dim; ++j)
36 {
37 filein >> m_points[i][j];
38 }
39 }
40
41 filein >> part_str;
42
43 while (!filein.eof())
44 {
45 string ele_type = "";
46 int num_eles = 0, ele_dim = 0;
47 filein >> ele_type >> num_eles >> ele_dim;
48 int dummy;
49 filein >> dummy;
50 if (ele_type == "LINE")
51 {
52 m_edges.resize(num_eles);
53 for (int i = 0; i < num_eles; ++i)
54 {
55 int ele_index;
56 filein >> ele_index;
57 for (int j = 0; j < ele_dim; ++j)
58 {
59 filein >> m_edges[i][j];
60 m_edges[i][j] = m_edges[i][j] - 1;
61 }
62 }
63 }
64 else if (ele_type == "TRIANGLE")
65 {
66 m_triangles.resize(num_eles);
67 for (int i = 0; i < num_eles; ++i)
68 {
69 int ele_index;
70 filein >> ele_index;
71 for (int j = 0; j < ele_dim; ++j)
72 {
73 filein >> m_triangles[i][j];
74 m_triangles[i][j] = m_triangles[i][j] - 1;
75 }
76 }
77 }
78 else if (ele_type == "QUAD")
79 {
80 m_quads.resize(num_eles);
81 for (int i = 0; i < num_eles; ++i)
82 {
83 int ele_index;
84 filein >> ele_index;
85 for (int j = 0; j < ele_dim; ++j)
86 {
87 filein >> m_quads[i][j];
88 m_quads[i][j] = m_quads[i][j] - 1;
89 }
90 }
91 }
92 else if (ele_type == "TET")
93 {
94 m_tets.resize(num_eles);
95 for (int i = 0; i < num_eles; ++i)
96 {
97 int ele_index;
98 filein >> ele_index;
99 for (int j = 0; j < ele_dim; ++j)
100 {
101 filein >> m_tets[i][j];
102 m_tets[i][j] = m_tets[i][j] - 1;
103 }
104 }
105 }
106 else if (ele_type == "HEX")
107 {
108 m_hexs.resize(num_eles);
109 for (int i = 0; i < num_eles; ++i)
110 {
111 int ele_index;
112 filein >> ele_index;
113 for (int j = 0; j < ele_dim; ++j)
114 {
115 filein >> m_hexs[i][j];
116 m_hexs[i][j] = m_hexs[i][j] - 1;
117 }
118 }
119 }
120 else
121 {
122 cout << "unrecognized element type:" << ele_type << endl;
123 }
124 }
125
126 filein.close();
127}
128
129void Smesh::loadNodeFile(std::string filename)
130{
131 fstream filein(filename);
132 if (!filein.is_open())
133 {
134 cout << "can't open node file:" << filename << endl;
135 exit(0);
136 }
137
138 int num_points = 0, point_dim = 0;
139 filein >> num_points >> point_dim;
140 int dummy;
141 filein >> dummy >> dummy;
142 m_points.resize(num_points, Vec3f(0.0f));
143 for (int i = 0; i < num_points; ++i)
144 {
145 int vert_index;
146 filein >> vert_index;
147 for (int j = 0; j < point_dim; ++j)
148 {
149 filein >> m_points[i][j];
150 }
151 }
152
153 filein.close();
154}
155
156void Smesh::loadEdgeFile(std::string filename)
157{
158 fstream filein(filename);
159 if (!filein.is_open())
160 {
161 cout << "can't open ele file:" << filename << endl;
162 exit(0);
163 }
164
165 int num_of_edges = 0, edge_dim = 0;
166 filein >> num_of_edges >> edge_dim;
167 m_edges.resize(num_of_edges);
168
169 int dummy;
170 for (int i = 0; i < num_of_edges; ++i)
171 {
172 int vert_index;
173 filein >> vert_index;
174
175 filein >> m_edges[i][0] >> m_edges[i][1] >> dummy;
176 }
177
178 filein.close();
179}
180
181void Smesh::loadTriangleFile(std::string filename)
182{
183 fstream filein(filename);
184 if (!filein.is_open())
185 {
186 cout << "can't open ele file:" << filename << endl;
187 exit(0);
188 }
189
190 int dummy;
191
192 int num_of_triangles = 0;
193 filein >> num_of_triangles >> dummy;
194 m_triangles.resize(num_of_triangles);
195
196 for (int i = 0; i < num_of_triangles; ++i)
197 {
198 int vert_index;
199 filein >> vert_index;
200
201 filein >> m_triangles[i][0] >> m_triangles[i][1] >> m_triangles[i][2] >> dummy;
202 }
203
204 filein.close();
205}
206
207void Smesh::loadTetFile(std::string filename)
208{
209 fstream filein(filename);
210 if (!filein.is_open())
211 {
212 cout << "can't open ele file:" << filename << endl;
213 exit(0);
214 }
215
216 int ele_num = 0, ele_dim = 0;
217 int dummy;
218 filein >> ele_num >> ele_dim >> dummy;
219
220 m_tets.resize(ele_num);
221 for (int i = 0; i < ele_num; ++i)
222 {
223 int ele_index;
224 filein >> ele_index;
225 for (int j = 0; j < ele_dim; ++j)
226 {
227 filein >> m_tets[i][j];
228 }
229 }
230
231 filein.close();
232}
233
234} // namespace dyno
void loadTetFile(std::string filename)
std::vector< TopologyModule::Edge > m_edges
std::vector< TopologyModule::Tetrahedron > m_tets
void loadFile(std::string filename)
void loadTriangleFile(std::string filename)
void loadEdgeFile(std::string filename)
void loadNodeFile(std::string filename)
std::vector< TopologyModule::Quad > m_quads
std::vector< TopologyModule::Triangle > m_triangles
std::vector< TopologyModule::Hexahedron > m_hexs
std::vector< Vec3f > m_points
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Vector< float, 3 > Vec3f
Definition Vector3D.h:93