5#ifndef RSMESH_RECONSTRUCT_SURFACE_H
6#define RSMESH_RECONSTRUCT_SURFACE_H
12#include "geometry/point3d.h"
13#include "geometry/bbox3d.h"
14#include "point_cloud/distance_filter.h"
15#include "common/utils.h"
16#include "interpolant.h"
17#include "isosurface/isosurface.h"
18#include "isosurface/rbf_field_function.h"
25 double absolute_tolerance;
27 double mesh_resolution;
28 std::vector<double> rbf_parameters;
30 double min_distance = 1e-10;
33 int max_iterations = 30;
37 void reconstruct_surface(
40 tabled table = read_table(params.input);
42 valuesd values = table.col(3);
43 std::optional<valuesd> values_lb;
44 std::optional<valuesd> values_ub;
45 if(params.inequality) {
46 values_lb = table.col(4);
47 values_ub = table.col(5);
51 point_cloud::distance_filter filter(points, params.min_distance);
52 std::tie(points, values) = filter(points, values);
53 if(params.inequality) {
54 *values_lb = filter(*values_lb);
55 *values_ub = filter(*values_ub);
59 auto rbf = common::make_rbf(params.rbf_name, params.rbf_parameters);
60 rbf->set_anisotropy(params.aniso);
61 model model(*rbf, 3, params.poly_degree);
62 model.set_nugget(params.nugget);
65 interpolant interpolant(model);
66 if(params.inequality) {
67 interpolant.fit_inequality(points, values, *values_lb, *values_ub, params.absolute_tolerance, params.max_iterations);
68 }
else if(params.reduce) {
69 interpolant.fit_incrementally(points, values, params.absolute_tolerance, params.max_iterations);
71 interpolant.fit(points, values, params.absolute_tolerance, params.max_iterations);
75 auto n_surface_points = (values.array() == 0.0).count();
78 for(index_t i = 0; i < points.rows(); i ++) {
79 if(values(i) == 0.0) {
80 surface_points.row(si) = points.row(i);
84 isosurface::isosurface isosurface(params.bbox, params.mesh_resolution);
85 isosurface::rbf_field_function field_function(interpolant);
87 isosurface.generate_from_seed_points(surface_points, field_function).export_obj(params.output);
examples命名空间,包含一些使用RSMesh库的示例
Eigen::Matrix< double, 3, 3, Eigen::RowMajor > linear_transformation3d
线性变换矩阵