Browse Source
- Upgrade mimalloc-adjust to cmake-based build with v2/v3 version support - Add configs: secure, rltgenrandom, override, etw - Switch shared_module to headeronly with mimalloc dependency - Add test targets in application xmake (test_extrude, test_mimalloc, test_box, test_complex_*) - Add two_div_pi constant and accurate_sin_cos utility in math_defs - Fix marked_ptr::get_ptr to use ~mask instead of hardcoded ~1 - Temporarily disable chain postprocessing in network_process - Update TODO itemsV2-integral
13 changed files with 685 additions and 56 deletions
@ -0,0 +1,158 @@ |
|||||
|
#include <iostream> |
||||
|
#include <array> |
||||
|
#include "data/data_type.hpp" |
||||
|
#include "io_blobtree.h" |
||||
|
#include "io_primitive.h" |
||||
|
#include "mimalloc.h" |
||||
|
#include "primitive/simple/box.hpp" |
||||
|
#include "primitive_descriptor.h" |
||||
|
|
||||
|
#include <solve.h> |
||||
|
|
||||
|
int main() |
||||
|
{ |
||||
|
mi_version(); |
||||
|
|
||||
|
helixline_axis_descriptor_t axis_desc{}; |
||||
|
axis_desc.axis_start = {0, 0, 0}; |
||||
|
axis_desc.axis_end = {0, 0, 1}; |
||||
|
axis_desc.is_righthanded = true; |
||||
|
axis_desc.radius = 1.; |
||||
|
axis_desc.advance_per_round = .5; |
||||
|
axis_desc.start_direction = {1, 0, 0}; |
||||
|
|
||||
|
polyline_pattern_descriptor_t pattern_desc{}; |
||||
|
pattern_desc.anchor = {0, 0}; |
||||
|
std::vector points{ |
||||
|
vector2d{-.8, 0}, |
||||
|
vector2d{.8, 0}, |
||||
|
vector2d{-.8, 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 main_cylinder = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(main_cylinder, {8, 8, 30}); |
||||
|
auto input_cylinder1 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(input_cylinder1, {4, 4, 52}); |
||||
|
primitive_apply_translation(input_cylinder1, {0, 0, 30}); |
||||
|
auto input_cylinder2 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(input_cylinder2, {6, 6, 4}); |
||||
|
primitive_apply_translation(input_cylinder2, {0, 0, 31}); |
||||
|
auto input_cylinder3 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(input_cylinder3, {6, 6, 4}); |
||||
|
primitive_apply_translation(input_cylinder3, {0, 0, 37}); |
||||
|
auto input_cylinder4 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(input_cylinder4, {5, 5, 2}); |
||||
|
primitive_apply_translation(input_cylinder4, {0, 0, 41.5}); |
||||
|
auto input_cylinder5 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(input_cylinder5, {5, 5, 2}); |
||||
|
primitive_apply_translation(input_cylinder5, {0, 0, 44}); |
||||
|
auto input_cylinder6 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(input_cylinder6, {5, 5, 15}); |
||||
|
primitive_apply_translation(input_cylinder6, {0, 0, 46.5}); |
||||
|
auto output_cylinder1 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(output_cylinder1, {5, 5, 30}); |
||||
|
primitive_apply_translation(output_cylinder1, {0, 0, -30}); |
||||
|
auto output_cylinder2 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(output_cylinder2, {6, 6, 4}); |
||||
|
primitive_apply_translation(output_cylinder2, {0, 0, -4}); |
||||
|
auto output_cylinder3 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(output_cylinder3, {6, 6, 24}); |
||||
|
primitive_apply_translation(output_cylinder3, {0, 0, -30}); |
||||
|
auto output_cylinder4 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(output_cylinder4, {7, 7, 1}); |
||||
|
primitive_apply_translation(output_cylinder4, {0, 0, -31}); |
||||
|
auto output_cylinder5 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(output_cylinder5, {9, 9, 4}); |
||||
|
primitive_apply_translation(output_cylinder5, {0, 0, -35}); |
||||
|
|
||||
|
auto inner_cylinder = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(inner_cylinder, {3, 3, 52}); |
||||
|
primitive_apply_translation(inner_cylinder, {0, 0, 30}); |
||||
|
|
||||
|
auto key1 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(key1, {1, 10, 5}); |
||||
|
primitive_apply_rotation(key1, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(key1, {0, 0, 72}); |
||||
|
|
||||
|
auto key2 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(key2, {1, 13, 5}); |
||||
|
primitive_apply_rotation(key2, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(key2, {0, 5, 14}); |
||||
|
|
||||
|
auto hole1 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_SPHERE); |
||||
|
primitive_apply_scale(hole1, {1.5, 1.5, 1.5}); |
||||
|
primitive_apply_rotation(hole1, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(hole1, {0, 5.5, 32.5}); |
||||
|
|
||||
|
auto hole2 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_SPHERE); |
||||
|
primitive_apply_scale(hole2, {1.5, 1.5, 1.5}); |
||||
|
primitive_apply_rotation(hole2, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(hole2, {-5.5, 0, 32.5}); |
||||
|
|
||||
|
// auto circle_pattern = create_pattern(primitive_data_center, &pattern_desc, PATTERN_TYPE_POLYLINE);
|
||||
|
// auto righthand_axis = create_extrude_axis(primitive_data_center, &axis_desc, AXIS_TYPE_EXTRUDE_HELIXLINE);
|
||||
|
// auto helix1 = create_param_primitive(&righthand_axis, &circle_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, main_cylinder); |
||||
|
auto node_iter2 = blobtree_add_primitive_node(runtime_blobtree, input_cylinder1); |
||||
|
auto node_iter3 = blobtree_add_operation_node(runtime_blobtree, node_iter1, node_iter2, UNION_OP); |
||||
|
auto node_iter4 = blobtree_add_primitive_node(runtime_blobtree, input_cylinder2); |
||||
|
auto node_iter5 = blobtree_add_primitive_node(runtime_blobtree, input_cylinder3); |
||||
|
auto node_iter6 = blobtree_add_operation_node(runtime_blobtree, node_iter3, node_iter4, UNION_OP); |
||||
|
auto node_iter7 = blobtree_add_operation_node(runtime_blobtree, node_iter6, node_iter5, UNION_OP); |
||||
|
auto node_iter8 = blobtree_add_primitive_node(runtime_blobtree, input_cylinder4); |
||||
|
auto node_iter9 = blobtree_add_operation_node(runtime_blobtree, node_iter8, node_iter7, UNION_OP); |
||||
|
auto node_iter10 = blobtree_add_primitive_node(runtime_blobtree, input_cylinder5); |
||||
|
auto node_iter11 = blobtree_add_operation_node(runtime_blobtree, node_iter9, node_iter10, UNION_OP); |
||||
|
auto node_iter12 = blobtree_add_primitive_node(runtime_blobtree, input_cylinder6); |
||||
|
auto node_iter13 = blobtree_add_operation_node(runtime_blobtree, node_iter11, node_iter12, UNION_OP); |
||||
|
auto node_iter14 = blobtree_add_primitive_node(runtime_blobtree, output_cylinder1); |
||||
|
auto node_iter15 = blobtree_add_operation_node(runtime_blobtree, node_iter13, node_iter14, UNION_OP); |
||||
|
auto node_iter16 = blobtree_add_primitive_node(runtime_blobtree, output_cylinder2); |
||||
|
auto node_iter17 = blobtree_add_operation_node(runtime_blobtree, node_iter15, node_iter16, UNION_OP); |
||||
|
auto node_iter18 = blobtree_add_primitive_node(runtime_blobtree, output_cylinder3); |
||||
|
auto node_iter19 = blobtree_add_operation_node(runtime_blobtree, node_iter17, node_iter18, UNION_OP); |
||||
|
auto node_iter20 = blobtree_add_primitive_node(runtime_blobtree, output_cylinder4); |
||||
|
auto node_iter21 = blobtree_add_operation_node(runtime_blobtree, node_iter19, node_iter20, UNION_OP); |
||||
|
auto node_iter22 = blobtree_add_primitive_node(runtime_blobtree, output_cylinder5); |
||||
|
auto node_iter23 = blobtree_add_operation_node(runtime_blobtree, node_iter21, node_iter22, UNION_OP); |
||||
|
auto node_iter24 = blobtree_add_primitive_node(runtime_blobtree, inner_cylinder); |
||||
|
auto node_iter25 = blobtree_add_operation_node(runtime_blobtree, node_iter23, node_iter24, DIFFERENCE_OP); |
||||
|
auto node_iter26 = blobtree_add_primitive_node(runtime_blobtree, key1); |
||||
|
auto node_iter27 = blobtree_add_operation_node(runtime_blobtree, node_iter25, node_iter26, DIFFERENCE_OP); |
||||
|
auto node_iter28 = blobtree_add_primitive_node(runtime_blobtree, key2); |
||||
|
auto node_iter29 = blobtree_add_operation_node(runtime_blobtree, node_iter27, node_iter28, UNION_OP); |
||||
|
auto node_iter30 = blobtree_add_primitive_node(runtime_blobtree, hole1); |
||||
|
auto node_iter31 = blobtree_add_operation_node(runtime_blobtree, node_iter29, node_iter30, DIFFERENCE_OP); |
||||
|
auto node_iter32 = blobtree_add_primitive_node(runtime_blobtree, hole2); |
||||
|
auto node_iter33 = blobtree_add_operation_node(runtime_blobtree, node_iter31, node_iter32, DIFFERENCE_OP); |
||||
|
auto baked_blobtree = bake_blobtree(runtime_blobtree); |
||||
|
destroy_blobtree(runtime_blobtree); |
||||
|
|
||||
|
std::cout << "blobtree created..." << std::endl; |
||||
|
|
||||
|
s_settings settings{}; |
||||
|
settings.resolution = 63; |
||||
|
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); |
||||
|
print_statistics(solver); |
||||
|
|
||||
|
destroy_solver(solver); |
||||
|
destroy_baked_blobtree(baked_blobtree); |
||||
|
// destroy_primitive(main_sphere);
|
||||
|
destroy_primitive_data_center(primitive_data_center); |
||||
|
|
||||
|
return 0; |
||||
|
} |
||||
@ -0,0 +1,222 @@ |
|||||
|
#include <iostream> |
||||
|
#include <array> |
||||
|
#include "io_blobtree.h" |
||||
|
#include "io_primitive.h" |
||||
|
#include "math/math_defs.hpp" |
||||
|
#include "mimalloc.h" |
||||
|
#include "primitive_descriptor.h" |
||||
|
|
||||
|
#include <solve.h> |
||||
|
|
||||
|
#define CONCAT(a, b) a ## b |
||||
|
#define CONCAT_INDIRECT(a, b) CONCAT(a, b) |
||||
|
|
||||
|
#define INC_1 2 |
||||
|
#define INC_2 3 |
||||
|
#define INC_3 4 |
||||
|
#define INC_4 5 |
||||
|
#define INC_5 6 |
||||
|
#define INC_6 7 |
||||
|
#define INC_7 8 |
||||
|
#define INC_8 9 |
||||
|
#define INC_9 10 |
||||
|
#define INC_10 11 |
||||
|
#define INC_11 12 |
||||
|
#define INC_12 13 |
||||
|
#define INC_13 14 |
||||
|
#define INC_14 15 |
||||
|
#define INC_15 16 |
||||
|
#define INC_16 17 |
||||
|
#define INC_17 18 |
||||
|
#define INC_18 19 |
||||
|
#define INC_19 20 |
||||
|
#define INC_20 21 |
||||
|
#define INC_21 22 |
||||
|
#define INC_22 23 |
||||
|
#define INC_23 24 |
||||
|
#define INC_24 25 |
||||
|
#define INC_25 26 |
||||
|
#define INC_26 27 |
||||
|
#define INC_27 28 |
||||
|
#define INC_28 29 |
||||
|
#define INC_29 30 |
||||
|
#define INC_30 31 |
||||
|
#define INC_31 32 |
||||
|
|
||||
|
#define ADD2_1 3 |
||||
|
#define ADD2_2 4 |
||||
|
#define ADD2_3 5 |
||||
|
#define ADD2_4 6 |
||||
|
#define ADD2_5 7 |
||||
|
#define ADD2_6 8 |
||||
|
#define ADD2_7 9 |
||||
|
#define ADD2_8 10 |
||||
|
#define ADD2_9 11 |
||||
|
#define ADD2_10 12 |
||||
|
#define ADD2_11 13 |
||||
|
#define ADD2_12 14 |
||||
|
#define ADD2_13 15 |
||||
|
#define ADD2_14 16 |
||||
|
#define ADD2_15 17 |
||||
|
#define ADD2_16 18 |
||||
|
#define ADD2_17 19 |
||||
|
#define ADD2_18 20 |
||||
|
#define ADD2_19 21 |
||||
|
#define ADD2_20 22 |
||||
|
#define ADD2_21 23 |
||||
|
#define ADD2_22 24 |
||||
|
#define ADD2_23 25 |
||||
|
#define ADD2_24 26 |
||||
|
#define ADD2_25 27 |
||||
|
#define ADD2_26 28 |
||||
|
#define ADD2_27 29 |
||||
|
#define ADD2_28 30 |
||||
|
#define ADD2_29 31 |
||||
|
#define ADD2_30 32 |
||||
|
#define ADD2_31 33 |
||||
|
|
||||
|
#define INC(x) CONCAT_INDIRECT(INC_, x) |
||||
|
#define ADD2(x) CONCAT_INDIRECT(ADD2_, x) |
||||
|
|
||||
|
#define tree_add_primitive(num, prim) \ |
||||
|
auto CONCAT_INDIRECT(node_iter, num) = blobtree_add_primitive_node(runtime_blobtree, prim); |
||||
|
#define tree_add_op(num, op) \ |
||||
|
auto CONCAT_INDIRECT(node_iter, ADD2(num)) = blobtree_add_operation_node( \ |
||||
|
runtime_blobtree, CONCAT_INDIRECT(node_iter, num), CONCAT_INDIRECT(node_iter, INC(num)), op); |
||||
|
|
||||
|
int main() |
||||
|
{ |
||||
|
mi_version(); |
||||
|
|
||||
|
auto primitive_data_center = create_primitive_data_center(); |
||||
|
|
||||
|
auto c1 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c1, {3, 3, 16}); |
||||
|
|
||||
|
auto c2 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c2, {4, 4, 12}); |
||||
|
primitive_apply_translation(c2, {0, 0, 2}); |
||||
|
|
||||
|
auto c3 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c3, {4, 4, 10}); |
||||
|
primitive_apply_rotation(c3, {0, sqrt_2 / 2, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c3, {-4, 0, 8}); |
||||
|
|
||||
|
auto c4 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c4, {2, 2, 6}); |
||||
|
primitive_apply_rotation(c4, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c4, {0, 0, 8}); |
||||
|
|
||||
|
auto c5 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c5, {3, 3, 10}); |
||||
|
primitive_apply_rotation(c5, {0, sqrt_2 / 2, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c5, {-2, 0, 8}); |
||||
|
|
||||
|
auto c6 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c6, {3, 3, 2}); |
||||
|
primitive_apply_rotation(c6, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c6, {0, 6, 8}); |
||||
|
|
||||
|
auto c7 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_rotation(c7, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c7, {2.5, 7, 10.5}); |
||||
|
|
||||
|
auto c8 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_rotation(c8, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c8, {-2.5, 7, 5.5}); |
||||
|
|
||||
|
auto c9 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_rotation(c9, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c9, {-2.5, 7, 10.5}); |
||||
|
|
||||
|
auto c10 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_rotation(c10, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c10, {2.5, 7, 5.5}); |
||||
|
|
||||
|
auto c11 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c11, {2, 2, 1}); |
||||
|
primitive_apply_rotation(c11, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c11, {0, 7, 8}); |
||||
|
|
||||
|
auto c12 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c12, {1, 1, 4}); |
||||
|
primitive_apply_rotation(c12, {-sqrt_2 / 2, 0, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c12, {0, 7, 8}); |
||||
|
|
||||
|
auto c13 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c13, {1, 1, 16}); |
||||
|
|
||||
|
auto c14 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c14, {2, 2, 3}); |
||||
|
|
||||
|
auto c15 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c15, {2, 2, 3}); |
||||
|
primitive_apply_translation(c15, {0, 0, 13}); |
||||
|
|
||||
|
auto c16 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c16, {1, 1, 8}); |
||||
|
primitive_apply_rotation(c16, {0, sqrt_2 / 2, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c16, {0, 0, 8}); |
||||
|
|
||||
|
auto c17 = create_primitive(primitive_data_center, PRIMITIVE_TYPE_CYLINDER); |
||||
|
primitive_apply_scale(c17, {2, 2, 3}); |
||||
|
primitive_apply_rotation(c17, {0, sqrt_2 / 2, 0, sqrt_2 / 2}); |
||||
|
primitive_apply_translation(c17, {5, 0, 8}); |
||||
|
|
||||
|
std::cout << "primitive created..." << std::endl; |
||||
|
|
||||
|
auto runtime_blobtree = create_blobtree(); |
||||
|
tree_add_primitive(1, c1); |
||||
|
tree_add_primitive(2, c2); |
||||
|
tree_add_op(1, UNION_OP); |
||||
|
tree_add_primitive(4, c3); |
||||
|
tree_add_op(3, UNION_OP); |
||||
|
tree_add_primitive(6, c4); |
||||
|
tree_add_op(5, UNION_OP); |
||||
|
tree_add_primitive(8, c5); |
||||
|
tree_add_op(7, UNION_OP); |
||||
|
tree_add_primitive(10, c6); |
||||
|
tree_add_op(9, UNION_OP); |
||||
|
tree_add_primitive(12, c7); |
||||
|
tree_add_op(11, UNION_OP); |
||||
|
tree_add_primitive(14, c8); |
||||
|
tree_add_op(13, UNION_OP); |
||||
|
tree_add_primitive(16, c9); |
||||
|
tree_add_op(15, UNION_OP); |
||||
|
tree_add_primitive(18, c10); |
||||
|
tree_add_op(17, UNION_OP); |
||||
|
tree_add_primitive(20, c11); |
||||
|
tree_add_op(19, DIFFERENCE_OP); |
||||
|
tree_add_primitive(22, c12); |
||||
|
tree_add_op(21, UNION_OP); |
||||
|
tree_add_primitive(24, c13); |
||||
|
tree_add_op(23, DIFFERENCE_OP); |
||||
|
tree_add_primitive(26, c14); |
||||
|
tree_add_op(25, DIFFERENCE_OP); |
||||
|
tree_add_primitive(28, c15); |
||||
|
tree_add_op(27, DIFFERENCE_OP); |
||||
|
tree_add_primitive(30, c16); |
||||
|
tree_add_op(29, DIFFERENCE_OP); |
||||
|
tree_add_primitive(32, c17); |
||||
|
tree_add_op(31, DIFFERENCE_OP); |
||||
|
auto baked_blobtree = bake_blobtree(runtime_blobtree); |
||||
|
destroy_blobtree(runtime_blobtree); |
||||
|
|
||||
|
std::cout << "blobtree created..." << std::endl; |
||||
|
|
||||
|
s_settings settings{}; |
||||
|
settings.resolution = 63; |
||||
|
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); |
||||
|
print_statistics(solver); |
||||
|
|
||||
|
destroy_solver(solver); |
||||
|
destroy_baked_blobtree(baked_blobtree); |
||||
|
destroy_primitive_data_center(primitive_data_center); |
||||
|
|
||||
|
return 0; |
||||
|
} |
||||
@ -0,0 +1,38 @@ |
|||||
|
#include <iostream> |
||||
|
#include <array> |
||||
|
#include "mimalloc.h" |
||||
|
|
||||
|
#include <solve.h> |
||||
|
|
||||
|
int main() |
||||
|
{ |
||||
|
mi_version(); |
||||
|
|
||||
|
auto primitive_data_center = create_primitive_data_center(); |
||||
|
auto box = create_primitive(primitive_data_center, PRIMITIVE_TYPE_BOX); |
||||
|
std::cout << "primitive created..." << std::endl; |
||||
|
|
||||
|
auto runtime_blobtree = create_blobtree(); |
||||
|
auto node_iter1 = blobtree_add_primitive_node(runtime_blobtree, box); |
||||
|
auto baked_blobtree = bake_blobtree(runtime_blobtree); |
||||
|
destroy_blobtree(runtime_blobtree); |
||||
|
|
||||
|
std::cout << "blobtree created..." << std::endl; |
||||
|
|
||||
|
s_settings settings{}; |
||||
|
settings.resolution = 21; |
||||
|
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); |
||||
|
print_statistics(solver); |
||||
|
|
||||
|
destroy_solver(solver); |
||||
|
destroy_baked_blobtree(baked_blobtree); |
||||
|
destroy_primitive(box); |
||||
|
destroy_primitive_data_center(primitive_data_center); |
||||
|
|
||||
|
return 0; |
||||
|
} |
||||
@ -0,0 +1,85 @@ |
|||||
|
#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; |
||||
|
} |
||||
@ -0,0 +1,18 @@ |
|||||
|
#include <mimalloc.h> |
||||
|
#include <stdio.h> |
||||
|
#include <stdlib.h> |
||||
|
|
||||
|
int main() { |
||||
|
// 使用标准的C接口分配内存
|
||||
|
void* p = malloc(128); |
||||
|
|
||||
|
// 检查这块内存是否属于mimalloc管理
|
||||
|
if (mi_heap_of(p) != NULL) { |
||||
|
printf("✅ 重定向成功!标准malloc已经被mimalloc接管\n"); |
||||
|
} else { |
||||
|
printf("❌ 重定向失败,内存仍由系统分配器管理\n"); |
||||
|
} |
||||
|
|
||||
|
free(p); |
||||
|
return 0; |
||||
|
} |
||||
Loading…
Reference in new issue