PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
VTKUtilities.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 __VTPExtension_H
13#define __VTPExtension_H
14
15#include "Gedim_Macro.hpp"
16
17#include <map>
18#include <vector>
19
20#include "Eigen/Eigen"
21
22#if ENABLE_VTK == 1
23#include "vtkAppendFilter.h"
24#include "vtkCellData.h"
25#include "vtkCellType.h"
26#include "vtkCellTypes.h"
27#include "vtkDoubleArray.h"
28#include "vtkIdList.h"
29#include "vtkPointData.h"
30#include "vtkPoints.h"
31#include "vtkPolyData.h"
32#include "vtkSmartPointer.h"
33#include "vtkUnstructuredGrid.h"
34#include "vtkWeakPointer.h"
35#include "vtkXMLPolyDataWriter.h"
36#include "vtkXMLUnstructuredGridWriter.h"
37#endif // ENABLE_VTK
38
39namespace Gedim
40{
42{
43 const Eigen::Vector3d &Point;
44
45 VTPPoint(const Eigen::Vector3d &point) : Point(point)
46 {
47 }
48};
49
51{
52 const Eigen::MatrixXd &Points;
53
54 VTPPoints(const Eigen::MatrixXd &points) : Points(points)
55 {
56 }
57};
58
60{
61 const Eigen::MatrixXd &Vertices;
62 const Eigen::VectorXi &Edge;
63
64 VTPSegment(const Eigen::MatrixXd &vertices, const Eigen::VectorXi &edge) : Vertices(vertices), Edge(edge)
65 {
66 }
67};
68
70{
71 const Eigen::MatrixXd &Vertices;
72 const Eigen::MatrixXi &Edges;
73
74 VTPSegments(const Eigen::MatrixXd &vertices, const Eigen::MatrixXi &edges) : Vertices(vertices), Edges(edges)
75 {
76 }
77};
78
80{
81 const Eigen::MatrixXd &Vertices;
82 const std::vector<unsigned int> &Polygon;
83
84 VTPPolygon(const Eigen::MatrixXd &vertices, const std::vector<unsigned int> &polygon)
85 : Vertices(vertices), Polygon(polygon)
86 {
87 }
88};
89
91{
92 const Eigen::MatrixXd &Vertices;
93 const std::vector<std::vector<unsigned int>> &Polygons;
94
95 VTPPolygons(const Eigen::MatrixXd &vertices, const std::vector<std::vector<unsigned int>> &polygons)
96 : Vertices(vertices), Polygons(polygons)
97 {
98 }
99};
100
102{
103 const Eigen::MatrixXd &Vertices;
104 const std::vector<std::vector<unsigned int>> &PolyhedronFaces;
105
106 VTPPolyhedron(const Eigen::MatrixXd &vertices, const std::vector<std::vector<unsigned int>> &faces)
107 : Vertices(vertices), PolyhedronFaces(faces)
108 {
109 }
110};
111
113{
114 const Eigen::MatrixXd &Vertices;
115 const std::vector<std::vector<std::vector<unsigned int>>> &PolyhedronsFaces;
118
119 VTPPolyhedrons(const Eigen::MatrixXd &vertices, const std::vector<std::vector<std::vector<unsigned int>>> &polyhedronsFaces)
121 {
122 }
123};
124
126{
128 {
130 Cells = 1,
134 };
135
136 std::string Label;
138
139 unsigned int Size;
140 const double *Data;
141};
142
144{
145 public:
147 {
148 }
149
150#if ENABLE_VTK == 1
151 virtual void Convert(vtkNew<vtkAppendFilter> &exportData) const = 0;
152#endif
153};
154
156{
157 public:
159 {
161 Ascii = 1,
162 Appended = 2
163 };
164
165 private:
166 std::list<IGeometryToPolyData *> geometries;
167
168#if ENABLE_VTK == 1
170#endif
171
172 void AddToExportData(IGeometryToPolyData &polyData);
173
174 public:
175 VTKUtilities();
177
178 void AddPoint(const Eigen::Vector3d &point, const std::vector<VTPProperty> &properties = {});
179 void AddPoints(const Eigen::MatrixXd &points, const std::vector<VTPProperty> &properties = {});
180 void AddSegment(const Eigen::Vector3d &origin, const Eigen::Vector3d &end, const std::vector<VTPProperty> &properties = {});
181 void AddSegment(const Eigen::MatrixXd &vertices, const std::vector<VTPProperty> &properties = {});
182 void AddSegment(const Eigen::MatrixXd &vertices, const Eigen::VectorXi &edge, const std::vector<VTPProperty> &properties = {});
183 void AddSegments(const Eigen::MatrixXd &vertices, const Eigen::MatrixXi &edges, const std::vector<VTPProperty> &properties = {});
184 void AddPolygon(const Eigen::MatrixXd &vertices, const std::vector<VTPProperty> &properties = {});
185 void AddPolygon(const Eigen::MatrixXd &vertices,
186 const std::vector<unsigned int> &polygon,
187 const std::vector<VTPProperty> &properties = {});
188 void AddPolygons(const Eigen::MatrixXd &vertices,
189 const std::vector<Eigen::MatrixXi> &polygons,
190 const std::vector<VTPProperty> &properties = {});
191 void AddPolygons(const Eigen::MatrixXd &vertices,
192 const std::vector<std::vector<unsigned int>> &polygons,
193 const std::vector<VTPProperty> &properties = {});
194 void AddPolyhedron(const Eigen::MatrixXd &vertices,
195 const Eigen::MatrixXi &edges,
196 const std::vector<Eigen::MatrixXi> &faces,
197 const std::vector<VTPProperty> &properties = {});
198 void AddPolyhedron(const Eigen::MatrixXd &vertices,
199 const std::vector<std::vector<unsigned int>> &polyhedronFaces,
200 const std::vector<VTPProperty> &properties = {});
201 void AddPolyhedrons(const Eigen::MatrixXd &vertices,
202 const std::vector<std::vector<std::vector<unsigned int>>> &polyhedronsFaces,
203 const std::vector<VTPProperty> &properties = {});
204
205 void Export(const std::string &filePath, const ExportFormats &format = ExportFormats::Binary) const;
206};
207
208template <typename T> class GeometryToPolyData final : public IGeometryToPolyData
209{
210 protected:
211 const T &geometry;
212 const std::vector<VTPProperty> &properties;
213
214#if ENABLE_VTK == 1
215 void AddPoint(const Eigen::Vector3d &point, vtkNew<vtkPoints> &points) const;
216 void AddPoints(const Eigen::MatrixXd &points, vtkNew<vtkPoints> &vtkPoints) const;
217 void AddVertex(const unsigned int &pointId, vtkNew<vtkCellArray> &vertices) const;
218 void AddVertices(const std::vector<unsigned int> &pointIds, vtkNew<vtkCellArray> &vertices) const;
219 void AddLine(const unsigned int &originId, const unsigned int &endId, vtkNew<vtkCellArray> &lines) const;
220 void AddLines(const Eigen::MatrixXi &edges, vtkNew<vtkCellArray> &lines) const;
221 void AddPolygon(const std::vector<unsigned int> &faceVerticesIds, vtkNew<vtkCellArray> &faces) const;
222 void AddPolygons(const std::vector<std::vector<unsigned int>> &facesVerticesIds, vtkNew<vtkCellArray> &faces) const;
224#endif
225
226 public:
227 GeometryToPolyData(const T &geometry, const std::vector<VTPProperty> &properties);
229
230#if ENABLE_VTK == 1
232#endif
233};
234} // namespace Gedim
235
236#endif // __VTPExtension_H
Eigen column vector.
Definition Eigen_Array.hpp:23
Definition VTKUtilities.hpp:209
~GeometryToPolyData()
Definition VTKUtilities.cpp:277
const std::vector< VTPProperty > & properties
Definition VTKUtilities.hpp:212
const T & geometry
Definition VTKUtilities.hpp:211
Definition VTKUtilities.hpp:144
virtual ~IGeometryToPolyData()
Definition VTKUtilities.hpp:146
Definition VTKUtilities.hpp:156
ExportFormats
Definition VTKUtilities.hpp:159
@ Ascii
Definition VTKUtilities.hpp:161
@ Appended
Definition VTKUtilities.hpp:162
@ Binary
Definition VTKUtilities.hpp:160
void Export(const std::string &filePath, const ExportFormats &format=ExportFormats::Binary) const
Definition VTKUtilities.cpp:236
void AddPolyhedron(const Eigen::MatrixXd &vertices, const Eigen::MatrixXi &edges, const std::vector< Eigen::MatrixXi > &faces, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:179
void AddPoint(const Eigen::Vector3d &point, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:41
void AddSegment(const Eigen::Vector3d &origin, const Eigen::Vector3d &end, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:65
void AddPolygons(const Eigen::MatrixXd &vertices, const std::vector< Eigen::MatrixXi > &polygons, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:149
void AddPolyhedrons(const Eigen::MatrixXd &vertices, const std::vector< std::vector< std::vector< unsigned int > > > &polyhedronsFaces, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:221
void AddPoints(const Eigen::MatrixXd &points, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:53
void AddPolygon(const Eigen::MatrixXd &vertices, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:119
VTKUtilities()
Definition VTKUtilities.cpp:25
~VTKUtilities()
Definition VTKUtilities.cpp:28
void AddSegments(const Eigen::MatrixXd &vertices, const Eigen::MatrixXi &edges, const std::vector< VTPProperty > &properties={})
Definition VTKUtilities.cpp:106
Definition Eigen_Array.cpp:22
Definition VTKUtilities.hpp:42
const Eigen::Vector3d & Point
Definition VTKUtilities.hpp:43
VTPPoint(const Eigen::Vector3d &point)
Definition VTKUtilities.hpp:45
Definition VTKUtilities.hpp:51
const Eigen::MatrixXd & Points
Definition VTKUtilities.hpp:52
VTPPoints(const Eigen::MatrixXd &points)
Definition VTKUtilities.hpp:54
Definition VTKUtilities.hpp:80
VTPPolygon(const Eigen::MatrixXd &vertices, const std::vector< unsigned int > &polygon)
Definition VTKUtilities.hpp:84
const std::vector< unsigned int > & Polygon
Definition VTKUtilities.hpp:82
const Eigen::MatrixXd & Vertices
Definition VTKUtilities.hpp:81
Definition VTKUtilities.hpp:91
const std::vector< std::vector< unsigned int > > & Polygons
Definition VTKUtilities.hpp:93
const Eigen::MatrixXd & Vertices
Definition VTKUtilities.hpp:92
VTPPolygons(const Eigen::MatrixXd &vertices, const std::vector< std::vector< unsigned int > > &polygons)
Definition VTKUtilities.hpp:95
Definition VTKUtilities.hpp:102
const Eigen::MatrixXd & Vertices
Definition VTKUtilities.hpp:103
VTPPolyhedron(const Eigen::MatrixXd &vertices, const std::vector< std::vector< unsigned int > > &faces)
size numFaces x numFaceVertices
Definition VTKUtilities.hpp:106
const std::vector< std::vector< unsigned int > > & PolyhedronFaces
size 3xnumVertices
Definition VTKUtilities.hpp:104
Definition VTKUtilities.hpp:113
const std::vector< std::vector< std::vector< unsigned int > > > & PolyhedronsFaces
size 3xnumVertices
Definition VTKUtilities.hpp:115
VTPPolyhedrons(const Eigen::MatrixXd &vertices, const std::vector< std::vector< std::vector< unsigned int > > > &polyhedronsFaces)
Definition VTKUtilities.hpp:119
const Eigen::MatrixXd & Vertices
Definition VTKUtilities.hpp:114
Definition VTKUtilities.hpp:126
const double * Data
Definition VTKUtilities.hpp:140
std::string Label
Definition VTKUtilities.hpp:136
Formats
Definition VTKUtilities.hpp:128
@ PointsArray2
Definition VTKUtilities.hpp:133
@ PointsArray
Definition VTKUtilities.hpp:131
@ Points
Definition VTKUtilities.hpp:129
@ Cells
Definition VTKUtilities.hpp:130
@ CellsArray
Definition VTKUtilities.hpp:132
Formats Format
Definition VTKUtilities.hpp:137
unsigned int Size
Definition VTKUtilities.hpp:139
Definition VTKUtilities.hpp:60
const Eigen::VectorXi & Edge
Definition VTKUtilities.hpp:62
const Eigen::MatrixXd & Vertices
Definition VTKUtilities.hpp:61
VTPSegment(const Eigen::MatrixXd &vertices, const Eigen::VectorXi &edge)
Definition VTKUtilities.hpp:64
Definition VTKUtilities.hpp:70
const Eigen::MatrixXd & Vertices
Definition VTKUtilities.hpp:71
VTPSegments(const Eigen::MatrixXd &vertices, const Eigen::MatrixXi &edges)
Definition VTKUtilities.hpp:74
const Eigen::MatrixXi & Edges
Definition VTKUtilities.hpp:72