diff --git a/application/main.cpp b/application/main.cpp index a3ab2a3..286ac37 100644 --- a/application/main.cpp +++ b/application/main.cpp @@ -17,25 +17,25 @@ int main() auto node_iter1 = blobtree_add_primitive_node(runtime_blobtree, cylinder); auto node_iter2 = blobtree_add_primitive_node(runtime_blobtree, sphere1); auto node_iter3 = blobtree_add_operation_node(runtime_blobtree, node_iter1, node_iter2, INTERSECTION_OP); - // auto baked_blobtree = bake_blobtree(runtime_blobtree); - // destroy_blobtree(runtime_blobtree); + auto baked_blobtree = bake_blobtree(runtime_blobtree); + destroy_blobtree(runtime_blobtree); - // std::cout << "blobtree created..." << std::endl; + std::cout << "blobtree created..." << std::endl; - // s_settings settings{}; - // settings.resolution = 21; - // settings.scene_aabb_margin = 1e-5; - // settings.restricted_primitive_bounding_test = true; - // auto solver = create_solver(baked_blobtree, settings); + s_settings settings{}; + settings.resolution = 21; + settings.scene_aabb_margin = 1e-5; + settings.restricted_primitive_bounding_test = true; + auto solver = create_solver(baked_blobtree, settings); - // auto result = generate_polymesh(solver); - // print_statistics(solver); + auto result = generate_polymesh(solver); + print_statistics(solver); - // destroy_solver(solver); - // destroy_baked_blobtree(baked_blobtree); - // destroy_primitive(sphere1); - // destroy_primitive(cylinder); - // destroy_primitive_data_center(primitive_data_center); + destroy_solver(solver); + destroy_baked_blobtree(baked_blobtree); + destroy_primitive(sphere1); + destroy_primitive(cylinder); + destroy_primitive_data_center(primitive_data_center); return 0; } \ No newline at end of file diff --git a/blobtree_structure/src/internal_structs.cpp b/blobtree_structure/src/internal_structs.cpp index d91e39e..c617a93 100644 --- a/blobtree_structure/src/internal_structs.cpp +++ b/blobtree_structure/src/internal_structs.cpp @@ -22,11 +22,11 @@ bool runtime_node_t::is_operation_node() const noexcept { return node_data.get_p bool runtime_node_t::is_primitive_node() const noexcept { return !is_operation_node(); } -bool runtime_node_t::is_parent_null() const noexcept { return parent; } +bool runtime_node_t::is_parent_null() const noexcept { return !parent; } -bool runtime_node_t::is_left_child_null() const noexcept { return left_child; } +bool runtime_node_t::is_left_child_null() const noexcept { return !left_child; } -bool runtime_node_t::is_right_child_null() const noexcept { return right_child; } +bool runtime_node_t::is_right_child_null() const noexcept { return !right_child; } bool runtime_node_t::set_parent(pointer_wrapper _parent) noexcept { diff --git a/primitive_process/src/base/primitive.cpp b/primitive_process/src/base/primitive.cpp index 94b9514..f76cf47 100644 --- a/primitive_process/src/base/primitive.cpp +++ b/primitive_process/src/base/primitive.cpp @@ -34,7 +34,7 @@ void primitive::destroy() { auto subfaces = get_subfaces(); auto subface_types = get_subface_types(); - assert(subfaces.front()); + assert(subfaces.front().get_ptr() != nullptr); auto data_center = subfaces.front()->data_center; assert(data_center); diff --git a/primitive_process/src/data/data_center.cpp b/primitive_process/src/data/data_center.cpp index 98597bf..b885e80 100644 --- a/primitive_process/src/data/data_center.cpp +++ b/primitive_process/src/data/data_center.cpp @@ -31,6 +31,7 @@ void primitive_data_center_t::require_surface(surface_type const internal::paired_model_matrix_ptr_t& matrix, marked_subface_ptr_t& subface) { + require_transform_block(matrix); switch (type) { case surface_type::plane: { auto [iter, is_new] = std::get(this->surfaces[static_cast(type)]).acquire(matrix); @@ -68,30 +69,24 @@ void primitive_data_center_t::release_transform_block(const internal::paired_mod void primitive_data_center_t::release_surface(surface_type type, const marked_subface_ptr_t& subface) { switch (type) { - case surface_type::plane: - { + case surface_type::plane: { auto model_matrices = subface->model_matrices; std::get(this->surfaces[static_cast(type)]).release(model_matrices); - release_transform_block(model_matrices); break; } - case surface_type::sphere: - { + case surface_type::sphere: { auto model_matrices = subface->model_matrices; std::get(this->surfaces[static_cast(type)]).release(model_matrices); - release_transform_block(model_matrices); break; } - case surface_type::cylinder: - { + case surface_type::cylinder: { auto model_matrices = subface->model_matrices; std::get(this->surfaces[static_cast(type)]).release(model_matrices); - release_transform_block(model_matrices); break; } - default: - break; + default: break; } + release_transform_block(subface->model_matrices); } namespace internal