extract explicit mesh with topology information from implicit surfaces with boolean operations, and do surface/volume integrating on them.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

100 lines
3.1 KiB

#include <iostream>
#include <array>
#include <environment.h>
#include <execution.h>
#include <io.h>
#include <construct_helper.hpp>
#include "primitive_descriptor.h"
#include "internal_primitive_desc.hpp"
void testExtrudeSDF() {
printf("Testing extrude polyline SDF\n");
auto profilePoints = std::array{raw_vector3d_t{-1., 0., 0.}, raw_vector3d_t{1., 0., 0.}};
auto profileBulges = std::array{1.0, 1.0};
polyline_descriptor_t profile{
2,
profilePoints.data(),
2,
profileBulges.data(),
raw_vector3d_t{0., 0., 1.},
true
};
auto axisPoints = std::array{raw_vector3d_t{0., 0., 0.}, raw_vector3d_t{0., 0., 2.}};
auto axisBulges = std::array{0.0};
polyline_descriptor_t axis{
2,
axisPoints.data(),
1,
axisBulges.data(),
raw_vector3d_t{0., 1., 0.},
false
};
extrude_polyline_descriptor_t extrude{
1,
&profile,
axis
};
aabb_t<> aabb{};
internal::extrude_polyline extrude_polyline{extrude, aabb};
Eigen::Vector3d p{1., 2., 1.};
double res = extrude_polyline.evaluate_sdf(p);
printf("SDF at (%f, %f, %f) is %f\n", p.x(), p.y(), p.z(), res);
}
int main()
{
testExtrudeSDF();
// std::cout << "Setting scene..." << std::endl;
// sphere_descriptor_t sphere1{
// {.0, .0, .0},
// 0.5
// };
// sphere_descriptor_t sphere2{
// {.01, .0, .0},
// 0.5
// };
// box_descriptor_t box{
// {0., 0., 0.},
// {1., 1., 1.}
// };
// auto points = std::array{
// raw_vector3d_t{-7200.0000000000282, -7479.9999999993715, 0.0},
// raw_vector3d_t{-4420.0000000000000, -7479.9999999993724, 0.0},
// raw_vector3d_t{-4420.0000000000000, -7719.9999999993724, 0.0},
// raw_vector3d_t{-7200.0000000000282, -7719.9999999993715, 0.0}
// };
// // auto buldges = std::array{0.0, 0.0, 0.0, 0.0};
// // extrude_descriptor_t extrude{
// // static_cast<uint32_t>(buldges.size()),
// // raw_vector3d_t{0.0, 0.0, 78.000000000251021},
// // points.data(),
// // buldges.data()
// // };
// // auto tree_root = blobtree_new_node(&sphere1, PRIMITIVE_TYPE_SPHERE);
// // auto tree_root = blobtree_new_node(&box, PRIMITIVE_TYPE_BOX);
// // auto tree_root = blobtree_new_node(&sphere1, PRIMITIVE_TYPE_SPHERE);
// // auto another_sphere_node = blobtree_new_node(&sphere2, PRIMITIVE_TYPE_SPHERE);
// // virtual_node_boolean_union(&tree_root, &another_sphere_node);
// auto tree_root = make_primitive_node_by_move(box);
// // auto tree_root = make_primitive_node_by_move(extrude);
// std::cout << "Setting environments..." << std::endl;
// setting_descriptor setting_desc{21, 1e-5};
// update_setting(setting_desc);
// update_environment(&tree_root);
// std::cout << "Executing solver..." << std::endl;
// auto result = execute_solver(&tree_root);
// std::cout << "Surface integral result: " << result.surf_int_result << std::endl;
// std::cout << "Volume integral result: " << result.vol_int_result << std::endl;
// std::cout << "Time statistics: " << std::endl;
// print_statistics();
return 0;
}