PeriDyno 1.0.0
Loading...
Searching...
No Matches
Smesh.cpp
Go to the documentation of this file.
1#include "Smesh.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, dyno::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// if (part_str != "*ELEMENTS")
43// {
44// cout << "after vertices, the first non-empty line must be '*ELEMENTS'." << endl;
45// return;
46// }
47
48 while (!filein.eof())
49 {
50 string ele_type = "";
51 int num_eles = 0, ele_dim = 0;
52 filein >> ele_type >> num_eles >> ele_dim;
53 int dummy;
54 filein >> dummy;
55 if (ele_type == "LINE")
56 {
57 m_edges.resize(num_eles);
58 for (int i = 0; i < num_eles; ++i)
59 {
60 int ele_index;
61 filein >> ele_index;
62 for (int j = 0; j < ele_dim; ++j)
63 {
64 filein >> m_edges[i][j];
65 m_edges[i][j] = m_edges[i][j] - 1;
66 }
67 }
68 }
69 else if (ele_type == "TRIANGLE")
70 {
71 m_triangles.resize(num_eles);
72 for (int i = 0; i < num_eles; ++i)
73 {
74 int ele_index;
75 filein >> ele_index;
76 for (int j = 0; j < ele_dim; ++j)
77 {
78 filein >> m_triangles[i][j];
79 m_triangles[i][j] = m_triangles[i][j] - 1;
80 }
81 }
82 }
83 else if (ele_type == "QUAD")
84 {
85 m_quads.resize(num_eles);
86 for (int i = 0; i < num_eles; ++i)
87 {
88 int ele_index;
89 filein >> ele_index;
90 for (int j = 0; j < ele_dim; ++j)
91 {
92 filein >> m_quads[i][j];
93 m_quads[i][j] = m_quads[i][j] - 1;
94 }
95 }
96 }
97 else if (ele_type == "TET")
98 {
99 m_tets.resize(num_eles);
100 for (int i = 0; i < num_eles; ++i)
101 {
102 int ele_index;
103 filein >> ele_index;
104 for (int j = 0; j < ele_dim; ++j)
105 {
106 filein >> m_tets[i][j];
107 m_tets[i][j] = m_tets[i][j] - 1;
108 }
109 }
110 }
111 else if (ele_type == "HEX")
112 {
113 m_hexs.resize(num_eles);
114 for (int i = 0; i < num_eles; ++i)
115 {
116 int ele_index;
117 filein >> ele_index;
118 for (int j = 0; j < ele_dim; ++j)
119 {
120 filein >> m_hexs[i][j];
121 m_hexs[i][j] = m_hexs[i][j] - 1;
122 }
123 }
124 }
125 else
126 {
127 cout << "unrecognized element type:" << ele_type << endl;
128 }
129 }
130
131 filein.close();
132}
133
134void Smesh::loadNodeFile(std::string filename)
135{
136 fstream filein(filename);
137 if (!filein.is_open())
138 {
139 cout << "can't open node file:" << filename << endl;
140 exit(0);
141 }
142
143 int num_points = 0, point_dim = 0;
144 filein >> num_points >> point_dim;
145 int dummy;
146 filein >> dummy >> dummy;
147 m_points.resize(num_points, dyno::Vec3f(0.0f));
148 for (int i = 0; i < num_points; ++i)
149 {
150 int vert_index;
151 filein >> vert_index;
152 for (int j = 0; j < point_dim; ++j)
153 {
154 filein >> m_points[i][j];
155 }
156 }
157
158 filein.close();
159}
160
161void Smesh::loadEdgeFile(std::string filename)
162{
163 fstream filein(filename);
164 if (!filein.is_open())
165 {
166 cout << "can't open ele file:" << filename << endl;
167 exit(0);
168 }
169
170 int num_of_edges = 0, edge_dim = 0;
171 filein >> num_of_edges >> edge_dim;
172 m_edges.resize(num_of_edges);
173
174 int dummy;
175 for (int i = 0; i < num_of_edges; ++i)
176 {
177 int vert_index;
178 filein >> vert_index;
179
180 filein >> m_edges[i][0] >> m_edges[i][1] >> dummy;
181 }
182
183 filein.close();
184}
185
186void Smesh::loadTriangleFile(std::string filename)
187{
188 fstream filein(filename);
189 if (!filein.is_open())
190 {
191 cout << "can't open ele file:" << filename << endl;
192 exit(0);
193 }
194
195 int dummy;
196
197 int num_of_triangles = 0;
198 filein >> num_of_triangles >> dummy;
199 m_triangles.resize(num_of_triangles);
200
201 for (int i = 0; i < num_of_triangles; ++i)
202 {
203 int vert_index;
204 filein >> vert_index;
205
206 filein >> m_triangles[i][0] >> m_triangles[i][1] >> m_triangles[i][2] >> dummy;
207 }
208
209 filein.close();
210}
211
212void Smesh::loadTetFile(std::string filename)
213{
214 fstream filein(filename);
215 if (!filein.is_open())
216 {
217 cout << "can't open ele file:" << filename << endl;
218 exit(0);
219 }
220
221 int ele_num = 0, ele_dim = 0;
222 int dummy;
223 filein >> ele_num >> ele_dim >> dummy;
224
225 m_tets.resize(ele_num);
226 for (int i = 0; i < ele_num; ++i)
227 {
228 int ele_index;
229 filein >> ele_index;
230 for (int j = 0; j < ele_dim; ++j)
231 {
232 filein >> m_tets[i][j];
233 }
234 }
235
236 filein.close();
237}
238
239} // 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