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.
 
 
 

66 lines
2.9 KiB

#pragma once
#include <internal_primitive_desc.hpp>
#include "blobtree.h"
#include "internal_structs.hpp"
// ======================================================================================================
// Debugging
// ======================================================================================================
#ifdef _DEBUG
#include <map>
#include <queue>
void output_blobtree(virtual_node_t node);
#endif
// ======================================================================================================
// APIs
// ======================================================================================================
// Basic Operations
BS_API size_t blobtree_get_node_count(uint32_t index) noexcept;
BS_API std::vector<uint32_t, tbb::tbb_allocator<uint32_t>> blobtree_get_leaf_nodes(uint32_t index) noexcept;
BS_API node_t& blobtree_get_node(const virtual_node_t& node) noexcept;
BS_API size_t get_primitive_count() noexcept;
BS_API const primitive_node_t& get_primitive_node(uint32_t index) noexcept;
BS_API void free_sub_blobtree(uint32_t index) noexcept;
BS_API void clear_blobtree() noexcept;
// Geometry Generation
BS_API virtual_node_t blobtree_new_virtual_node(const legal_primitive_descriptor_t& desc);
BS_API virtual_node_t blobtree_new_virtual_node(legal_primitive_descriptor_t&& desc);
BS_API void blobtree_free_virtual_node(const virtual_node_t& node);
// Geometry Operations
BS_API void virtual_node_boolean_union(virtual_node_t& node1, const virtual_node_t& node2);
BS_API void virtual_node_boolean_intersect(virtual_node_t& node1, const virtual_node_t& node2);
BS_API void virtual_node_boolean_difference(virtual_node_t& node1, const virtual_node_t& node2);
BS_API void virtual_node_offset(virtual_node_t& node, const raw_vector3d_t& direction, const double length);
BS_API void virtual_node_offset(virtual_node_t& node, const raw_vector3d_t& offset);
BS_API void virtual_node_split(virtual_node_t& node, raw_vector3d_t base_point, raw_vector3d_t normal);
// Tree Node Operations
BS_API bool virtual_node_set_parent(const virtual_node_t& node, const virtual_node_t& parent);
BS_API bool virtual_node_set_left_child(const virtual_node_t& node, const virtual_node_t& child);
BS_API bool virtual_node_set_right_child(const virtual_node_t& node, const virtual_node_t& child);
BS_API bool virtual_node_add_child(const virtual_node_t& node, const virtual_node_t& child);
BS_API bool virtual_node_remove_child(const virtual_node_t& node, const virtual_node_t& child);
// Node Replacement Operation
BS_API bool virtual_node_replace_primitive(const virtual_node_t& node, const legal_primitive_descriptor_t& desc);
BS_API bool virtual_node_replace_primitive(const virtual_node_t& node, legal_primitive_descriptor_t&& desc);
// Evaluation Proxy Operations
BS_API double evaluate_sdf(uint32_t index, const Eigen::Ref<const Eigen::Vector3d>& point);