58#include "MR_rect_tree.hpp"
59#include "MR_cell_cplx.hpp"
60#include "MR_rt_to_cc.hpp"
63typedef mjr::tree15b1d3rT tt1_t;
64typedef mjr::MRccT5 cc1_t;
65typedef mjr::MR_rt_to_cc<tt1_t, cc1_t> tc1_t;
67typedef mjr::tree15b2d1rT tt2_t;
68typedef mjr::MRccT5 cc2_t;
69typedef mjr::MR_rt_to_cc<tt2_t, cc2_t> tc2_t;
72tt1_t::rrpt_t twisted_cubic_crv(tt1_t::drpt_t t) {
73 return { t, t*t, t*t*t };
77tt2_t::rrpt_t twisted_cubic_srf1(tt2_t::drpt_t xzvec) {
78 tt2_t::src_t x = xzvec[0];
83tt2_t::src_t twisted_cubic_srf1_sdf(tt2_t::drpt_t xzvec) {
84 tt2_t::src_t z = xzvec[1];
85 return (twisted_cubic_srf1(xzvec)-z);
89tt2_t::rrpt_t twisted_cubic_srf2(tt2_t::drpt_t xyvec) {
90 tt2_t::src_t x = xyvec[0];
95tt2_t::src_t twisted_cubic_srf2_sdf(tt2_t::drpt_t xyvec) {
96 tt2_t::src_t y = xyvec[1];
97 return (twisted_cubic_srf2(xyvec)-y);
104 crv_tree.refine_grid(8, twisted_cubic_crv);
105 tc1_t::construct_geometry_fans(crv_ccplx,
108 {{tc1_t::val_src_spc_t::FRANGE, 0},
109 {tc1_t::val_src_spc_t::FRANGE, 1},
110 {tc1_t::val_src_spc_t::FRANGE, 2}});
111 crv_ccplx.create_named_datasets({
"t",
"x(t)",
"y(t)",
"z(t)"});
112 crv_ccplx.dump_cplx(5);
113 crv_ccplx.write_xml_vtk(
"parametric_curve_3d-crv.vtu",
"parametric_curve_3d-crv");
117 srf1_tree.refine_grid(5, twisted_cubic_srf1);
118 srf1_tree.refine_leaves_recursive_cell_pred(6, twisted_cubic_srf1, [&srf1_tree](tt2_t::diti_t i) {
return srf1_tree.cell_cross_sdf(i, twisted_cubic_srf2_sdf); });
119 srf1_tree.balance_tree(1, twisted_cubic_srf1);
120 tc2_t::construct_geometry_fans(srf1_ccplx,
123 {{tc2_t::val_src_spc_t::FDOMAIN, 0},
124 {tc2_t::val_src_spc_t::FRANGE, 0},
125 {tc2_t::val_src_spc_t::FDOMAIN, 1}});
126 srf1_ccplx.create_named_datasets({
"u",
"v",
"x(u,v)",
"y(u,v)",
"z(u,v)"});
127 srf1_ccplx.dump_cplx(5);
128 srf1_ccplx.write_xml_vtk(
"parametric_curve_3d-srf1.vtu",
"parametric_curve_3d-srf1");
132 srf2_tree.refine_grid(5, twisted_cubic_srf2);
133 srf2_tree.refine_leaves_recursive_cell_pred(6, twisted_cubic_srf2, [&srf2_tree](tt2_t::diti_t i) {
return srf2_tree.cell_cross_sdf(i, twisted_cubic_srf1_sdf); });
134 srf2_tree.balance_tree(1, twisted_cubic_srf2);
135 tc2_t::construct_geometry_fans(srf2_ccplx,
138 {{tc2_t::val_src_spc_t::FRANGE, 0},
139 {tc2_t::val_src_spc_t::FRANGE, 1},
140 {tc2_t::val_src_spc_t::FRANGE, 2}});
141 srf2_ccplx.create_named_datasets({
"u",
"v",
"x(u,v)",
"y(u,v)",
"z(u,v)"});
142 srf2_ccplx.dump_cplx(5);
143 srf2_ccplx.write_xml_vtk(
"parametric_curve_3d-srf2.vtu",
"parametric_curve_3d-srf2");