26#include <DGtal/base/Common.h>
27#include <DGtal/helpers/StdDefs.h>
28#include <DGtal/helpers/Shortcuts.h>
29#include <DGtal/helpers/ShortcutsGeometry.h>
30#include <DGtal/shapes/SurfaceMesh.h>
31#include <DGtal/geometry/surfaces/DigitalSurfaceRegularization.h>
32#include <DGtal/dec/PolygonalCalculus.h>
34#include <polyscope/polyscope.h>
35#include <polyscope/surface_mesh.h>
36#include <polyscope/point_cloud.h>
38#include <Eigen/Sparse>
54polyscope::SurfaceMesh *
psMesh;
56std::vector<double> phiV;
70 Eigen::VectorXd ph(nf);
84 for(
auto i = 0; i <
surfmesh.nbVertices(); ++i)
86 psMesh->addVertexScalarQuantity(
"Phi", phiV);
93 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> gradients;
94 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Vector> cogradients;
95 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dVector> normals;
96 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dVector> vectorArea;
97 std::vector<PolygonalCalculus<SH3::RealPoint,SH3::RealVector>::Real3dPoint> centroids;
98 std::vector<double> faceArea;
100 for(
auto f=0; f <
surfmesh.nbFaces(); ++f)
104 gradients.push_back( grad );
106 cogradients.push_back( cograd );
107 normals.push_back(
calculus.faceNormalAsDGtalVector(f));
110 vectorArea.push_back({vA(0) , vA(1), vA(2)});
112 faceArea.push_back(
calculus.faceArea(f));
114 centroids.push_back(
calculus.centroidAsDGtalPoint(f) );
117 psMesh->addFaceVectorQuantity(
"Gradients", gradients);
118 psMesh->addFaceVectorQuantity(
"co-Gradients", cogradients);
119 psMesh->addFaceVectorQuantity(
"Normals", normals);
120 psMesh->addFaceScalarQuantity(
"Face area", faceArea);
121 psMesh->addFaceVectorQuantity(
"Vector area", vectorArea);
123 polyscope::registerPointCloud(
"Centroids", centroids);
129 ImGui::SliderFloat(
"Phi scale", &
scale, 0., 1.);
130 if (ImGui::Button(
"Init phi"))
133 if (ImGui::Button(
"Compute quantities"))
143 params(
"polynomial",
"goursat" )(
"gridstep", h );
153 std::vector<std::vector<SH3::SurfaceMesh::Vertex>> faces;
154 for(
auto face= 0 ; face < primalSurface->nbFaces(); ++face)
155 faces.push_back(primalSurface->incidentVertices( face ));
158 auto positions = primalSurface->positions();
168 psMesh = polyscope::registerSurfaceMesh(
"digital surface", positions, faces);
Implements differential operators on polygonal surfaces from degoes2020discrete.
LinAlg::DenseVector Vector
Type of Vector.
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
static Parameters parametersGeometryEstimation()
static Parameters defaultParameters()
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
static KSpace getKSpace(const Point &low, const Point &up, Parameters params=parametersKSpace())
static CountedPtr< DigitizedImplicitShape3D > makeDigitizedImplicitShape3D(CountedPtr< ImplicitShape3D > shape, Parameters params=parametersDigitizedImplicitShape3D())
std::map< Cell, IdxVertex > Cell2Index
static CountedPtr< DigitalSurface > makeDigitalSurface(CountedPtr< TPointPredicate > bimage, const KSpace &K, const Parameters ¶ms=parametersDigitalSurface())
static Parameters defaultParameters()
static CountedPtr< SurfaceMesh > makePrimalSurfaceMesh(Cell2Index &c2i, CountedPtr< ::DGtal::DigitalSurface< TContainer > > aSurface)
static CountedPtr< BinaryImage > makeBinaryImage(Domain shapeDomain)
static CountedPtr< ImplicitShape3D > makeImplicitShape3D(const Parameters ¶ms=parametersImplicitShape3D())
SurfaceMesh< RealPoint, RealVector > SurfMesh
double phiVertex(const Vertex v)
polyscope::SurfaceMesh * psMesh
CountedPtr< SH3::DigitalSurface > surface
CountedPtr< SH3::BinaryImage > binary_image
Z3i this namespace gathers the standard of types for 3D imagery.
Space::RealPoint RealPoint
DGtal is the top-level namespace which contains all DGtal functions and types.
std::pair< typename graph_traits< DGtal::DigitalSurface< TDigitalSurfaceContainer > >::vertex_iterator, typename graph_traits< DGtal::DigitalSurface< TDigitalSurfaceContainer > >::vertex_iterator > vertices(const DGtal::DigitalSurface< TDigitalSurfaceContainer > &digSurf)
std::vector< Vertex > Vertices
ShortcutsGeometry< Z3i::KSpace > SHG3