[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] (no subject)
From: |
Yves Renard |
Subject: |
[Getfem-commits] (no subject) |
Date: |
Tue, 4 Jun 2019 08:56:48 -0400 (EDT) |
branch: mb-Use_rtree_in_poly_composite
commit 9692f9124c89babb655a7ce0f96d42b30089e5f6
Author: Yves Renard <address@hidden>
Date: Tue Jun 4 14:56:18 2019 +0200
transfer rtree EPS to box comparator
---
src/bgeot_rtree.cc | 4 ++--
src/getfem/bgeot_rtree.h | 9 ++++++---
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/bgeot_rtree.cc b/src/bgeot_rtree.cc
index 257bcfa..8696c1f 100644
--- a/src/bgeot_rtree.cc
+++ b/src/bgeot_rtree.cc
@@ -193,8 +193,8 @@ namespace bgeot {
return boxes.emplace(std::move(bi)).first->id;
}
-
- rtree::rtree(scalar_type EPS_) : EPS(EPS_), tree_built(false)
+ rtree::rtree(scalar_type EPS_)
+ : EPS(EPS_), boxes(box_index_topology_compare(EPS_)), tree_built(false)
{}
void rtree::clear() {
diff --git a/src/getfem/bgeot_rtree.h b/src/getfem/bgeot_rtree.h
index 5c3c993..8010ec9 100644
--- a/src/getfem/bgeot_rtree.h
+++ b/src/getfem/bgeot_rtree.h
@@ -56,16 +56,18 @@ namespace bgeot {
};
struct box_index_topology_compare {
+ const scalar_type EPS;
bool is_less(const base_node &lhs, const base_node &rhs) const {
GMM_ASSERT2(lhs.size() == rhs.size(), "size mismatch");
- const scalar_type EPS = 1e-13;
for (size_type i = 0; i < lhs.size(); ++i)
if (gmm::abs(lhs[i] - rhs[i]) > EPS) {
return lhs[i] < rhs[i];
}
return false;
}
-
+
+ box_index_topology_compare(scalar_type EPS_) : EPS{EPS_} {}
+
bool operator()(const box_index &lhs, const box_index &rhs) const {
return is_less(*lhs.min, *rhs.min) ||
(!is_less(*rhs.min, *lhs.min) && is_less(*lhs.max, *rhs.max));
@@ -137,7 +139,8 @@ namespace bgeot {
find_contained_boxes(bmin, bmax, bs);
pbox_set_to_idvec(bs, idvec);
}
- void find_boxes_at_point(const base_node& P, std::vector<size_type>&
idvec) const
+ void find_boxes_at_point(const base_node& P,
+ std::vector<size_type>& idvec) const
{ pbox_set bs; find_boxes_at_point(P, bs); pbox_set_to_idvec(bs, idvec); }
void find_line_intersecting_boxes(const base_node& org,
const base_small_vector& dirv,