3#include <wmtk/TriOptimizerMesh.h>
5#include <wmtk/SurfaceTagAttributes.h>
8#include <wmtk/utils/PartitionMesh.h>
9#include <wmtk/utils/VectorUtils.h>
10#include <polysolve/nonlinear/Problem.hpp>
11#include <wmtk/AttributeCollection.hpp>
12#include <wmtk/Types.hpp>
13#include <wmtk/envelope/Envelope.hpp>
14#include <wmtk/optimization/SmoothVertex.hpp>
15#include <wmtk/optimization/solver.hpp>
16#include <wmtk/threading/enumerable_thread_specific.hpp>
19#include <wmtk/utils/DisableWarnings.hpp>
20#include <fastenvelope/FastEnvelope.h>
21#include <wmtk/utils/EnableWarnings.hpp>
24#include "Parameters.h"
30namespace wmtk::components::triwild {
38inline constexpr size_t NO_FEATURE = std::numeric_limits<size_t>::max();
76 std::vector<Vector2d> m_V_envelope;
77 std::vector<Vector2i> m_E_envelope;
121 void split_after_vertex(
const size_t vid)
override
123 m_vertex_extra[vid].m_feature_id = NO_FEATURE;
132 std::pair<size_t, size_t>
feature_retention(
double* worst_ratio =
nullptr)
const;
144 m_envelope_eps = envelope_eps;
145 NUM_THREADS = _num_threads;
147 optimization::deactivate_opt_logger();
152 logger().info(
"w_envelope = {}", we);
178 const std::vector<Vector2r>& V_rational,
181 const std::vector<std::string>& tag_names,
182 const MatrixXd& V_env,
183 const MatrixXi& E_env);
185 void init_surfaces_and_boundaries();
187 void init_envelope(
const MatrixXd& V,
const MatrixXi& F);
210 void write_msh_groups(std::string file,
const bool write_envelope =
true);
212 void write_vtu(
const std::string& path)
const;
231 void write_smoothing_debug_output(
const std::string& path)
const override { write_vtu(path); }
234 void collapse_pass_end(
size_t)
override
238 "[feature] {} collapses refused to keep a polyline endpoint or junction "
239 "within {:.6} of its input position",
244 bool collapse_before_vertex(
size_t v1,
size_t v2)
override
250 void collapse_after_vertex(
size_t v1,
size_t v2)
override
252 if (m_vertex_extra[v2].m_feature_id == NO_FEATURE) {
253 m_vertex_extra[v2].m_feature_id = m_vertex_extra[v1].m_feature_id;
Whether a codimension-1 simplex is tracked surface, and which bbox side it lies on.
Definition SurfaceTagAttributes.h:15
What triwild and simwild's 2D mesh share.
Definition TriOptimizerMesh.h:38
AttributeContainerGroup m_vertex_attr_group
What p_vertex_attrs points at, so a derived class can register more.
Definition TriOptimizerMesh.h:95
OptimizerParameters & m_params
Definition TriOptimizerMesh.h:135
Definition TriWildMesh.h:41
std::pair< size_t, size_t > feature_retention(double *worst_ratio=nullptr) const
{feature points still represented within eps, total feature points}.
Definition TriWildMesh.cpp:716
void compute_winding_numbers(const std::vector< MatrixXd > &Vs, const std::vector< MatrixXi > &Es)
Tag every face with the inputs it lies inside, by winding number.
Definition TriWildMesh.cpp:510
void filter_with_input_winding_number()
Remove the faces that lie inside no input (needs compute_winding_numbers).
Definition TriWildMesh.cpp:563
std::atomic< size_t > m_feature_rejects
Collapses refused because they would drop or displace a feature point. Diagnostic.
Definition TriWildMesh.h:110
Parameters & m_tri_params
Definition TriWildMesh.h:74
bool collapse_breaks_feature(const size_t v1_id, const size_t v2_id) const
True iff collapsing v1 into v2 would drop or displace a feature point.
Definition TriWildMesh.cpp:775
std::vector< Vector2d > m_feature_points
Definition TriWildMesh.h:108
double m_feature_eps
Definition TriWildMesh.h:90
void filter_with_flood_fill()
Remove the flood-fill region that dominates the mesh boundary (needs flood_fill).
Definition TriWildMesh.cpp:577
bool smoothing_position_is_allowed(const size_t vid, const Vector2d &p) const override
May vertex vid sit at p?
Definition TriWildMesh.cpp:764
size_t refine_sizing_around_worst(double max_energy) override
The old global sizing-field update (KNN R-ball around every low-quality triangle)....
Definition TriWildMesh.cpp:335
void init_mesh(const MatrixXd &V, const std::vector< Vector2r > &V_rational, const MatrixXi &F, const MatrixXi &E, const std::vector< std::string > &tag_names, const MatrixXd &V_env, const MatrixXi &E_env)
Init mesh from IGL-style matrices.
Definition TriWildMesh.cpp:42
Definition AttributeCollection.hpp:36
double w_amips
Definition OptimizerParameters.h:154
Definition TriOptimizerMesh.h:73
Definition TriOptimizerMesh.h:41
The fields shared with tetwild and simwild live in wmtk::OptimizerParameters.
Definition Parameters.h:10