DGtal 2.2.0
Loading...
Searching...
No Matches
dgtalCalculus-single.cpp
Go to the documentation of this file.
1
26#include <iostream>
27#include <DGtal/base/Common.h>
28#include <DGtal/helpers/StdDefs.h>
29#include <DGtal/helpers/Shortcuts.h>
30#include <DGtal/helpers/ShortcutsGeometry.h>
31#include <DGtal/shapes/SurfaceMesh.h>
32#include <DGtal/geometry/surfaces/DigitalSurfaceRegularization.h>
33#include <DGtal/dec/PolygonalCalculus.h>
34
35#include <polyscope/polyscope.h>
36#include <polyscope/surface_mesh.h>
37#include <polyscope/point_cloud.h>
38#include <polyscope/curve_network.h>
39
40#include <Eigen/Dense>
41#include <Eigen/Sparse>
42
43using namespace DGtal;
44using namespace Z3i;
45
46// Using standard 3D digital space.
49// The following typedefs are useful
53typedef SurfMesh::Face Face;
55
56
57//Polyscope global
58polyscope::SurfaceMesh *psMesh;
59polyscope::PointCloud *psVertices;
60polyscope::CurveNetwork *psBoundary;
61
64
65void initPhi()
66{
67 phiEigen.resize(5);
68 phiEigen << 1.0, 2.0, 0.0, 5.0 ,1.5;
69
70 psMesh->addVertexScalarQuantity("Phi", phiEigen);
71 psVertices->addScalarQuantity("Phi", phiEigen);
72}
73
75{
77
78 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> gradients;
79 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> cogradients;
80 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dPoint> normals;
81 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dPoint> vectorArea;
82 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dPoint> centroids;
83 std::vector<double> faceArea;
84
86
88 gradients.push_back( grad );
89
91 cogradients.push_back( cograd );
92
93 normals.push_back(calculus.faceNormalAsDGtalVector(f));
94
96 vectorArea.push_back({vA(0) , vA(1), vA(2)});
97
98 faceArea.push_back( calculus.faceArea(f));
99 centroids.push_back( calculus.centroidAsDGtalPoint(f) );
100
103
104 psMesh->addFaceVectorQuantity("Gradients", gradients);
105 psMesh->addFaceVectorQuantity("co-Gradients", cogradients);
106 psMesh->addFaceVectorQuantity("Normals", normals);
107 psMesh->addFaceScalarQuantity("Face area", faceArea);
108 psMesh->addFaceVectorQuantity("Vector area", vectorArea);
109
110 psBoundary->addEdgeScalarQuantity("d0*phi", dPhi);
111 psBoundary->addEdgeScalarQuantity("A*phi", av);
112
113 //Face centroid
114 polyscope::registerPointCloud("Centroids", centroids);
115
116 //Flat Sharp
118 v << 50,-50,-100;
119 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> someV={v};
120 psMesh->addFaceVectorQuantity("A vector", someV);
121
123 psBoundary->addEdgeScalarQuantity("flat (1-form)", flat);
124
126 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> sharpRes={sharp};
127 psMesh->addFaceVectorQuantity("Sharp", sharpRes);
128}
129
130int main()
131{
132 std::vector<RealPoint> positions={ {0,0,0},{20,0,0}, {20,10,0}, {10,8,5}, {0,15,1} };
133 std::vector<std::vector<size_t>> faces={ {0,1,2,3,4} };
134
135 surfmesh = SurfMesh(positions.begin(),
136 positions.end(),
137 faces.begin(),
138 faces.end());
139
140 // Initialize polyscope
141 polyscope::init();
142
143 psVertices = polyscope::registerPointCloud("Vertices", positions);
144
145 std::vector<std::array<size_t,2>> edges={{0,1},{1,2},{2,3},{3,4},{4,0} };
146 psBoundary = polyscope::registerCurveNetwork("Edges", positions, edges);
147
148
149 psMesh = polyscope::registerSurfaceMesh("Single face", positions, faces);
150
151 initPhi();
153
154 polyscope::show();
155 return EXIT_SUCCESS;
156
157}
Implements differential operators on polygonal surfaces from degoes2020discrete.
DenseMatrix D(const Face f) const
Real3dVector faceNormalAsDGtalVector(const Face f) const
Real3dPoint centroidAsDGtalPoint(const Face f) const
Vector vectorArea(const Face f) const
DenseMatrix sharp(const Face f) const
double faceArea(const Face f) const
DenseMatrix coGradient(const Face f) const
DenseMatrix gradient(const Face f) const
MySurfaceMesh::Face Face
Face type.
LinAlg::DenseVector Vector
Type of Vector.
DenseMatrix A(const Face f) const
DenseMatrix flat(const Face f) const
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
Definition Shortcuts.h:102
SurfaceMesh< RealPoint, RealVector > SurfMesh
PolygonalCalculus< SH3::RealPoint, SH3::RealVector >::Vector phiEigen
void initPhi()
polyscope::SurfaceMesh * psMesh
SurfMesh surfmesh
void initQuantities()
PolyCalculus * calculus
polyscope::CurveNetwork * psBoundary
polyscope::PointCloud * psVertices
SMesh::Vertices Vertices
Z3i this namespace gathers the standard of types for 3D imagery.
Space::RealPoint RealPoint
Definition StdDefs.h:170
DGtal is the top-level namespace which contains all DGtal functions and types.
int main(int, char **)
ShortcutsGeometry< Z3i::KSpace > SHG3
TriMesh::Face Face
TriMesh::Vertex Vertex