PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
ConformerMeshPolygon.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __ConformerMeshPolygon_H
13#define __ConformerMeshPolygon_H
14
16#include "Eigen/Eigen"
17#include "GeometryUtilities.hpp"
18#include "IMeshDAO.hpp"
20#include "MeshMatrices.hpp"
21#include "UnionMeshSegment.hpp"
22
23namespace Gedim
24{
26{
27 public:
29 {
30 enum struct Types
31 {
32 Generalized = 0, // conform checking the intersection types
33 OnlyOnEdges = 1 // mesh 2D is already conform on edges, check only vertices
34 };
35
37 };
38
39 private:
40 const Gedim::GeometryUtilities &_geometryUtilities;
42
45 bool &found);
46
47 void CheckSegmentOriginAndEndIntersections(const Eigen::Vector3d &segmentOrigin,
48 const Eigen::Vector3d &segmentEnd,
51
52 std::vector<unsigned int> Cell2DOrderNewEdges(const Gedim::IMeshDAO &mesh2DReader,
53 const unsigned int &cell1DMesh2DId,
54 const std::vector<unsigned int> &cell1DMesh2DUpdated) const;
55
56 void Cell2DMesh2DListCell1DToListCell0D(const Gedim::IMeshDAO &mesh2DReader,
57 const unsigned int &cell1DMesh2DId,
58 const std::vector<unsigned int> &cell1DMesh2DUpdated,
59 std::vector<unsigned int> &cell0DMesh2Ds,
60 std::vector<unsigned int> &cell1DMesh2Ds);
61 void Cell2DMesh2DUpdatedPointsAndEdges(const Gedim::IMeshDAO &mesh2DReader,
62 const unsigned int &cell2DMesh2DId,
63 const unsigned int &oldCell1DMesh2DId,
64 const std::vector<unsigned int> &cell0DMesh2DUpdated,
65 const std::vector<unsigned int> &cell1DMesh2DUpdated,
66 std::vector<unsigned int> &cell2DMesh2DNewVertices,
67 std::vector<unsigned int> &cell2DMesh2DNewEdges);
68
69 void Cell2DMesh2DToMaps(const Gedim::IMeshDAO &mesh2DReader,
70 const unsigned int &cell2DMesh2DId,
71 std::map<unsigned int, unsigned int> &verticesMap,
72 std::map<unsigned int, unsigned int> &edgesMap);
73
74 void Cell2DMesh2DToSplitInput(const std::list<unsigned int> cell1DMesh1DIds,
77 const unsigned int &cell2DMesh2DId,
78 const std::map<unsigned int, unsigned int> &cell2DMesh2DVerticesMap,
79 const std::map<unsigned int, unsigned int> &cell2DMesh2DEdgesMap,
81
82 void SplitCell2DMesh2D(const Eigen::Vector3d &segmentOrigin,
83 const Eigen::Vector3d &segmentTangent,
84 const std::list<unsigned int> cell1DMesh1DIds,
87 const unsigned int &cell2DMesh2DId,
88 std::map<unsigned int, unsigned int> &cell2DMesh2DVerticesMap,
89 std::map<unsigned int, unsigned int> &cell2DMesh2DEdgesMap,
91
92 void UpdateCell2DMesh2DWithSegmentOnEdges(const Eigen::Vector3d &segmentOrigin,
93 const Eigen::Vector3d &segmentTangent,
96 const std::vector<unsigned int> &cell1DMesh1DIds,
97 const unsigned int &cell2DMesh2DId);
98
99 void InsertCell2DMesh2DMiddleEdgesPolygonUpdate(const Eigen::Vector3d &segmentOrigin,
100 const Eigen::Vector3d &segmentTangent,
103 const std::list<unsigned int> &cell1DMesh1DIds,
104 const unsigned int &cell2DMesh2DId);
105
106 void InsertCell2DMesh2DMiddleEdgesPolygonCreation(const Eigen::Vector3d &segmentOrigin,
107 const Eigen::Vector3d &segmentTangent,
110 const std::list<unsigned int> cell1DMesh1DIds,
111 const unsigned int &cell2DMesh2DId);
112
113 void UpdateCell2DNeighbours(ConformerMeshSegment::ConformMesh &mesh1D, Gedim::IMeshDAO &mesh2D, const unsigned int &cell2DMesh2DId);
114
121 bool GetLeafCells(const unsigned int &fatherCellId,
122 const std::map<unsigned int, std::set<unsigned int>> &mesh2DUpdatedCellIds,
123 std::list<unsigned int> &newCellIds);
124
125 void CreateConformMeshGeneralized(const Eigen::Vector3d &segmentOrigin,
126 const Eigen::Vector3d &segmentEnd,
127 const Eigen::Vector3d &segmentTangent,
130
131 void CreateConformMeshOnlyOnEdges(const Eigen::Vector3d &segmentOrigin,
132 const Eigen::Vector3d &segmentEnd,
133 const Eigen::Vector3d &segmentTangent,
136
137 public:
138 ConformerMeshPolygon(const Gedim::GeometryUtilities &geometryUtilities);
139 ConformerMeshPolygon(const Gedim::GeometryUtilities &geometryUtilities, const ConformerMeshPolygonConfiguration &configuration);
141
145 void CreateConformMesh(const Eigen::Vector3d &segmentOrigin,
146 const Eigen::Vector3d &segmentEnd,
147 const Eigen::Vector3d &segmentTangent,
150};
151} // namespace Gedim
152
153#endif
Definition ConformerMeshPolygon.hpp:26
~ConformerMeshPolygon()
Definition ConformerMeshPolygon.cpp:31
void CreateConformMesh(const Eigen::Vector3d &segmentOrigin, const Eigen::Vector3d &segmentEnd, const Eigen::Vector3d &segmentTangent, ConformerMeshSegment::ConformMesh &mesh1D, Gedim::IMeshDAO &mesh2D)
Conformer the input Mesh2D with a linear mesh1D.
Definition ConformerMeshPolygon.cpp:1487
Eigen column vector.
Definition Eigen_Array.hpp:23
The GeometryUtilities class intersects 3D segments.
Definition GeometryUtilities.hpp:37
The IMeshDAO (mesh data access object) class to read and write mesh data.
Definition IMeshDAO.hpp:24
Definition Eigen_Array.cpp:22
Types Type
Definition ConformerMeshPolygon.hpp:36
Definition ConformerMeshSegment.hpp:29
Definition GeometryUtilities.hpp:166