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.
85 lines
3.2 KiB
85 lines
3.2 KiB
#include <iostream>
|
|
#include <array>
|
|
#include <vector>
|
|
#include "io_primitive.h"
|
|
#include "math/math_defs.hpp"
|
|
#include "mimalloc.h"
|
|
#include "primitive_descriptor.h"
|
|
|
|
#include <solve.h>
|
|
|
|
int main()
|
|
{
|
|
helixline_axis_descriptor_t axis_desc{};
|
|
axis_desc.axis_start = {0, 0, 0};
|
|
axis_desc.axis_end = {0, 0, 13};
|
|
axis_desc.is_righthanded = true;
|
|
axis_desc.radius = 1.;
|
|
axis_desc.advance_per_round = 1;
|
|
axis_desc.start_direction = {1, 0, 0};
|
|
|
|
// polyline_axis_descriptor_t axis_desc{};
|
|
// std::vector points_{
|
|
// vector3d{0, 0, 0},
|
|
// vector3d{0, 1, 1}
|
|
// };
|
|
// axis_desc.point_number = 2;
|
|
// axis_desc.points = points_.data();
|
|
// std::vector bulges_{std::tan(pi / 8)};
|
|
// axis_desc.bulge_number = 1;
|
|
// axis_desc.bulges = bulges_.data();
|
|
// axis_desc.reference_normal = {1, 0, 0};
|
|
// axis_desc.is_closed = false;
|
|
|
|
polyline_pattern_descriptor_t pattern_desc{};
|
|
pattern_desc.anchor = {0, 0};
|
|
std::vector points{
|
|
vector2d{-.1, 0},
|
|
vector2d{.1, 0},
|
|
vector2d{-.1, 0}
|
|
};
|
|
pattern_desc.point_number = 3;
|
|
pattern_desc.points = points.data();
|
|
std::vector bulges{1., 1.};
|
|
pattern_desc.bulge_number = 2;
|
|
pattern_desc.bulges = bulges.data();
|
|
|
|
auto primitive_data_center = create_primitive_data_center();
|
|
auto pattern = create_pattern(primitive_data_center, &pattern_desc, PATTERN_TYPE_POLYLINE);
|
|
auto axis = create_extrude_axis(primitive_data_center, &axis_desc, AXIS_TYPE_EXTRUDE_HELIXLINE);
|
|
auto extrude = create_param_primitive(&axis, &pattern, primitive_data_center, PRIMITIVE_TYPE_EXTRUDE);
|
|
std::cout << "primitive created..." << std::endl;
|
|
|
|
auto runtime_blobtree = create_blobtree();
|
|
auto node_iter1 = blobtree_add_primitive_node(runtime_blobtree, extrude);
|
|
auto baked_blobtree = bake_blobtree(runtime_blobtree);
|
|
destroy_blobtree(runtime_blobtree);
|
|
|
|
std::cout << "blobtree created..." << std::endl;
|
|
|
|
s_settings settings{};
|
|
settings.resolution = 32;
|
|
settings.scene_aabb_margin = 1e-5;
|
|
settings.restricted_primitive_bounding_test = true;
|
|
settings.integrand_density = 32;
|
|
auto solver = create_solver(baked_blobtree, settings);
|
|
|
|
auto result = generate_polymesh(solver);
|
|
// auto integrator = generate_integral_scheme(solver);
|
|
print_statistics(solver);
|
|
|
|
// integrand_handle_t handle{1., 0, 0, 0};
|
|
// std::cout << "surface area: " << calculate_surface_integrand(integrator, handle) << std::endl;
|
|
// std::cout << "volume: " << calculate_volume_integrand(integrator, handle) << std::endl;
|
|
// std::cout << "baseline (by polymesh): \n";
|
|
// auto baseline_integral = polymesh_area_and_volume(solver);
|
|
// std::cout << "surface area: " << baseline_integral.area << std::endl;
|
|
// std::cout << "volume: " << baseline_integral.volume << std::endl;
|
|
|
|
destroy_solver(solver);
|
|
destroy_baked_blobtree(baked_blobtree);
|
|
destroy_primitive(extrude);
|
|
destroy_primitive_data_center(primitive_data_center);
|
|
|
|
return 0;
|
|
}
|