28#include <DGtal/base/Common.h>
29#include <DGtal/helpers/StdDefs.h>
30#include <DGtal/helpers/Shortcuts.h>
31#include <DGtal/helpers/ShortcutsGeometry.h>
32#include <DGtal/shapes/SurfaceMesh.h>
34#include <DGtal/dec/PolygonalCalculus.h>
35#include <DGtal/dec/GeodesicsInHeat.h>
37#include <polyscope/polyscope.h>
38#include <polyscope/surface_mesh.h>
39#include <polyscope/pick.h>
41#include "ConfigExamples.h"
44#include <Eigen/Sparse>
73 auto projEmbedder = [&](
int f,
int v)
78 const auto cp = p - centroid;
92 heat->addSource( v_idx );
94 psMesh->addVertexScalarQuantity(
"source", source);
101 psMesh->addVertexDistanceQuantity(
"geodesic", dist);
108 if (polyscope::pick::haveSelection()) {
109 bool goodSelection =
false;
110 auto selection = polyscope::pick::getSelection();
111 auto selectedSurface =
static_cast<polyscope::SurfaceMesh*
>(selection.first);
112 size_t idx = selection.second;
115 auto surf = polyscope::getSurfaceMesh(
"digital surface");
116 goodSelection = goodSelection || (selectedSurface == surf);
117 const auto nv = selectedSurface->nVertices();
119 if ( goodSelection && idx < nv )
121 std::ostringstream otext;
122 otext <<
"Selected vertex = " << idx;
123 ImGui::Text(
"%s", otext.str().c_str() );
134 ImGui::SliderFloat(
"Lambda parameter", &
Lambda, 0.0, 1.0);
135 ImGui::SliderFloat(
"dt", &
dt, 0.,4.);
136 ImGui::Checkbox(
"Use mixed Neumann+Dirichlet heat solution", &
Mixed);
137 if(ImGui::Button(
"Precomputation (required if you change the dt)"))
143 if(ImGui::Button(
"Compute geodesic"))
157 params(
"surfaceComponents",
"All");
158 params(
"polynomial",
"x^2+(y+1)^2+z^2-1.0")
159 (
"minAABB",-1.0)(
"maxAABB",1.0)(
"offset",1.0)
171 std::vector<std::vector<SH3::SurfaceMesh::Vertex>> faces;
172 std::vector<RealPoint> positions;
174 for(
auto face= 0 ; face < primalSurface->nbFaces(); ++face)
175 faces.push_back(primalSurface->incidentVertices( face ));
178 positions = primalSurface->positions();
191 psMesh = polyscope::registerSurfaceMesh(
"digital surface", positions, faces);
This class implements Crane2013 on polygonal surfaces (using Discrete differential calculus on polygo...
PolygonalCalculus::Vector Vector
Aim: Implements basic operations that will be used in Point and Vector classes.
auto dot(const PointVector< dim, OtherComponent, OtherStorage > &v) const -> decltype(DGtal::dotProduct(*this, v))
Dot product with a PointVector.
Implements differential operators on polygonal surfaces from degoes2020discrete.
void setEmbedder(const std::function< Real3dPoint(Face, Vertex)> &externalFunctor)
Aim: This class is used to simplify shape and surface creation. With it, you can create new shapes an...
static Parameters parametersGeometryEstimation()
static RealVectors getNormalVectors(CountedPtr< ImplicitShape3D > shape, const KSpace &K, const SurfelRange &surfels, const Parameters ¶ms=parametersShapeGeometry())
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())
static SurfelRange getSurfelRange(CountedPtr< ::DGtal::DigitalSurface< TDigitalSurfaceContainer > > surface, const Parameters ¶ms=parametersDigitalSurface())
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())
void beginBlock(const std::string &keyword="")
CountedPtr< SH3::DigitalSurface > surface
CountedPtr< SH3::BinaryImage > binary_image
SurfaceMesh< RealPoint, RealVector > SurfMesh
PolygonalCalculus< SH3::RealPoint, SH3::RealVector > PolyCalculus
polyscope::SurfaceMesh * psMesh
void picksource(int v_idx)
Shortcuts< Z3i::KSpace > SH3
ShortcutsGeometry< Z3i::KSpace > SHG3
GeodesicsInHeat< PolyCalculus > * heat
DGtal is the top-level namespace which contains all DGtal functions and types.
Aim: Represents an embedded mesh as faces and a list of vertices. Vertices may be shared among faces ...
RealVector & faceNormal(Face f)
RealPoint faceCentroid(Index f) const
bool setFaceNormals(RealVectorIterator itN, RealVectorIterator itNEnd)
RealPoint & position(Vertex v)
Edges computeNonManifoldEdges() const