OpenTwin 0.1
OpenTwin
 
Loading...
Searching...
No Matches
MeshWriter.h
Go to the documentation of this file.
1#pragma once
2
3class Application;
6class EntityAnnotation;
7
8class BoundingBox;
9class EntityMeshTet;
10class EntityMeshTetFace;
11class EntityMeshTetItem;
12class EntityBase;
13class EntityBinaryData;
14class EntityProperties;
15
16#include <vector>
17#include <map>
18#include <list>
19#include <array>
20#include <string>
21
22#include "OldTreeIcon.h"
23
24namespace gmsh
25{
26 typedef std::vector<std::pair<int, int> > vectorpair;
27}
28
30{
31public:
32 MeshWriter(Application *app, EntityMeshTet *mesh);
34
35 void convertAndStoreNodes(void);
36 void convertFaces(void);
37 void storeFaces(void);
38 bool storeMeshFile(void);
39
40 void storeMeshEntity(const std::string &entityName, EntityBase *entity, int entityTag, gmsh::vectorpair &entityFaceTags, bool isBackgroundMeshEntity,
41 std::vector<std::list<size_t>> &nodeTagToTetIndexMap, std::map<int, gmsh::vectorpair> &volumeTagToFacesMap,
42 const std::string& materialsFolder, ot::UID materialsFolderID,
43 FaceAnnotationsManager *faceAnnotationsManager, ProgressLogger *progressLogger);
44 void storeMeshEntityFromPhysicalGroup(const std::string& entityName, int entityTag, double colorR, double colorG, double colorB, const std::string& materialsFolder, ot::UID materialsFolderID);
45
46 size_t getNumberOfNodes(void) { return totalNumberNodes; }
47 size_t getNumberOfTriangles(void) { return totalNumberTriangles; }
48 size_t getNumberOfTets(void) { return totalNumberTets; }
49
50 void displayShapesWithoutTets(void);
51 void analyzeErrorPoints(BoundingBox *boundingBox);
52
53private:
54 void storeInternalTetEdges(std::vector<size_t> &nodeVolumeTags, std::map<size_t, std::vector<size_t>> &nodeBoundaryTags, EntityMeshTetItem *meshItem, std::vector<size_t> &nodeTagToIdMap);
55 bool checkFaceAndVolumeForSameOrientation(int faceTag, EntityMeshTetItem *meshItem, std::vector<std::list<size_t>> &nodeToTetMap);
56 bool checkTrianglesForSameOrientation(size_t t0, size_t t1, size_t t2, size_t u0, size_t u1, size_t u2);
57 void checkForInvalidFaceMeshes(const std::string &entityName, gmsh::vectorpair &entityFaceTags, ProgressLogger *progressLogger);
58 bool getPointCoords(std::string point, double &x, double &y, double &z);
59 void getIntersectingSurfaces(EntityMeshTetItem *meshItem, double x, double y, double z, std::list<int> &intersectingSurfaces, double tolerance);
60 bool getFaceIntersectsPoint(EntityMeshTetFace *face, double x, double y, double z, EntityMeshTet *mesh, double tolerance);
61 void readMeshFile(const std::string &meshFileName, EntityBinaryData *fileData);
62 int getNumberOfNodesFromElementType(int type);
63 void storeReferenceTriangleEdges(int triangleType, std::vector<size_t>& triangleNodeTags, size_t faceTag);
64 void determineConnectedFaces(int numberOfNodes, std::vector<size_t>& tetPoints, std::list<int>& neighbourFaces);
65 int getNeighborFaceForTriangle(size_t n0, size_t n1, size_t n2);
66 bool trianglesAreSame(size_t a0, size_t a1, size_t a2, size_t b0, size_t b1, size_t b2);
67 void copySolverProperties(EntityProperties& source, EntityProperties& dest);
68
69 Application *application;
70 EntityMeshTet *entityMesh;
71
72 size_t totalNumberNodes;
73 size_t totalNumberTriangles;
74 size_t totalNumberTets;
75 std::string meshElementsWithoutTets;
76 std::vector<size_t> nodeTagToNodeIndexMap;
77 std::map<size_t, std::vector<size_t>> faceTagToBoundaryNodeTagsMap;
78 std::list<EntityMeshTetItem *> allMeshItems;
79 std::list<std::array<double, 3>> errorPoints;
80 std::map<size_t, std::list<size_t>> faceReferenceTriangleMap;
81};
@ point
Definition MonitorSettings.h:19
Definition Application.h:25
Definition FaceAnnotationsManager.h:25
Definition MeshWriter.h:30
void storeMeshEntityFromPhysicalGroup(const std::string &entityName, int entityTag, double colorR, double colorG, double colorB, const std::string &materialsFolder, ot::UID materialsFolderID)
Definition MeshWriter.cpp:919
size_t getNumberOfTets(void)
Definition MeshWriter.h:48
void storeMeshEntity(const std::string &entityName, EntityBase *entity, int entityTag, gmsh::vectorpair &entityFaceTags, bool isBackgroundMeshEntity, std::vector< std::list< size_t > > &nodeTagToTetIndexMap, std::map< int, gmsh::vectorpair > &volumeTagToFacesMap, const std::string &materialsFolder, ot::UID materialsFolderID, FaceAnnotationsManager *faceAnnotationsManager, ProgressLogger *progressLogger)
Definition MeshWriter.cpp:194
MeshWriter(Application *app, EntityMeshTet *mesh)
Definition MeshWriter.cpp:30
void convertAndStoreNodes(void)
Definition MeshWriter.cpp:39
bool storeMeshFile(void)
Definition MeshWriter.cpp:827
void convertFaces(void)
Definition MeshWriter.cpp:77
void displayShapesWithoutTets(void)
Definition MeshWriter.cpp:730
~MeshWriter()
Definition MeshWriter.h:33
void analyzeErrorPoints(BoundingBox *boundingBox)
Definition MeshWriter.cpp:738
size_t getNumberOfNodes(void)
Definition MeshWriter.h:46
void storeFaces(void)
Definition MeshWriter.cpp:178
size_t getNumberOfTriangles(void)
Definition MeshWriter.h:47
Definition ProgressLogger.h:11
The app namespace contains several functions that may be used to start processes.
Definition FaceAnnotationsManager.h:20
std::vector< std::pair< int, int > > vectorpair
Definition FaceAnnotationsManager.h:21
unsigned long UID
Unique identifier (32 bit unsigned integer)
Definition CoreTypes.h:27