#ifndef OERSTED_BOUNDARYCONSTRAINT_H #define OERSTED_BOUNDARYCONSTRAINT_H #include #include #include "Sketch.hpp" #include "InsertionQueuer.h" class DartConstraint; class BoundaryConstraint { public: BoundaryConstraint(std::shared_ptr cc) : ConstraintCurve(cc) {}; size_t size_dart_constraints() const { return DartConstraints.size(); }; size_t dart(size_t i) const { return DartConstraints[i]; }; bool is_uniform(Mesh const &m) const; bool uniform_discretizaiton() const { return UniformDiscretization; }; double smallest_parametric_edge_length(Mesh &m) const; double queue_uniform(Mesh &m, double delta_min) const; void add_dart_constraint(size_t d) { DartConstraints.push_back(d); }; // TODO: Enforce uniqueness (std::set?) void uniform_discretization(bool flag) { UniformDiscretization = flag; }; void add_to_queue(Mesh &m, size_t dart) const; void refine(Mesh &m, double_t tol); void make_uniform(Mesh &m); void make_uniform(Mesh &m, double delta_min); void sort_dart_constraints(Mesh const &m); std::shared_ptr curve() const { return ConstraintCurve; }; std::vector nodes(Mesh const &m); protected: std::vector DartConstraints; std::shared_ptr ConstraintCurve; bool UniformDiscretization{false}; }; #endif //OERSTED_BOUNDARYCONSTRAINT_H