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>
37 #include <Eigen/Dense>
38 #include <Eigen/Sparse>
40 using namespace DGtal;
54 polyscope::SurfaceMesh *
psMesh;
56 std::vector<double> phiV;
70 Eigen::VectorXd ph(nf);
86 psMesh->addVertexScalarQuantity(
"Phi", phiV);
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;
104 gradients.push_back( grad );
106 cogradients.push_back( cograd );
110 vectorArea.push_back({vA(0) , vA(1), vA(2)});
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"))
140 auto params = SH3::defaultParameters() | SHG3::defaultParameters() | SHG3::parametersGeometryEstimation();
143 params(
"polynomial",
"goursat" )(
"gridstep", h );
144 auto implicit_shape = SH3::makeImplicitShape3D ( params );
145 auto digitized_shape = SH3::makeDigitizedImplicitShape3D( implicit_shape, params );
146 auto K = SH3::getKSpace( params );
147 auto binary_image = SH3::makeBinaryImage( digitized_shape, params );
150 auto primalSurface = SH3::makePrimalSurfaceMesh(c2i,
surface);
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 .
Real3dVector faceNormalAsDGtalVector(const Face f) const
Real3dPoint centroidAsDGtalPoint(const Face f) const
Vector vectorArea(const Face f) const
double faceArea(const Face f) const
DenseMatrix coGradient(const Face f) const
DenseMatrix gradient(const Face f) const
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...
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
std::map< Cell, IdxVertex > Cell2Index
SurfaceMesh< RealPoint, RealVector > SurfMesh
double phiVertex(const Vertex v)
polyscope::SurfaceMesh * psMesh
CountedPtr< SH3::DigitalSurface > surface
CountedPtr< SH3::BinaryImage > binary_image
DigitalPlane::Point Vector
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)
Aim: Represents an embedded mesh as faces and a list of vertices. Vertices may be shared among faces ...
RealPoint & position(Vertex v)
std::vector< Vertex > Vertices
The type that defines a list/range of vertices (e.g. to define faces)
const Vertices & incidentVertices(Face f) const
int main(int argc, char **argv)
K init(Point(0, 0, 0), Point(512, 512, 512), true)
ShortcutsGeometry< Z3i::KSpace > SHG3