11#include " geodistance.hpp"
22
3- void function (const Eigen::MatrixXd& V, const Eigen::MatrixXi& F) {}
3+ Eigen::VectorXd
4+ trimesh_geodistance_exact (
5+ const compas::RowMatrixXd& V,
6+ const compas::RowMatrixXi& F,
7+ int vid)
8+ {
9+ Eigen::VectorXd D;
10+ Eigen::VectorXi VS, FS, VT, FT;
11+
12+ VS.resize (1 );
13+ VS << vid;
14+
15+ VT.setLinSpaced (V.rows (), 0 , V.rows () - 1 );
16+
17+ igl::exact_geodesic (V, F, VS, FS, VT, FT, D);
18+
19+ return D;
20+ }
21+
22+ Eigen::VectorXd
23+ trimesh_geodistance_heat (
24+ const compas::RowMatrixXd& V,
25+ const compas::RowMatrixXi& F,
26+ int vid)
27+ {
28+ Eigen::VectorXi gamma;
29+ gamma.resize (1 );
30+ gamma << vid;
31+
32+ igl::HeatGeodesicsData<double > data;
33+ double t = std::pow (igl::avg_edge_length (V, F), 2 );
34+ igl::heat_geodesics_precompute (V, F, t, data);
35+
36+ Eigen::VectorXd D = Eigen::VectorXd::Zero (data.Grad .cols ());
37+ D (vid) = 1 ;
38+
39+ igl::heat_geodesics_solve (data, gamma, D);
40+
41+ return D;
42+ }
43+
44+
45+
446
547NB_MODULE (_geodistance, m) {
648
749 m.def (
8- " function_name" ,
9- &function,
50+ " trimesh_geodistance_exact" ,
51+ &trimesh_geodistance_exact,
52+ " Description." ,
53+ " V" _a,
54+ " F" _a,
55+ " vid" _a);
56+
57+ m.def (
58+ " trimesh_geodistance_heat" ,
59+ &trimesh_geodistance_heat,
1060 " Description." ,
1161 " V" _a,
12- " F" _a);
62+ " F" _a,
63+ " vid" _a);
1364}
0 commit comments