diff --git a/build/msbuild/MPM-Geomechanics.vcxproj b/build/msbuild/MPM-Geomechanics.vcxproj index 297ba28..e23dea9 100644 --- a/build/msbuild/MPM-Geomechanics.vcxproj +++ b/build/msbuild/MPM-Geomechanics.vcxproj @@ -105,7 +105,7 @@ Level3 true - _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + _DEBUG;_CONSOLE;%(PreprocessorDefinitions);_CRT_SECURE_NO_WARNINGS true $(SolutionDir)../../inc @@ -120,7 +120,7 @@ true true true - NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + NDEBUG;_CONSOLE;%(PreprocessorDefinitions); _CRT_SECURE_NO_WARNINGS true $(SolutionDir)../../inc true @@ -164,6 +164,7 @@ + @@ -178,6 +179,10 @@ true true + + true + true + @@ -201,6 +206,7 @@ + diff --git a/build/msbuild/MPM-Geomechanics.vcxproj.filters b/build/msbuild/MPM-Geomechanics.vcxproj.filters index 1f54844..c879136 100644 --- a/build/msbuild/MPM-Geomechanics.vcxproj.filters +++ b/build/msbuild/MPM-Geomechanics.vcxproj.filters @@ -40,6 +40,10 @@ tests + + + tests + @@ -77,6 +81,7 @@ + diff --git a/build/msbuild/MPM-Geomechanics.vcxproj.user b/build/msbuild/MPM-Geomechanics.vcxproj.user index 8052d4a..f428d85 100644 --- a/build/msbuild/MPM-Geomechanics.vcxproj.user +++ b/build/msbuild/MPM-Geomechanics.vcxproj.user @@ -1,8 +1,13 @@  - boussinesq-problem.json - C:\Users\fabri\MPM\MPM-Geomechanics\tests\boussinesq problem + plane-slope-ASCII.stl + C:\Users\fabri\MPM\MPM-Geomechanics\tests\stl-mesh-reader\ + WindowsLocalDebugger + + + + WindowsLocalDebugger \ No newline at end of file diff --git a/inc/Mesh/Node.h b/inc/Mesh/Node.h index 35f2af5..5b4b0e1 100644 --- a/inc/Mesh/Node.h +++ b/inc/Mesh/Node.h @@ -12,7 +12,7 @@ using Eigen::Vector3d; /// \class Node -/// \brief Represents a mesh node. +/// \brief Represents a mesh node class Node { public: diff --git a/inc/Mesh/STLReader.h b/inc/Mesh/STLReader.h new file mode 100644 index 0000000..cfb06b9 --- /dev/null +++ b/inc/Mesh/STLReader.h @@ -0,0 +1,39 @@ +#ifndef STL_READER_H +#define STL_READER_H + +#include +using namespace Eigen; + +#include +#include + +/// @brief Struct representing a triangle +struct Triangle { + Vector3f normal; + Vector3f v1, v2, v3; +}; + +/// @brief Class to read STL files +class STLReader { + +public: + /// @brief Read the STL file + bool read(const std::string& filename); + + /// @brief Get the triangles of the STL mesh + /// @return Vector containing the triangles + const std::vector& getTriangles() const; + +private: + + /// @brief Vector containing the triangles + std::vector triangles; + + /// @brief Read the ASCII STL file + bool readASCII(std::ifstream& file); + + /// @brief Read the binary STL file + bool readBinary(std::ifstream& file); +}; + +#endif diff --git a/src/STLReader.cpp b/src/STLReader.cpp new file mode 100644 index 0000000..e682e78 --- /dev/null +++ b/src/STLReader.cpp @@ -0,0 +1,90 @@ +#include "Mesh/STLReader.h" +#include +#include +#include + +bool STLReader::read(const std::string& filename) +{ + // open the file + std::ifstream file(filename, std::ios::binary); + if (!file.is_open()) { + std::cerr << "Error opening STL file: " << filename << std::endl; + return false; + } + + // read header to determine the format + char header[80]; + file.read(header, 80); + + // determine if it is ASCII or binary + std::string headerStr(header, 80); + if (headerStr.find("solid") == 0) { + file.close(); + file.open(filename); // open it in text mode + return readASCII(file); + } else { + return readBinary(file); + } +} + +bool STLReader::readASCII(std::ifstream& file) +{ + // clear triangles + triangles.clear(); + + std::string line; + while (std::getline(file, line)) + { + std::istringstream ss(line); + std::string word; + ss >> word; + + if (word == "facet") + { + Triangle triangle; + ss >> word >> triangle.normal.x() >> triangle.normal.y() >> triangle.normal.z(); + + // read vertex coordinates + std::getline(file, line); // outer loop + std::getline(file, line); + std::sscanf(line.c_str(), " vertex %f %f %f", &triangle.v1.x(), &triangle.v1.y(), &triangle.v1.z()); + + std::getline(file, line); + std::sscanf(line.c_str(), " vertex %f %f %f", &triangle.v2.x(), &triangle.v2.y(), &triangle.v2.z()); + + std::getline(file, line); + std::sscanf(line.c_str(), " vertex %f %f %f", &triangle.v3.x(), &triangle.v3.y(), &triangle.v3.z()); + + triangles.push_back(triangle); + + std::getline(file, line); // end loop + std::getline(file, line); // end facet + } + } + return true; +} + +bool STLReader::readBinary(std::ifstream& file) { + + // clear triangles + triangles.clear(); + + uint32_t numTriangles; + + file.read(reinterpret_cast(&numTriangles), sizeof(uint32_t)); + + for (uint32_t i = 0; i < numTriangles; ++i) { + Triangle triangle; + file.read(reinterpret_cast(&triangle.normal), sizeof(Vector2d)); + file.read(reinterpret_cast(&triangle.v1), sizeof(Vector2d)); + file.read(reinterpret_cast(&triangle.v2), sizeof(Vector2d)); + file.read(reinterpret_cast(&triangle.v3), sizeof(Vector2d)); + file.ignore(2); // Ignore attributes for now + triangles.push_back(triangle); + } + return true; +} + +const std::vector& STLReader::getTriangles() const { + return triangles; +} \ No newline at end of file diff --git a/tests/stl-mesh-reader/plane-slope-ASCII.stl b/tests/stl-mesh-reader/plane-slope-ASCII.stl new file mode 100644 index 0000000..ae3446d --- /dev/null +++ b/tests/stl-mesh-reader/plane-slope-ASCII.stl @@ -0,0 +1,1388 @@ +solid Created by Gmsh +facet normal 0.707107 -2.41646e-16 0.707107 + outer loop + vertex 3.17954241480685 3.250437217869697 6.82045758519315 + vertex 3.969582167509996 3.415445991536189 6.030417832490004 + vertex 3.6431698024793 4.169695949820518 6.356830197520701 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 2.345237724425496 0.8613357895616083 7.654762275574504 + vertex 3.014950805023464 1.376319323293605 6.985049194976536 + vertex 2.419859477917472 1.998690092818164 7.580140522082528 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.614095695227663 2.040696914961257 2.385904304772337 + vertex 7.003999530869748 1.433017082643422 2.996000469130252 + vertex 7.654474644719058 0.8604816887728108 2.345525355280942 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.003999530869748 1.433017082643422 2.996000469130252 + vertex 6.469222017933878 1.921136177084002 3.530777982066122 + vertex 6.394383597929608 0.8505270256839526 3.605616402070392 + endloop +endfacet +facet normal 0.707107 1.47298e-17 0.707107 + outer loop + vertex 2.345237724425496 0.8613357895616083 7.654762275574504 + vertex 2.419859477917472 1.998690092818164 7.580140522082528 + vertex 1.805260511923569 1.558981863375247 8.194739488076431 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.195055796920238 1.557270930560543 1.804944203079762 + vertex 7.614095695227663 2.040696914961257 2.385904304772337 + vertex 7.654474644719058 0.8604816887728108 2.345525355280942 + endloop +endfacet +facet normal 0.707107 4.76171e-16 0.707107 + outer loop + vertex 2.999999999996958 4.183503421363176 7.000000000003041 + vertex 3.17954241480685 3.250437217869697 6.82045758519315 + vertex 3.6431698024793 4.169695949820518 6.356830197520701 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.652129100876608 2.992836725497768 2.347870899123392 + vertex 8.23073076685316 3.378932402639875 1.76926923314684 + vertex 7.665327845975324 4.081800869933908 2.334672154024676 + endloop +endfacet +facet normal 0.707107 -1.83222e-16 0.707107 + outer loop + vertex 3.660080065314131 2.672880977695362 6.339919934685869 + vertex 3.969582167509996 3.415445991536189 6.030417832490004 + vertex 3.17954241480685 3.250437217869697 6.82045758519315 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.982971189971538 2.55170895426492 3.017028810028462 + vertex 6.469222017933878 1.921136177084002 3.530777982066122 + vertex 7.003999530869748 1.433017082643422 2.996000469130252 + endloop +endfacet +facet normal 0.707107 -3.0598e-16 0.707107 + outer loop + vertex 3.014950805023464 1.376319323293605 6.985049194976536 + vertex 3.6209681122334 0.8362480141311495 6.379031887766599 + vertex 3.558108194265185 1.739002676975781 6.441891805734815 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.982971189971538 2.55170895426492 3.017028810028462 + vertex 7.003999530869748 1.433017082643422 2.996000469130252 + vertex 7.614095695227663 2.040696914961257 2.385904304772337 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.469222017933878 1.921136177084002 3.530777982066122 + vertex 5.827763123493424 1.520656192867491 4.172236876506576 + vertex 6.394383597929608 0.8505270256839526 3.605616402070392 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.665327845975324 4.081800869933908 2.334672154024676 + vertex 7.175285793923991 3.46802669034169 2.824714206076009 + vertex 7.652129100876608 2.992836725497768 2.347870899123392 + endloop +endfacet +facet normal 0.707107 -4.14346e-16 0.707107 + outer loop + vertex 3.014950805023464 1.376319323293605 6.985049194976536 + vertex 2.999999999996958 0.612924324867664 7.000000000003041 + vertex 3.6209681122334 0.8362480141311495 6.379031887766599 + endloop +endfacet +facet normal 0.707107 -3.421e-16 0.707107 + outer loop + vertex 2.419859477917472 1.998690092818164 7.580140522082528 + vertex 2.513924504462671 2.893919355712134 7.48607549553733 + vertex 1.833180368892304 2.514118127178895 8.166819631107696 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.394383597929608 0.8505270256839526 3.605616402070392 + vertex 6.999999999997728 0.6116587536763402 3.000000000002272 + vertex 7.003999530869748 1.433017082643422 2.996000469130252 + endloop +endfacet +facet normal 0.707107 7.81e-16 0.707107 + outer loop + vertex 1.833180368892304 2.514118127178895 8.166819631107696 + vertex 1.950350062674173 3.44190542926404 8.049649937325826 + vertex 1.307641270232362 2.963857780695148 8.692358729767637 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.258684411671629 1.139135007385294 4.741315588328371 + vertex 4.788507315126777 0.7252314223390504 5.211492684873223 + vertex 5.333333333329803 0 4.666666666670197 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.333333333329803 0 4.666666666670197 + vertex 5.812144713101357 0.729684401482652 4.187855286898643 + vertex 5.258684411671629 1.139135007385294 4.741315588328371 + endloop +endfacet +facet normal 0.707107 8.02317e-16 0.707107 + outer loop + vertex 2.513924504462671 2.893919355712134 7.48607549553733 + vertex 1.950350062674173 3.44190542926404 8.049649937325826 + vertex 1.833180368892304 2.514118127178895 8.166819631107696 + endloop +endfacet +facet normal 0.707107 3.17863e-16 0.707107 + outer loop + vertex 3.014950805023464 1.376319323293605 6.985049194976536 + vertex 3.056381342065753 2.331638068411144 6.943618657934246 + vertex 2.419859477917472 1.998690092818164 7.580140522082528 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.313570198421498 2.990088107345365 4.686429801578502 + vertex 4.700759289437417 3.431563214801328 5.299240710562583 + vertex 4.747387157006503 2.608526827661147 5.252612842993497 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.625600586659242 1.584738000229431 5.374399413340758 + vertex 4.012288226063736 1.389629150048312 5.987711773936264 + vertex 4.333333333329073 0.8164965822636734 5.666666666670927 + endloop +endfacet +facet normal 0.707107 -1.78351e-16 0.707107 + outer loop + vertex 1.950350062674173 3.44190542926404 8.049649937325826 + vertex 1.336735346651392 3.67036564617144 8.663264653348607 + vertex 1.307641270232362 2.963857780695148 8.692358729767637 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.665327845975324 4.081800869933908 2.334672154024676 + vertex 8.23073076685316 3.378932402639875 1.76926923314684 + vertex 8.345613086587457 4.210800767573327 1.654386913412543 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.469222017933878 1.921136177084002 3.530777982066122 + vertex 5.910262576606506 2.457972090428311 4.089737423393494 + vertex 5.827763123493424 1.520656192867491 4.172236876506576 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.313570198421498 2.990088107345365 4.686429801578502 + vertex 5.33333333740841 3.693572379549584 4.66666666259159 + vertex 4.700759289437417 3.431563214801328 5.299240710562583 + endloop +endfacet +facet normal 0.707107 3.5721e-16 0.707107 + outer loop + vertex 1.805260511923569 1.558981863375247 8.194739488076431 + vertex 1.666666666665569 0.7205403697071584 8.333333333334432 + vertex 2.345237724425496 0.8613357895616083 7.654762275574504 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.654474644719058 0.8604816887728108 2.345525355280942 + vertex 8.333333333332073 0.7195638967554779 1.666666666667927 + vertex 8.195055796920238 1.557270930560543 1.804944203079762 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.333333333329073 0.8164965822636734 5.666666666670927 + vertex 4.788507315126777 0.7252314223390504 5.211492684873223 + vertex 4.625600586659242 1.584738000229431 5.374399413340758 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.310159810261192 3.518466410752481 0.689840189738808 + vertex 8.787443041654466 3.000000004462747 1.212556958345534 + vertex 9.393840478427906 2.5089562590334 0.6061595215720939 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 2.999999999996966 0 + vertex 9.310159810261192 3.518466410752481 0.689840189738808 + vertex 9.393840478427906 2.5089562590334 0.6061595215720939 + endloop +endfacet +facet normal 0.707107 -1.39341e-16 0.707107 + outer loop + vertex 0.6054064591463948 2.5080760059971 9.394593540853606 + vertex 1.307641270232362 2.963857780695148 8.692358729767637 + vertex 0.6885052802113936 3.514735828268524 9.311494719788607 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.787443041654466 3.000000004462747 1.212556958345534 + vertex 8.789365278350621 2.058205772315775 1.210634721649379 + vertex 9.393840478427906 2.5089562590334 0.6061595215720939 + endloop +endfacet +facet normal 0.707107 3.40825e-16 0.707107 + outer loop + vertex 3.014950805023464 1.376319323293605 6.985049194976536 + vertex 3.558108194265185 1.739002676975781 6.441891805734815 + vertex 3.056381342065753 2.331638068411144 6.943618657934246 + endloop +endfacet +facet normal 0.707107 1.96764e-16 0.707107 + outer loop + vertex 0.6054064591463948 2.5080760059971 9.394593540853606 + vertex 1.221020696670413 2.05540549483303 8.778979303329587 + vertex 1.307641270232362 2.963857780695148 8.692358729767637 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.787443041654466 3.000000004462747 1.212556958345534 + vertex 8.19865419530306 2.505981479088712 1.80134580469694 + vertex 8.789365278350621 2.058205772315775 1.210634721649379 + endloop +endfacet +facet normal 0.707107 -4.3734e-16 0.707107 + outer loop + vertex 3.056381342065753 2.331638068411144 6.943618657934246 + vertex 2.513924504462671 2.893919355712134 7.48607549553733 + vertex 2.419859477917472 1.998690092818164 7.580140522082528 + endloop +endfacet +facet normal 0.707107 4.56083e-16 0.707107 + outer loop + vertex 1.221020696670413 2.05540549483303 8.778979303329587 + vertex 1.833180368892304 2.514118127178895 8.166819631107696 + vertex 1.307641270232362 2.963857780695148 8.692358729767637 + endloop +endfacet +facet normal 0.707107 6.03588e-17 0.707107 + outer loop + vertex 0.6054064591463948 2.5080760059971 9.394593540853606 + vertex 0.6885052802113936 3.514735828268524 9.311494719788607 + vertex 0 2.999999999996966 10 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 3.999999999998489 0 + vertex 9.310159810261192 3.518466410752481 0.689840189738808 + vertex 10 2.999999999996966 0 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.910262576606506 2.457972090428311 4.089737423393494 + vertex 5.312126389703704 2.081963583052617 4.687873610296296 + vertex 5.827763123493424 1.520656192867491 4.172236876506576 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 2.999999999996966 0 + vertex 9.393840478427906 2.5089562590334 0.6061595215720939 + vertex 10 1.999999999995513 0 + endloop +endfacet +facet normal 0.707107 -0 0.707107 + outer loop + vertex 0 1.999999999995513 10 + vertex 0.6054064591463948 2.5080760059971 9.394593540853606 + vertex 0 2.999999999996966 10 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.19865419530306 2.505981479088712 1.80134580469694 + vertex 8.195055796920238 1.557270930560543 1.804944203079762 + vertex 8.789365278350621 2.058205772315775 1.210634721649379 + endloop +endfacet +facet normal 0.707107 -3.43181e-16 0.707107 + outer loop + vertex 1.221020696670413 2.05540549483303 8.778979303329587 + vertex 1.805260511923569 1.558981863375247 8.194739488076431 + vertex 1.833180368892304 2.514118127178895 8.166819631107696 + endloop +endfacet +facet normal 0.707107 -3.244e-16 0.707107 + outer loop + vertex 1.805260511923569 1.558981863375247 8.194739488076431 + vertex 2.419859477917472 1.998690092818164 7.580140522082528 + vertex 1.833180368892304 2.514118127178895 8.166819631107696 + endloop +endfacet +facet normal 0.707107 -0 0.707107 + outer loop + vertex 0 2.999999999996966 10 + vertex 0.6885052802113936 3.514735828268524 9.311494719788607 + vertex 0 3.999999999998489 10 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.19865419530306 2.505981479088712 1.80134580469694 + vertex 7.614095695227663 2.040696914961257 2.385904304772337 + vertex 8.195055796920238 1.557270930560543 1.804944203079762 + endloop +endfacet +facet normal 0.707107 6.49278e-17 0.707107 + outer loop + vertex 3.558108194265185 1.739002676975781 6.441891805734815 + vertex 3.660080065314131 2.672880977695362 6.339919934685869 + vertex 3.056381342065753 2.331638068411144 6.943618657934246 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.652129100876608 2.992836725497768 2.347870899123392 + vertex 6.982971189971538 2.55170895426492 3.017028810028462 + vertex 7.614095695227663 2.040696914961257 2.385904304772337 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.910262576606506 2.457972090428311 4.089737423393494 + vertex 5.944469216806485 3.385222363297727 4.055530783193515 + vertex 5.313570198421498 2.990088107345365 4.686429801578502 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.789365278350621 2.058205772315775 1.210634721649379 + vertex 9.345385224252105 1.524519739102515 0.6546147757478948 + vertex 9.393840478427906 2.5089562590334 0.6061595215720939 + endloop +endfacet +facet normal 0.707107 -2.65342e-16 0.707107 + outer loop + vertex 0.6054064591463948 2.5080760059971 9.394593540853606 + vertex 0.655925305716812 1.524754173558891 9.344074694283188 + vertex 1.221020696670413 2.05540549483303 8.778979303329587 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.19865419530306 2.505981479088712 1.80134580469694 + vertex 7.652129100876608 2.992836725497768 2.347870899123392 + vertex 7.614095695227663 2.040696914961257 2.385904304772337 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.910262576606506 2.457972090428311 4.089737423393494 + vertex 5.313570198421498 2.990088107345365 4.686429801578502 + vertex 5.312126389703704 2.081963583052617 4.687873610296296 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.312126389703704 2.081963583052617 4.687873610296296 + vertex 5.258684411671629 1.139135007385294 4.741315588328371 + vertex 5.827763123493424 1.520656192867491 4.172236876506576 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 3.558108194265185 1.739002676975781 6.441891805734815 + vertex 4.159878050084821 2.114617768613089 5.840121949915179 + vertex 3.660080065314131 2.672880977695362 6.339919934685869 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.313570198421498 2.990088107345365 4.686429801578502 + vertex 4.747387157006503 2.608526827661147 5.252612842993497 + vertex 5.312126389703704 2.081963583052617 4.687873610296296 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.666666666662628 5 5.333333333337372 + vertex 5.002810445950678 4.231377842648399 4.997189554049322 + vertex 5.333333333329803 5 4.666666666670197 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.333981874431548 4.198024834665579 5.666018125568452 + vertex 5.002810445950678 4.231377842648399 4.997189554049322 + vertex 4.666666666662628 5 5.333333333337372 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 3.333333333329807 5 6.666666666670194 + vertex 3.6431698024793 4.169695949820518 6.356830197520701 + vertex 3.99999999999552 5 6.00000000000448 + endloop +endfacet +facet normal 0.707107 -3.70481e-16 0.707107 + outer loop + vertex 2.999999999996958 4.183503421363176 7.000000000003041 + vertex 3.6431698024793 4.169695949820518 6.356830197520701 + vertex 3.333333333329807 5 6.666666666670194 + endloop +endfacet +facet normal 0.707107 -1.12728e-16 0.707107 + outer loop + vertex 1.999999999998416 5 8.000000000001585 + vertex 2.333721956863214 4.216544328889176 7.666278043136787 + vertex 2.66666666666411 5 7.33333333333589 + endloop +endfacet +facet normal 0.707107 2.16333e-16 0.707107 + outer loop + vertex 4.666666666662628 0 5.333333333337372 + vertex 4.333333333329073 0.8164965822636734 5.666666666670927 + vertex 3.99999999999552 0 6.00000000000448 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.666666666664148 0 3.333333333335852 + vertex 6.394383597929608 0.8505270256839526 3.605616402070392 + vertex 5.999999999996977 0 4.000000000003023 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.999999999998489 0 2.000000000001511 + vertex 7.654474644719058 0.8604816887728108 2.345525355280942 + vertex 7.333333333331318 0 2.666666666668682 + endloop +endfacet +facet normal 0.707107 4.44322e-16 0.707107 + outer loop + vertex 2.66666666666411 0 7.33333333333589 + vertex 2.345237724425496 0.8613357895616083 7.654762275574504 + vertex 1.999999999998416 0 8.000000000001585 + endloop +endfacet +facet normal 0.707107 -2.24469e-16 0.707107 + outer loop + vertex 1.663938546592214 4.216975440663273 8.336061453407787 + vertex 2.333721956863214 4.216544328889176 7.666278043136787 + vertex 1.999999999998416 5 8.000000000001585 + endloop +endfacet +facet normal 0.707107 -3.86632e-16 0.707107 + outer loop + vertex 2.66666666666411 5 7.33333333333589 + vertex 2.333721956863214 4.216544328889176 7.666278043136787 + vertex 2.999999999996958 4.183503421363176 7.000000000003041 + endloop +endfacet +facet normal 0.707107 -1.91568e-16 0.707107 + outer loop + vertex 3.99999999999552 5 6.00000000000448 + vertex 3.6431698024793 4.169695949820518 6.356830197520701 + vertex 4.333981874431548 4.198024834665579 5.666018125568452 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.333333333329803 5 4.666666666670197 + vertex 5.002810445950678 4.231377842648399 4.997189554049322 + vertex 5.660930836677283 4.211674832248354 4.339069163322717 + endloop +endfacet +facet normal 0.707107 -1.83542e-16 0.707107 + outer loop + vertex 3.99999999999552 5 6.00000000000448 + vertex 4.333981874431548 4.198024834665579 5.666018125568452 + vertex 4.666666666662628 5 5.333333333337372 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.333333333329803 5 4.666666666670197 + vertex 5.660930836677283 4.211674832248354 4.339069163322717 + vertex 5.999999999996977 5 4.000000000003023 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.666666666664148 5 3.333333333335852 + vertex 6.983802498864017 4.200228433109455 3.016197501135983 + vertex 7.333333333331318 5 2.666666666668682 + endloop +endfacet +facet normal 0.707107 -7.51936e-17 0.707107 + outer loop + vertex 1.333333333332722 5 8.666666666667279 + vertex 1.663938546592214 4.216975440663273 8.336061453407787 + vertex 1.999999999998416 5 8.000000000001585 + endloop +endfacet +facet normal 0.707107 -7.93222e-16 0.707107 + outer loop + vertex 2.66666666666411 5 7.33333333333589 + vertex 2.999999999996958 4.183503421363176 7.000000000003041 + vertex 3.333333333329807 5 6.666666666670194 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.999999999998489 5 2.000000000001511 + vertex 8.345613086587457 4.210800767573327 1.654386913412543 + vertex 8.666666666665659 5 1.333333333334341 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.666666666664148 5 3.333333333335852 + vertex 6.327467180290567 4.19713549719763 3.672532819709433 + vertex 6.983802498864017 4.200228433109455 3.016197501135983 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.999999999998489 5 2.000000000001511 + vertex 7.665327845975324 4.081800869933908 2.334672154024676 + vertex 8.345613086587457 4.210800767573327 1.654386913412543 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.660930836677283 4.211674832248354 4.339069163322717 + vertex 6.327467180290567 4.19713549719763 3.672532819709433 + vertex 5.999999999996977 5 4.000000000003023 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.983802498864017 4.200228433109455 3.016197501135983 + vertex 7.665327845975324 4.081800869933908 2.334672154024676 + vertex 7.333333333331318 5 2.666666666668682 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.999999999996977 5 4.000000000003023 + vertex 6.327467180290567 4.19713549719763 3.672532819709433 + vertex 6.666666666664148 5 3.333333333335852 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.333333333331318 5 2.666666666668682 + vertex 7.665327845975324 4.081800869933908 2.334672154024676 + vertex 7.999999999998489 5 2.000000000001511 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.327467180290567 4.19713549719763 3.672532819709433 + vertex 6.625098673174437 3.420298591456494 3.374901326825563 + vertex 6.983802498864017 4.200228433109455 3.016197501135983 + endloop +endfacet +facet normal 0.707107 5.67203e-16 0.707107 + outer loop + vertex 4.333333333329073 0.8164965822636734 5.666666666670927 + vertex 3.6209681122334 0.8362480141311495 6.379031887766599 + vertex 3.99999999999552 0 6.00000000000448 + endloop +endfacet +facet normal 0.707107 7.74487e-16 0.707107 + outer loop + vertex 3.99999999999552 0 6.00000000000448 + vertex 3.6209681122334 0.8362480141311495 6.379031887766599 + vertex 3.333333333329807 0 6.666666666670194 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.159878050084821 2.114617768613089 5.840121949915179 + vertex 4.625600586659242 1.584738000229431 5.374399413340758 + vertex 4.747387157006503 2.608526827661147 5.252612842993497 + endloop +endfacet +facet normal 0.707107 1.27414e-15 0.707107 + outer loop + vertex 0.655925305716812 1.524754173558891 9.344074694283188 + vertex 1.331699046560815 1.341595744540588 8.668300953439186 + vertex 1.221020696670413 2.05540549483303 8.778979303329587 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.333333333332831 0 0.6666666666671688 + vertex 8.961486775018846 0.7327559079779757 1.038513224981154 + vertex 8.666666666665659 0 1.333333333334341 + endloop +endfacet +facet normal 0.707107 7.63031e-16 0.707107 + outer loop + vertex 1.333333333332722 0 8.666666666667279 + vertex 1.038683263596864 0.7330569595462605 8.961316736403136 + vertex 0.666666666666379 0 9.333333333333622 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.789365278350621 2.058205772315775 1.210634721649379 + vertex 8.733094975703644 1.359081906860595 1.266905024296356 + vertex 9.345385224252105 1.524519739102515 0.6546147757478948 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.327467180290567 4.19713549719763 3.672532819709433 + vertex 5.944469216806485 3.385222363297727 4.055530783193515 + vertex 6.625098673174437 3.420298591456494 3.374901326825563 + endloop +endfacet +facet normal 0.707107 -3.89751e-16 0.707107 + outer loop + vertex 2.345237724425496 0.8613357895616083 7.654762275574504 + vertex 2.999999999996958 0.612924324867664 7.000000000003041 + vertex 3.014950805023464 1.376319323293605 6.985049194976536 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.660930836677283 4.211674832248354 4.339069163322717 + vertex 5.944469216806485 3.385222363297727 4.055530783193515 + vertex 6.327467180290567 4.19713549719763 3.672532819709433 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.159878050084821 2.114617768613089 5.840121949915179 + vertex 4.012288226063736 1.389629150048312 5.987711773936264 + vertex 4.625600586659242 1.584738000229431 5.374399413340758 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.003999530869748 1.433017082643422 2.996000469130252 + vertex 6.999999999997728 0.6116587536763402 3.000000000002272 + vertex 7.654474644719058 0.8604816887728108 2.345525355280942 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 1.999999999995513 0 + vertex 9.345385224252105 1.524519739102515 0.6546147757478948 + vertex 10 0.9999999999984134 0 + endloop +endfacet +facet normal 0.707107 -0 0.707107 + outer loop + vertex 0 0.9999999999984134 10 + vertex 0.655925305716812 1.524754173558891 9.344074694283188 + vertex 0 1.999999999995513 10 + endloop +endfacet +facet normal 0.707107 -1.021e-15 0.707107 + outer loop + vertex 1.663938546592214 4.216975440663273 8.336061453407787 + vertex 1.950350062674173 3.44190542926404 8.049649937325826 + vertex 2.333721956863214 4.216544328889176 7.666278043136787 + endloop +endfacet +facet normal 0.707107 -1.10363e-16 0.707107 + outer loop + vertex 0.666666666666379 5 9.333333333333622 + vertex 1.019897867081073 4.199749959558579 8.980102132918928 + vertex 1.333333333332722 5 8.666666666667279 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.666666666665659 5 1.333333333334341 + vertex 8.949177837489561 4.260556475592649 1.050822162510439 + vertex 9.333333333332831 5 0.6666666666671688 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.982971189971538 2.55170895426492 3.017028810028462 + vertex 7.175285793923991 3.46802669034169 2.824714206076009 + vertex 6.625098673174437 3.420298591456494 3.374901326825563 + endloop +endfacet +facet normal 0.707107 -8.44312e-16 0.707107 + outer loop + vertex 1.038683263596864 0.7330569595462605 8.961316736403136 + vertex 1.331699046560815 1.341595744540588 8.668300953439186 + vertex 0.655925305716812 1.524754173558891 9.344074694283188 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.345385224252105 1.524519739102515 0.6546147757478948 + vertex 8.733094975703644 1.359081906860595 1.266905024296356 + vertex 8.961486775018846 0.7327559079779757 1.038513224981154 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.747387157006503 2.608526827661147 5.252612842993497 + vertex 4.625600586659242 1.584738000229431 5.374399413340758 + vertex 5.312126389703704 2.081963583052617 4.687873610296296 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.393840478427906 2.5089562590334 0.6061595215720939 + vertex 9.345385224252105 1.524519739102515 0.6546147757478948 + vertex 10 1.999999999995513 0 + endloop +endfacet +facet normal 0.707107 -3.79264e-16 0.707107 + outer loop + vertex 0 1.999999999995513 10 + vertex 0.655925305716812 1.524754173558891 9.344074694283188 + vertex 0.6054064591463948 2.5080760059971 9.394593540853606 + endloop +endfacet +facet normal 0.707107 -7.26049e-16 0.707107 + outer loop + vertex 3.056381342065753 2.331638068411144 6.943618657934246 + vertex 3.17954241480685 3.250437217869697 6.82045758519315 + vertex 2.513924504462671 2.893919355712134 7.48607549553733 + endloop +endfacet +facet normal 0.707107 -6.1254e-16 0.707107 + outer loop + vertex 3.660080065314131 2.672880977695362 6.339919934685869 + vertex 3.17954241480685 3.250437217869697 6.82045758519315 + vertex 3.056381342065753 2.331638068411144 6.943618657934246 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 1.333333333332722 5 8.666666666667279 + vertex 1.019897867081073 4.199749959558579 8.980102132918928 + vertex 1.663938546592214 4.216975440663273 8.336061453407787 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.787443041654466 3.000000004462747 1.212556958345534 + vertex 8.23073076685316 3.378932402639875 1.76926923314684 + vertex 8.19865419530306 2.505981479088712 1.80134580469694 + endloop +endfacet +facet normal 0.707107 4.76123e-16 0.707107 + outer loop + vertex 2.345237724425496 0.8613357895616083 7.654762275574504 + vertex 1.666666666665569 0.7205403697071584 8.333333333334432 + vertex 1.999999999998416 0 8.000000000001585 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.999999999998489 0 2.000000000001511 + vertex 8.333333333332073 0.7195638967554779 1.666666666667927 + vertex 7.654474644719058 0.8604816887728108 2.345525355280942 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.345613086587457 4.210800767573327 1.654386913412543 + vertex 8.949177837489561 4.260556475592649 1.050822162510439 + vertex 8.666666666665659 5 1.333333333334341 + endloop +endfacet +facet normal 0.707107 -7.63858e-16 0.707107 + outer loop + vertex 1.950350062674173 3.44190542926404 8.049649937325826 + vertex 2.598535645437257 3.612290402162882 7.401464354562743 + vertex 2.333721956863214 4.216544328889176 7.666278043136787 + endloop +endfacet +facet normal 0.707107 -2.86741e-16 0.707107 + outer loop + vertex 1.307641270232362 2.963857780695148 8.692358729767637 + vertex 1.336735346651392 3.67036564617144 8.663264653348607 + vertex 0.6885052802113936 3.514735828268524 9.311494719788607 + endloop +endfacet +facet normal 0.707107 4.51265e-16 0.707107 + outer loop + vertex 1.333333333332722 0 8.666666666667279 + vertex 1.666666666665569 0.7205403697071584 8.333333333334432 + vertex 1.038683263596864 0.7330569595462605 8.961316736403136 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.961486775018846 0.7327559079779757 1.038513224981154 + vertex 8.333333333332073 0.7195638967554779 1.666666666667927 + vertex 8.666666666665659 0 1.333333333334341 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.310159810261192 3.518466410752481 0.689840189738808 + vertex 8.662830687491685 3.670365994765796 1.337169312508315 + vertex 8.787443041654466 3.000000004462747 1.212556958345534 + endloop +endfacet +facet normal 0.707107 -2.22061e-16 0.707107 + outer loop + vertex 3.6431698024793 4.169695949820518 6.356830197520701 + vertex 3.969582167509996 3.415445991536189 6.030417832490004 + vertex 4.333981874431548 4.198024834665579 5.666018125568452 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.827763123493424 1.520656192867491 4.172236876506576 + vertex 5.812144713101357 0.729684401482652 4.187855286898643 + vertex 6.394383597929608 0.8505270256839526 3.605616402070392 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.652129100876608 2.992836725497768 2.347870899123392 + vertex 7.175285793923991 3.46802669034169 2.824714206076009 + vertex 6.982971189971538 2.55170895426492 3.017028810028462 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 5 0 + vertex 9.496664967999989 4.294501282714015 0.5033350320000114 + vertex 10 3.999999999998489 0 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.625600586659242 1.584738000229431 5.374399413340758 + vertex 4.788507315126777 0.7252314223390504 5.211492684873223 + vertex 5.258684411671629 1.139135007385294 4.741315588328371 + endloop +endfacet +facet normal 0.707107 -0 0.707107 + outer loop + vertex 0 3.999999999998489 10 + vertex 0.5035942995203347 4.292691608002805 9.496405700479665 + vertex 0 5 10 + endloop +endfacet +facet normal 0.707107 6.28363e-16 0.707107 + outer loop + vertex 2.66666666666411 0 7.33333333333589 + vertex 2.999999999996958 0.612924324867664 7.000000000003041 + vertex 2.345237724425496 0.8613357895616083 7.654762275574504 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.333333333332831 5 0.6666666666671688 + vertex 9.496664967999989 4.294501282714015 0.5033350320000114 + vertex 10 5 0 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.666666666664148 0 3.333333333335852 + vertex 6.999999999997728 0.6116587536763402 3.000000000002272 + vertex 6.394383597929608 0.8505270256839526 3.605616402070392 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.654474644719058 0.8604816887728108 2.345525355280942 + vertex 6.999999999997728 0.6116587536763402 3.000000000002272 + vertex 7.333333333331318 0 2.666666666668682 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.944469216806485 3.385222363297727 4.055530783193515 + vertex 5.33333333740841 3.693572379549584 4.66666666259159 + vertex 5.313570198421498 2.990088107345365 4.686429801578502 + endloop +endfacet +facet normal 0.707107 5.32822e-16 0.707107 + outer loop + vertex 2.513924504462671 2.893919355712134 7.48607549553733 + vertex 2.598535645437257 3.612290402162882 7.401464354562743 + vertex 1.950350062674173 3.44190542926404 8.049649937325826 + endloop +endfacet +facet normal 0.707107 8.62598e-16 0.707107 + outer loop + vertex 3.6209681122334 0.8362480141311495 6.379031887766599 + vertex 2.999999999996958 0.612924324867664 7.000000000003041 + vertex 3.333333333329807 0 6.666666666670194 + endloop +endfacet +facet normal 0.707107 -9.98916e-16 0.707107 + outer loop + vertex 0 5 10 + vertex 0.5035942995203347 4.292691608002805 9.496405700479665 + vertex 0.666666666666379 5 9.333333333333622 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.983802498864017 4.200228433109455 3.016197501135983 + vertex 7.175285793923991 3.46802669034169 2.824714206076009 + vertex 7.665327845975324 4.081800869933908 2.334672154024676 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.312126389703704 2.081963583052617 4.687873610296296 + vertex 4.625600586659242 1.584738000229431 5.374399413340758 + vertex 5.258684411671629 1.139135007385294 4.741315588328371 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.333333333329803 0 4.666666666670197 + vertex 4.788507315126777 0.7252314223390504 5.211492684873223 + vertex 4.666666666662628 0 5.333333333337372 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 3.969582167509996 3.415445991536189 6.030417832490004 + vertex 4.700759289437417 3.431563214801328 5.299240710562583 + vertex 4.333981874431548 4.198024834665579 5.666018125568452 + endloop +endfacet +facet normal 0.707107 -5.50071e-16 0.707107 + outer loop + vertex 0.6885052802113936 3.514735828268524 9.311494719788607 + vertex 1.336735346651392 3.67036564617144 8.663264653348607 + vertex 1.019897867081073 4.199749959558579 8.980102132918928 + endloop +endfacet +facet normal 0.707107 -0 0.707107 + outer loop + vertex 0 0 10 + vertex 0.4929350509013704 0.6927588952608303 9.507064949098631 + vertex 0 0.9999999999984134 10 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 0.9999999999984134 0 + vertex 9.507120445916588 0.6927103976466764 0.4928795540834123 + vertex 10 0 0 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.982971189971538 2.55170895426492 3.017028810028462 + vertex 6.426550326581888 2.682688368913055 3.573449673418112 + vertex 6.469222017933878 1.921136177084002 3.530777982066122 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.949177837489561 4.260556475592649 1.050822162510439 + vertex 8.662830687491685 3.670365994765796 1.337169312508315 + vertex 9.310159810261192 3.518466410752481 0.689840189738808 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.660930836677283 4.211674832248354 4.339069163322717 + vertex 5.33333333740841 3.693572379549584 4.66666666259159 + vertex 5.944469216806485 3.385222363297727 4.055530783193515 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.625098673174437 3.420298591456494 3.374901326825563 + vertex 6.426550326581888 2.682688368913055 3.573449673418112 + vertex 6.982971189971538 2.55170895426492 3.017028810028462 + endloop +endfacet +facet normal 0.707107 -4.03709e-16 0.707107 + outer loop + vertex 0.666666666666379 0 9.333333333333622 + vertex 0.4929350509013704 0.6927588952608303 9.507064949098631 + vertex 0 0 10 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 0 0 + vertex 9.507120445916588 0.6927103976466764 0.4928795540834123 + vertex 9.333333333332831 0 0.6666666666671688 + endloop +endfacet +facet normal 0.707107 3.26857e-16 0.707107 + outer loop + vertex 1.999999999998416 0 8.000000000001585 + vertex 1.666666666665569 0.7205403697071584 8.333333333334432 + vertex 1.333333333332722 0 8.666666666667279 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.666666666665659 0 1.333333333334341 + vertex 8.333333333332073 0.7195638967554779 1.666666666667927 + vertex 7.999999999998489 0 2.000000000001511 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.394383597929608 0.8505270256839526 3.605616402070392 + vertex 5.812144713101357 0.729684401482652 4.187855286898643 + vertex 5.999999999996977 0 4.000000000003023 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.999999999996977 0 4.000000000003023 + vertex 5.812144713101357 0.729684401482652 4.187855286898643 + vertex 5.333333333329803 0 4.666666666670197 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.944469216806485 3.385222363297727 4.055530783193515 + vertex 6.426550326581888 2.682688368913055 3.573449673418112 + vertex 6.625098673174437 3.420298591456494 3.374901326825563 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.333981874431548 4.198024834665579 5.666018125568452 + vertex 4.700759289437417 3.431563214801328 5.299240710562583 + vertex 5.002810445950678 4.231377842648399 4.997189554049322 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.19865419530306 2.505981479088712 1.80134580469694 + vertex 8.23073076685316 3.378932402639875 1.76926923314684 + vertex 7.652129100876608 2.992836725497768 2.347870899123392 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.910262576606506 2.457972090428311 4.089737423393494 + vertex 6.426550326581888 2.682688368913055 3.573449673418112 + vertex 5.944469216806485 3.385222363297727 4.055530783193515 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.258684411671629 1.139135007385294 4.741315588328371 + vertex 5.812144713101357 0.729684401482652 4.187855286898643 + vertex 5.827763123493424 1.520656192867491 4.172236876506576 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 3.969582167509996 3.415445991536189 6.030417832490004 + vertex 4.259907862341634 2.798772370660187 5.740092137658366 + vertex 4.700759289437417 3.431563214801328 5.299240710562583 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.747387157006503 2.608526827661147 5.252612842993497 + vertex 4.259907862341634 2.798772370660187 5.740092137658366 + vertex 4.159878050084821 2.114617768613089 5.840121949915179 + endloop +endfacet +facet normal 0.707107 6.37547e-16 0.707107 + outer loop + vertex 2.999999999996958 4.183503421363176 7.000000000003041 + vertex 2.598535645437257 3.612290402162882 7.401464354562743 + vertex 3.17954241480685 3.250437217869697 6.82045758519315 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.345385224252105 1.524519739102515 0.6546147757478948 + vertex 9.507120445916588 0.6927103976466764 0.4928795540834123 + vertex 10 0.9999999999984134 0 + endloop +endfacet +facet normal 0.707107 6.82357e-16 0.707107 + outer loop + vertex 0 0.9999999999984134 10 + vertex 0.4929350509013704 0.6927588952608303 9.507064949098631 + vertex 0.655925305716812 1.524754173558891 9.344074694283188 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.700759289437417 3.431563214801328 5.299240710562583 + vertex 5.33333333740841 3.693572379549584 4.66666666259159 + vertex 5.002810445950678 4.231377842648399 4.997189554049322 + endloop +endfacet +facet normal 0.707107 -1.17232e-15 0.707107 + outer loop + vertex 1.663938546592214 4.216975440663273 8.336061453407787 + vertex 1.336735346651392 3.67036564617144 8.663264653348607 + vertex 1.950350062674173 3.44190542926404 8.049649937325826 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.159878050084821 2.114617768613089 5.840121949915179 + vertex 4.259907862341634 2.798772370660187 5.740092137658366 + vertex 3.660080065314131 2.672880977695362 6.339919934685869 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.469222017933878 1.921136177084002 3.530777982066122 + vertex 6.426550326581888 2.682688368913055 3.573449673418112 + vertex 5.910262576606506 2.457972090428311 4.089737423393494 + endloop +endfacet +facet normal 0.707107 1.00865e-15 0.707107 + outer loop + vertex 3.333333333329807 0 6.666666666670194 + vertex 2.999999999996958 0.612924324867664 7.000000000003041 + vertex 2.66666666666411 0 7.33333333333589 + endloop +endfacet +facet normal 0.707107 1.14439e-15 0.707107 + outer loop + vertex 0.6885052802113936 3.514735828268524 9.311494719788607 + vertex 0.5035942995203347 4.292691608002805 9.496405700479665 + vertex 0 3.999999999998489 10 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 7.333333333331318 0 2.666666666668682 + vertex 6.999999999997728 0.6116587536763402 3.000000000002272 + vertex 6.666666666664148 0 3.333333333335852 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.961486775018846 0.7327559079779757 1.038513224981154 + vertex 9.507120445916588 0.6927103976466764 0.4928795540834123 + vertex 9.345385224252105 1.524519739102515 0.6546147757478948 + endloop +endfacet +facet normal 0.707107 2.96042e-16 0.707107 + outer loop + vertex 0.655925305716812 1.524754173558891 9.344074694283188 + vertex 0.4929350509013704 0.6927588952608303 9.507064949098631 + vertex 1.038683263596864 0.7330569595462605 8.961316736403136 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 10 3.999999999998489 0 + vertex 9.496664967999989 4.294501282714015 0.5033350320000114 + vertex 9.310159810261192 3.518466410752481 0.689840189738808 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 6.625098673174437 3.420298591456494 3.374901326825563 + vertex 7.175285793923991 3.46802669034169 2.824714206076009 + vertex 6.983802498864017 4.200228433109455 3.016197501135983 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 3.660080065314131 2.672880977695362 6.339919934685869 + vertex 4.259907862341634 2.798772370660187 5.740092137658366 + vertex 3.969582167509996 3.415445991536189 6.030417832490004 + endloop +endfacet +facet normal 0.707107 -2.44144e-16 0.707107 + outer loop + vertex 4.333333333329073 0.8164965822636734 5.666666666670927 + vertex 4.012288226063736 1.389629150048312 5.987711773936264 + vertex 3.6209681122334 0.8362480141311495 6.379031887766599 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.787443041654466 3.000000004462747 1.212556958345534 + vertex 8.662830687491685 3.670365994765796 1.337169312508315 + vertex 8.23073076685316 3.378932402639875 1.76926923314684 + endloop +endfacet +facet normal 0.707107 -3.66677e-16 0.707107 + outer loop + vertex 3.6209681122334 0.8362480141311495 6.379031887766599 + vertex 4.012288226063736 1.389629150048312 5.987711773936264 + vertex 3.558108194265185 1.739002676975781 6.441891805734815 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.700759289437417 3.431563214801328 5.299240710562583 + vertex 4.259907862341634 2.798772370660187 5.740092137658366 + vertex 4.747387157006503 2.608526827661147 5.252612842993497 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 3.558108194265185 1.739002676975781 6.441891805734815 + vertex 4.012288226063736 1.389629150048312 5.987711773936264 + vertex 4.159878050084821 2.114617768613089 5.840121949915179 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.961486775018846 0.7327559079779757 1.038513224981154 + vertex 8.733094975703644 1.359081906860595 1.266905024296356 + vertex 8.333333333332073 0.7195638967554779 1.666666666667927 + endloop +endfacet +facet normal 0.707107 -1.06824e-15 0.707107 + outer loop + vertex 1.666666666665569 0.7205403697071584 8.333333333334432 + vertex 1.331699046560815 1.341595744540588 8.668300953439186 + vertex 1.038683263596864 0.7330569595462605 8.961316736403136 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 4.666666666662628 0 5.333333333337372 + vertex 4.788507315126777 0.7252314223390504 5.211492684873223 + vertex 4.333333333329073 0.8164965822636734 5.666666666670927 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.949177837489561 4.260556475592649 1.050822162510439 + vertex 9.496664967999989 4.294501282714015 0.5033350320000114 + vertex 9.333333333332831 5 0.6666666666671688 + endloop +endfacet +facet normal 0.707107 -8.77223e-16 0.707107 + outer loop + vertex 0.666666666666379 5 9.333333333333622 + vertex 0.5035942995203347 4.292691608002805 9.496405700479665 + vertex 1.019897867081073 4.199749959558579 8.980102132918928 + endloop +endfacet +facet normal 0.707107 1.46345e-15 0.707107 + outer loop + vertex 1.221020696670413 2.05540549483303 8.778979303329587 + vertex 1.331699046560815 1.341595744540588 8.668300953439186 + vertex 1.805260511923569 1.558981863375247 8.194739488076431 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.195055796920238 1.557270930560543 1.804944203079762 + vertex 8.733094975703644 1.359081906860595 1.266905024296356 + vertex 8.789365278350621 2.058205772315775 1.210634721649379 + endloop +endfacet +facet normal 0.707107 -1.49494e-16 0.707107 + outer loop + vertex 2.333721956863214 4.216544328889176 7.666278043136787 + vertex 2.598535645437257 3.612290402162882 7.401464354562743 + vertex 2.999999999996958 4.183503421363176 7.000000000003041 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.333333333332831 0 0.6666666666671688 + vertex 9.507120445916588 0.6927103976466764 0.4928795540834123 + vertex 8.961486775018846 0.7327559079779757 1.038513224981154 + endloop +endfacet +facet normal 0.707107 1.01935e-16 0.707107 + outer loop + vertex 1.038683263596864 0.7330569595462605 8.961316736403136 + vertex 0.4929350509013704 0.6927588952608303 9.507064949098631 + vertex 0.666666666666379 0 9.333333333333622 + endloop +endfacet +facet normal 0.707107 4.38088e-16 0.707107 + outer loop + vertex 3.17954241480685 3.250437217869697 6.82045758519315 + vertex 2.598535645437257 3.612290402162882 7.401464354562743 + vertex 2.513924504462671 2.893919355712134 7.48607549553733 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 5.002810445950678 4.231377842648399 4.997189554049322 + vertex 5.33333333740841 3.693572379549584 4.66666666259159 + vertex 5.660930836677283 4.211674832248354 4.339069163322717 + endloop +endfacet +facet normal 0.707107 8.16745e-16 0.707107 + outer loop + vertex 1.019897867081073 4.199749959558579 8.980102132918928 + vertex 0.5035942995203347 4.292691608002805 9.496405700479665 + vertex 0.6885052802113936 3.514735828268524 9.311494719788607 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 9.310159810261192 3.518466410752481 0.689840189738808 + vertex 9.496664967999989 4.294501282714015 0.5033350320000114 + vertex 8.949177837489561 4.260556475592649 1.050822162510439 + endloop +endfacet +facet normal 0.707107 -1.47308e-15 0.707107 + outer loop + vertex 1.019897867081073 4.199749959558579 8.980102132918928 + vertex 1.336735346651392 3.67036564617144 8.663264653348607 + vertex 1.663938546592214 4.216975440663273 8.336061453407787 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.345613086587457 4.210800767573327 1.654386913412543 + vertex 8.662830687491685 3.670365994765796 1.337169312508315 + vertex 8.949177837489561 4.260556475592649 1.050822162510439 + endloop +endfacet +facet normal 0.707107 1.06976e-16 0.707107 + outer loop + vertex 1.805260511923569 1.558981863375247 8.194739488076431 + vertex 1.331699046560815 1.341595744540588 8.668300953439186 + vertex 1.666666666665569 0.7205403697071584 8.333333333334432 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.333333333332073 0.7195638967554779 1.666666666667927 + vertex 8.733094975703644 1.359081906860595 1.266905024296356 + vertex 8.195055796920238 1.557270930560543 1.804944203079762 + endloop +endfacet +facet normal 0.707107 0 0.707107 + outer loop + vertex 8.23073076685316 3.378932402639875 1.76926923314684 + vertex 8.662830687491685 3.670365994765796 1.337169312508315 + vertex 8.345613086587457 4.210800767573327 1.654386913412543 + endloop +endfacet +endsolid Created by Gmsh diff --git a/tests/stl-mesh-reader/plane-slope-Binary.stl b/tests/stl-mesh-reader/plane-slope-Binary.stl new file mode 100644 index 0000000..db1ecc7 Binary files /dev/null and b/tests/stl-mesh-reader/plane-slope-Binary.stl differ diff --git a/tests/stl-mesh-reader/plane-slope.geo b/tests/stl-mesh-reader/plane-slope.geo new file mode 100644 index 0000000..c35aa68 --- /dev/null +++ b/tests/stl-mesh-reader/plane-slope.geo @@ -0,0 +1,18 @@ + +// Define the mesh size +mesh_size = 1.0; + +// Define the geometrical parameters +h=10; +b=5; +l=10; + +// Define the points +Point(1) = {0, 0, h, mesh_size}; +Point(2) = {l, 0, 0, mesh_size}; +//+ +Line(1) = {1, 2}; +//+ +Extrude {0, b, 0} { + Curve{1}; +} diff --git a/tests/stl-mesh-reader/stl-mesh-reader-test.cpp b/tests/stl-mesh-reader/stl-mesh-reader-test.cpp new file mode 100644 index 0000000..c1a4a6b --- /dev/null +++ b/tests/stl-mesh-reader/stl-mesh-reader-test.cpp @@ -0,0 +1,34 @@ +#include "Mesh/STLReader.h" +#include + +void print_stl_mesh_info(STLReader reader) +{ + // print the number of triangles + const auto& triangles = reader.getTriangles(); + std::cout << "Number of triangles: " << triangles.size() << std::endl; + + // print the vertexes of the triangles + for (const auto& tri : triangles) { + std::cout << "Vertex 1: (" << tri.v1.x() << ", " << tri.v1.y() << ", " << tri.v1.z() << ")" << std::endl; + std::cout << "Vertex 2: (" << tri.v2.x() << ", " << tri.v2.y() << ", " << tri.v2.z() << ")" << std::endl; + std::cout << "Vertex 3: (" << tri.v3.x() << ", " << tri.v3.y() << ", " << tri.v3.z() << ")" << std::endl; + } +} + +int main(int argc, char* argv[]) +{ + std::string filename = argv[1]; + + std::cout <<"Filename:" << filename << std::endl; + + STLReader reader; + + if (!reader.read(filename)) { + std::cerr << "Error reading mesh ..." << std::endl; + return -1; + } + + print_stl_mesh_info(reader); + + return 0; +} \ No newline at end of file