Skip to content
Snippets Groups Projects
Commit c4d52b84 authored by Sören Peters's avatar Sören Peters
Browse files

Merge branch 'bug_fix_STLreader' into 'develop'

Bug fix: remove old ASCII reader part from the binary STL reader

See merge request irmb/VirtualFluids_dev!13
parents 34b76346 c1afa650
No related branches found
No related tags found
1 merge request!13Bug fix: remove old ASCII reader part from the binary STL reader
......@@ -1047,8 +1047,7 @@ void GbTriFaceMesh3D::readMeshFromSTLFile(string filename, bool removeRedundantN
dummy = in.readString();
nr += 3;
}
if (removeRedundantNodes)
{
if (removeRedundantNodes) {
this->deleteRedundantNodes(); // dort wird autoamtisch calculateValues() aufgerufen
} else {
this->calculateValues();
......@@ -1057,69 +1056,38 @@ void GbTriFaceMesh3D::readMeshFromSTLFile(string filename, bool removeRedundantN
/*======================================================================*/
void GbTriFaceMesh3D::readMeshFromSTLFileBinary(string filename, bool removeRedundantNodes)
{
//vector<GbTriFaceMesh3D::Vertex> *nodes = new vector<GbTriFaceMesh3D::Vertex>;
//vector<GbTriFaceMesh3D::TriFace> *triangles = new vector<GbTriFaceMesh3D::TriFace>;
int nr = 0;
if (!true) {
ifstream in(filename.c_str());
if (!in.good()) {
delete nodes;
delete triangles;
UB_THROW(UbException(UB_EXARGS, "Can not open STL file: " + filename));
}
char title[80];
std::string s0, s1;
float n0, n1, n2, f0, f1, f2, f3, f4, f5, f6, f7, f8;
in.read(title, 80);
while (!in.eof()) {
in >> s0; // facet || endsolid
if (s0 == "facet") {
in >> s1 >> n0 >> n1 >> n2; // normal x y z
in >> s0 >> s1; // outer loop
in >> s0 >> f0 >> f1 >> f2; // vertex x y z
in >> s0 >> f3 >> f4 >> f5; // vertex x y z
in >> s0 >> f6 >> f7 >> f8; // vertex x y z
in >> s0; // endloop
in >> s0; // endfacet
// Generate a new Triangle without Normal as 3 Vertices
nodes->push_back(GbTriFaceMesh3D::Vertex(f0, f1, f2));
nodes->push_back(GbTriFaceMesh3D::Vertex(f3, f4, f5));
nodes->push_back(GbTriFaceMesh3D::Vertex(f6, f7, f8));
triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2));
nr += 3;
} else if (s0 == "endsolid") {
break;
}
// vector<GbTriFaceMesh3D::Vertex> *nodes = new vector<GbTriFaceMesh3D::Vertex>;
// vector<GbTriFaceMesh3D::TriFace> *triangles = new vector<GbTriFaceMesh3D::TriFace>;
int nr = 0;
FILE *f = fopen(filename.c_str(), "rb");
if (!f) {
delete nodes;
delete triangles;
UB_THROW(UbException(UB_EXARGS, "Can not open STL file: " + filename));
}
char title[80];
int nFaces;
fread(title, 80, 1, f);
fread((void *)&nFaces, 4, 1, f);
float v[12]; // normal=3, vertices=3*3 = 12
unsigned short uint16;
// Every Face is 50 Bytes: Normal(3*float), Vertices(9*float), 2 Bytes Spacer
for (size_t i = 0; i < nFaces; ++i) {
for (size_t j = 0; j < 12; ++j) {
fread((void *)&v[j], sizeof(float), 1, f);
}
in.close();
fread((void *)&uint16, sizeof(unsigned short), 1, f); // spacer between successive faces
nodes->push_back(GbTriFaceMesh3D::Vertex(v[3], v[4], v[5]));
nodes->push_back(GbTriFaceMesh3D::Vertex(v[6], v[7], v[8]));
nodes->push_back(GbTriFaceMesh3D::Vertex(v[9], v[10], v[11]));
triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2));
nr += 3;
}
fclose(f);
if (removeRedundantNodes) {
this->deleteRedundantNodes(); // dort wird autoamtisch calculateValues() aufgerufen
} else {
FILE *f = fopen(filename.c_str(), "rb");
if (!f) {
delete nodes;
delete triangles;
UB_THROW(UbException(UB_EXARGS, "Can not open STL file: " + filename));
}
char title[80];
int nFaces;
fread(title, 80, 1, f);
fread((void *)&nFaces, 4, 1, f);
float v[12]; // normal=3, vertices=3*3 = 12
unsigned short uint16;
// Every Face is 50 Bytes: Normal(3*float), Vertices(9*float), 2 Bytes Spacer
for (size_t i = 0; i < nFaces; ++i) {
for (size_t j = 0; j < 12; ++j) {
fread((void *)&v[j], sizeof(float), 1, f);
}
fread((void *)&uint16, sizeof(unsigned short), 1, f); // spacer between successive faces
nodes->push_back(GbTriFaceMesh3D::Vertex(v[3], v[4], v[5]));
nodes->push_back(GbTriFaceMesh3D::Vertex(v[6], v[7], v[8]));
nodes->push_back(GbTriFaceMesh3D::Vertex(v[9], v[10], v[11]));
triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2));
nr += 3;
}
fclose(f);
this->calculateValues();
}
this->calculateValues();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment