Skip to content
Snippets Groups Projects
Commit d0cde92e authored by LEGOLAS\lenz's avatar LEGOLAS\lenz
Browse files

enables the STL Reader to ignore patches

parent dcf7fa1d
No related branches found
No related tags found
No related merge requests found
......@@ -17,9 +17,9 @@
#include "grid/NodeValues.h"
TriangularMesh* TriangularMesh::make(const std::string& fileName)
TriangularMesh* TriangularMesh::make(const std::string& fileName, const std::vector<uint> ignorePatches)
{
TriangularMesh* triangularMesh = new TriangularMesh(fileName);
TriangularMesh* triangularMesh = new TriangularMesh(fileName, ignorePatches);
return triangularMesh;
}
......@@ -30,11 +30,11 @@ TriangularMesh::TriangularMesh(const std::string& input, const BoundingBox& box)
this->findNeighbors();
}
TriangularMesh::TriangularMesh(const std::string& inputPath)
TriangularMesh::TriangularMesh(const std::string& inputPath, const std::vector<uint> ignorePatches)
{
this->minmax = BoundingBox::makeInvalidMinMaxBox();
this->triangleVec = STLReader::readSTL(inputPath, STLReader::ascii);
this->triangleVec = STLReader::readSTL(inputPath, STLReader::ascii, ignorePatches);
//this->triangleVec = STLReader::readSTL(inputPath);
initalizeDataFromTriangles();
this->findNeighbors();
......
......@@ -25,9 +25,9 @@ class TriangularMesh : public Object
{
public:
VF_PUBLIC static TriangularMesh* make(const std::string& fileName);
VF_PUBLIC static TriangularMesh* make(const std::string& fileName, const std::vector<uint> ignorePatches = std::vector<uint>());
VF_PUBLIC TriangularMesh();
VF_PUBLIC TriangularMesh(const std::string& inputPath);
VF_PUBLIC TriangularMesh(const std::string& inputPath, const std::vector<uint> ignorePatches = std::vector<uint>());
VF_PUBLIC TriangularMesh(const std::string& inputPath, const BoundingBox &box);
HOSTDEVICE VF_PUBLIC ~TriangularMesh();
......
......@@ -39,9 +39,9 @@ std::vector<Triangle> STLReader::readSTL(const std::string& name)
exit(1);
}
std::vector<Triangle> STLReader::readSTL(const std::string & name, FileType fileType)
std::vector<Triangle> STLReader::readSTL(const std::string & name, FileType fileType, const std::vector<uint> ignorePatches)
{
if ( fileType == ascii ) return readASCIISTLWithPatches(name);
if ( fileType == ascii ) return readASCIISTLWithPatches(name, ignorePatches);
else return readBinarySTL(name);
}
......@@ -77,7 +77,7 @@ std::vector<Triangle> STLReader::readASCIISTL(const std::string& name)
}
std::vector<Triangle> STLReader::readASCIISTLWithPatches(const std::string& name)
std::vector<Triangle> STLReader::readASCIISTLWithPatches(const std::string& name, const std::vector<uint> ignorePatches)
{
*logging::out << logging::Logger::INFO_HIGH << "Start reading ascii STL file:\n";
*logging::out << logging::Logger::INFO_HIGH << " " + name + "\n";
......@@ -92,6 +92,8 @@ std::vector<Triangle> STLReader::readASCIISTLWithPatches(const std::string& name
uint currentFacetLine = 0;
bool ignoreCurrentPatch = false;
Vertex vertex1, vertex2, vertex3, normal;
while( std::getline(file, line) ){
......@@ -99,10 +101,18 @@ std::vector<Triangle> STLReader::readASCIISTLWithPatches(const std::string& name
// trim the string
line = line.substr( line.find_first_not_of(" "), line.find_last_not_of(" ") + 1 );
if( line.substr( 0, line.find(' ') ) == "color" ) continue;
// ========================================================================================
if ( currentFacetLine == 0 && line.substr( 0, line.find(' ') ) == "solid" )
{
*logging::out << logging::Logger::INFO_INTERMEDIATE << " Reading STL-Group " << line.substr( line.find(' ') + 1 ) << " as patch " << currentPatchIndex << "\n";
ignoreCurrentPatch = std::find( ignorePatches.begin(), ignorePatches.end(), currentPatchIndex ) != ignorePatches.end();
if( !ignoreCurrentPatch )
*logging::out << logging::Logger::INFO_INTERMEDIATE << " Reading STL-Group " << line.substr( line.find(' ') + 1 ) << " as patch " << currentPatchIndex << "\n";
else
*logging::out << logging::Logger::WARNING << " Ignoring STL-Group " << line.substr( line.find(' ') + 1 ) << " as patch " << currentPatchIndex << "\n";
currentFacetLine++;
}
else if( currentFacetLine == 1 && line.substr( 0, line.find(' ') ) == "endsolid" )
......@@ -141,12 +151,14 @@ std::vector<Triangle> STLReader::readASCIISTLWithPatches(const std::string& name
}
else if( currentFacetLine == 7 && line.substr( 0, line.find(' ') ) == "endfacet" )
{
Triangle tri = Triangle(vertex1, vertex2, vertex3, normal);
tri.calcNormal();
if( !ignoreCurrentPatch ){
Triangle tri = Triangle(vertex1, vertex2, vertex3, normal);
tri.calcNormal();
tri.patchIndex = currentPatchIndex;
tri.patchIndex = currentPatchIndex;
triangles.push_back(tri);
triangles.push_back(tri);
}
currentFacetLine = 1;
}
......
......@@ -7,6 +7,8 @@
#include <VirtualFluidsDefinitions.h>
#include "core/DataTypes.h"
struct Triangle;
struct Vertex;
class BoundingBox;
......@@ -18,12 +20,12 @@ public:
enum FileType { ascii, binary };
static std::vector<Triangle> readSTL(const std::string& name);
static std::vector<Triangle> readSTL(const std::string& name, FileType fileType );
static std::vector<Triangle> readSTL(const std::string& name, FileType fileType, const std::vector<uint> ignorePatches = std::vector<uint>() );
static std::vector<Triangle> readSTL(const BoundingBox &box, const std::string& name);
static std::vector<Triangle> readBinarySTL(const std::string& name);
static std::vector<Triangle> readASCIISTL(const std::string& name);
static std::vector<Triangle> readASCIISTLWithPatches(const std::string& name);
static std::vector<Triangle> readASCIISTLWithPatches(const std::string& name, const std::vector<uint> ignorePatches);
static std::vector<Triangle> readBinarySTL(const BoundingBox &box, const std::string& name);
static std::vector<Triangle> readASCIISTL(const BoundingBox &box, const std::string& name);
......
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