Wildmeshing Toolkit
Loading...
Searching...
No Matches
clough_tocher_patch.hpp
1#pragma once
2
3#include "common.h"
4#include "convex_polygon.h"
5
6#include "evaluate_surface_normal.h"
7#include "optimize_spline_surface.h"
8
10{
11public:
12 static const std::array<Eigen::Matrix<double, 3, 3>, 3>
13 m_CTtri_bounds; // constant ct sub tri boundaries
14 static const std::array<Eigen::Matrix<double, 10, 12>, 3>
15 m_CT_matrices; // constant ct matrices for 3 sub tris
16
17public:
19 CloughTocherPatch(Eigen::Matrix<double, 12, 3>& boundary_data);
20
21 int triangle_ind(const double& u, const double& v, const double& w) const;
22
23 Eigen::Matrix<double, 10, 1>
24 monomial_basis_eval(const double& u, const double& v, const double& w) const;
25
26 Eigen::Matrix<double, 10, 10> lagrange_to_monomial_basis() const;
27
28 Eigen::Matrix<double, 3, 1> CT_eval(const double& u, const double& v) const;
29
30 std::array<Eigen::Matrix<double, 10, 3>, 3> get_coeffs() const;
31
32 void set_lagrange_nodes(
33 const std::array<Eigen::Vector2d, 19>& planar_nodes,
34 const std::array<Eigen::Vector3d, 19>& lagrange_nodes);
35
36 // test usage
37 double external_boundary_data_eval(
38 const double& u,
39 const double& v,
40 Eigen::Matrix<double, 12, 1>& external_boundary_data) const;
41
49 void triangulate(
50 size_t num_refinements,
51 std::array<Eigen::MatrixXd, 3>& V,
52 std::array<Eigen::MatrixXi, 3>& F) const;
53 void triangulate_normalized(
54 size_t num_refinements,
55 std::array<Eigen::MatrixXd, 3>& V,
56 std::array<Eigen::MatrixXi, 3>& F) const;
57
64 std::array<std::array<LineSegment, 3>, 3>& patch_boundaries) const;
65
66 Eigen::Matrix<double, 3, 1> CT_eval_normalized(int idx, const double& u, const double& v) const;
67 void view() const;
68
69public:
70 // std::array<Eigen::Matrix<double, 12, 1>, 3> m_boundary_data;
71
72 std::array<TriangleCornerFunctionData, 3> m_corner_data;
73 std::array<TriangleMidpointFunctionData, 3> m_midpoint_data;
74 Eigen::Matrix<double, 12, 3> m_boundary_data; // p0, p1, p2, G01, G10, G12, G21, G20, G02, N01,
75 // N12,N20, for x, y, z
76 std::array<Eigen::Matrix<double, 10, 3>, 3> m_CT_coeffs; // constant ct matrices for 3 sub tris
77
78 int64_t m_patch_id;
79};
Definition clough_tocher_patch.hpp:10
void parametrize_patch_boundaries(std::array< std::array< LineSegment, 3 >, 3 > &patch_boundaries) const
Get the boundaries of the three subtriangle patches.
Definition clough_tocher_patch.cpp:273
void triangulate(size_t num_refinements, std::array< Eigen::MatrixXd, 3 > &V, std::array< Eigen::MatrixXi, 3 > &F) const
Triangulate the patch.
Definition clough_tocher_patch.cpp:220