Class bvh_tree

Inheritance Relationships

Base Type

Class Documentation

class bvh_tree : public ifcopenshell::geom::tree

Public Functions

inline virtual std::string backend_id() const override
inline virtual void add_file(ifcopenshell::file &file, const ifcopenshell::geom::settings &settings) override
inline virtual void add_element(ifcopenshell::geom::element *element) override
inline virtual std::vector<clash> clash_intersection_many(const std::vector<express::base> &set_a, const std::vector<express::base> &set_b, double tolerance = 0.002, bool check_all = true) const override
inline virtual std::vector<clash> clash_collision_many(const std::vector<express::base> &set_a, const std::vector<express::base> &set_b, bool allow_touching = false) const override
inline virtual std::vector<clash> clash_clearance_many(const std::vector<express::base> &set_a, const std::vector<express::base> &set_b, double clearance = 0.05, bool check_all = false) const override

Protected Functions

inline bool is_point_in_shape(const gp_Pnt &v, const opencascade::handle<BVH_Tree<double, 3, BVH_BinaryTree>> &bvh, const std::vector<std::array<int, 3>> &tris, const std::vector<gp_Pnt> &verts, bool should_check_again = false) const
inline std::tuple<double, std::array<double, 3>, std::array<double, 3>> pierce_shape(const gp_Vec &e1, const gp_Vec &e2, const opencascade::handle<BVH_Tree<double, 3, BVH_BinaryTree>> &bvh, const std::vector<std::array<int, 3>> &tris, const std::vector<gp_Pnt> &verts, const std::vector<gp_Vec> &normals) const
inline bool is_point_on_line(const gp_Pnt &point, const gp_Pnt &lineStart, const gp_Pnt &lineEnd) const
inline bool is_point_on_line(const gp_Vec &point, const gp_Vec &lineStart, const gp_Vec &lineEnd) const
inline std::unordered_map<int, std::vector<int>> clash_bvh(opencascade::handle<BVH_Tree<double, 3, BVH_BinaryTree>> bvh_a, opencascade::handle<BVH_Tree<double, 3, BVH_BinaryTree>> bvh_b, double extend = 0.0) const
inline clash test_intersection(const express::base &tA, const express::base &tB, double tolerance, bool check_all = true) const
inline clash test_collision(const express::base &tA, const express::base &tB, bool allow_touching) const
inline clash test_clearance(const express::base &tA, const express::base &tB, double clearance, bool check_all) const
inline std::unique_ptr<BVH_BoxSet<double, 3>> build_box_set(const std::vector<express::base> &elements) const
inline std::vector<std::vector<clash_task>> allocate_tasks_to_threads(std::vector<clash_task> &task_queue) const
inline void add_triangulation_element(ifcopenshell::geom::triangulation_element *elem)

Protected Attributes

mutable long long tri_count_ = 0
std::map<express::base, Bnd_Box> aabbs_
std::map<express::base, Bnd_OBB> obbs_
std::map<express::base, double> max_protrusions_
std::map<express::base, opencascade::handle<BVH_Tree<double, 3, BVH_BinaryTree>>> bvhs_
std::unordered_map<express::base, bool> is_manifold_
std::unordered_map<express::base, std::vector<std::array<int, 3>>> tris_
std::unordered_map<express::base, std::vector<gp_Pnt>> verts_
std::unordered_map<express::base, std::vector<gp_Vec>> normals_