Skip to content

Commit fc77b19

Browse files
committed
adding distance_factor parameter
1 parent c944254 commit fc77b19

File tree

11 files changed

+102
-39
lines changed

11 files changed

+102
-39
lines changed

bindings/python/src/geometry/nn_search.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
&NNSearch##dimension##D::colocated_index_mapping ) ) \
4444
.def( "frame_colocated_index_mapping", \
4545
static_cast< NNSearch##dimension##D::ColocatedInfo ( \
46-
NNSearch##dimension##D::* )( const Frame##dimension##D& ) \
47-
const >( \
46+
NNSearch##dimension##D::* )( \
47+
const Frame##dimension##D&, const double ) const >( \
4848
&NNSearch##dimension##D::colocated_index_mapping ) ); \
4949
\
5050
const auto info##dimension = \

include/geode/geometry/nn_search.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ namespace geode
118118
*/
119119
[[nodiscard]] std::vector< index_t > frame_neighbors(
120120
const Point< dimension >& point,
121-
const Frame< dimension >& epsilons_frame ) const;
121+
const Frame< dimension >& epsilons_frame,
122+
const double factor_distance ) const;
122123

123124
/*!
124125
* Get a number ol close neighbors from the given point
@@ -141,7 +142,8 @@ namespace geode
141142
const double epsilon ) const;
142143

143144
[[nodiscard]] ColocatedInfo colocated_index_mapping(
144-
const Frame< dimension >& epsilon ) const;
145+
const Frame< dimension >& epsilon,
146+
const double factor_distance ) const;
145147

146148
private:
147149
IMPLEMENTATION_MEMBER( impl_ );

include/geode/mesh/helpers/detail/curve_merger.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ namespace geode
7171
double epsilon );
7272

7373
[[nodiscard]] std::unique_ptr< EdgedCurve< dimension > > merge(
74-
const Frame< dimension >& epsilons_frame );
74+
const Frame< dimension >& epsilons_frame,
75+
const double factor_distance );
7576

7677
[[nodiscard]] index_t edge_in_merged(
7778
index_t curve, index_t edge ) const;

include/geode/mesh/helpers/detail/solid_merger.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ namespace geode
7676
double epsilon );
7777

7878
[[nodiscard]] std::unique_ptr< SolidMesh< dimension > > merge(
79-
const Frame< dimension >& epsilons_frame );
79+
const Frame< dimension >& epsilons_frame,
80+
const double factor_distance );
8081

8182
[[nodiscard]] index_t polyhedron_in_merged(
8283
index_t solid, index_t polyhedron ) const;

include/geode/mesh/helpers/detail/surface_merger.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ namespace geode
7272
double epsilon );
7373

7474
[[nodiscard]] std::unique_ptr< SurfaceMesh< dimension > > merge(
75-
const Frame< dimension >& epsilons_frame );
75+
const Frame< dimension >& epsilons_frame,
76+
const double factor_distance );
7677

7778
[[nodiscard]] index_t polygon_in_merged(
7879
index_t surface, index_t polygon ) const;

include/geode/mesh/helpers/detail/vertex_merger.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ namespace geode
8282

8383
void create_points( double epsilon );
8484

85-
void create_points( const Frame< dimension >& epsilons_frame );
85+
void create_points( const Frame< dimension >& epsilons_frame,
86+
const double factor_distance );
8687

8788
private:
8889
IMPLEMENTATION_MEMBER( impl_ );

src/geode/geometry/nn_search.cpp

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ namespace geode
7979
}
8080

8181
std::vector< index_t > frame_neighbors( const Point< dimension >& point,
82-
const Frame< dimension >& epsilons_frame ) const
82+
const Frame< dimension >& epsilons_frame,
83+
const double factor_distance ) const
8384
{
8485
std::vector< nanoflann::ResultItem< index_t, double > > results;
8586
nanoflann::SearchParameters params;
@@ -88,7 +89,8 @@ namespace geode
8889
epsilons_frame.max_elongation_direction();
8990
const auto max_elongation =
9091
epsilons_frame.direction( max_elongation_direction ).length();
91-
const auto radius = max_elongation * max_elongation;
92+
const auto radius = factor_distance * factor_distance
93+
* max_elongation * max_elongation;
9294
const auto nb_results = nn_tree_.radiusSearch(
9395
&copy( point )[0], radius, results, params );
9496
std::vector< index_t > indices;
@@ -191,12 +193,14 @@ namespace geode
191193
typename geode::NNSearch< dimension >::ColocatedInfo
192194
colocated_index_mapping(
193195
const geode::NNSearch< dimension >& nn_search,
194-
const Frame< dimension >& epsilons_frame ) const
196+
const Frame< dimension >& epsilons_frame,
197+
const double factor_distance ) const
195198
{
196199
for( const auto d : LRange{ dimension } )
197200
{
198201
OPENGEODE_EXCEPTION(
199-
epsilons_frame.direction( d ).length() >= GLOBAL_EPSILON,
202+
epsilons_frame.direction( d ).length() * factor_distance
203+
>= GLOBAL_EPSILON,
200204
"[NNSearch::colocated_index_mapping] Given epsilon too "
201205
"small, "
202206
"should be bigger than GLOBAL_EPSILON (i.e. ",
@@ -207,14 +211,15 @@ namespace geode
207211
std::vector< index_t > mapping( nb_points, NO_ID );
208212
std::mutex mutex;
209213
async::parallel_for( async::irange( index_t{ 0 }, nb_points ),
210-
[&nn_search, &epsilons_frame, &mapping, &mutex, this](
211-
index_t point_id ) {
214+
[&nn_search, &epsilons_frame, &factor_distance, &mapping,
215+
&mutex, this]( index_t point_id ) {
212216
if( mapping[point_id] != NO_ID )
213217
{
214218
return;
215219
}
216-
const auto vertices_around = frame_neighbors(
217-
nn_search.point( point_id ), epsilons_frame );
220+
const auto vertices_around =
221+
frame_neighbors( nn_search.point( point_id ),
222+
epsilons_frame, factor_distance );
218223
std::lock_guard< std::mutex > lock( mutex );
219224
if( mapping[point_id] != NO_ID )
220225
{
@@ -352,9 +357,10 @@ namespace geode
352357
template < index_t dimension >
353358
std::vector< index_t > NNSearch< dimension >::frame_neighbors(
354359
const Point< dimension >& point,
355-
const Frame< dimension >& epsilons_frame ) const
360+
const Frame< dimension >& epsilons_frame,
361+
const double factor_distance ) const
356362
{
357-
return impl_->frame_neighbors( point, epsilons_frame );
363+
return impl_->frame_neighbors( point, epsilons_frame, factor_distance );
358364
}
359365

360366
template < index_t dimension >
@@ -375,9 +381,11 @@ namespace geode
375381
template < geode::index_t dimension >
376382
typename geode::NNSearch< dimension >::ColocatedInfo
377383
NNSearch< dimension >::colocated_index_mapping(
378-
const Frame< dimension >& epsilons_frame ) const
384+
const Frame< dimension >& epsilons_frame,
385+
const double factor_distance ) const
379386
{
380-
return impl_->colocated_index_mapping( *this, epsilons_frame );
387+
return impl_->colocated_index_mapping(
388+
*this, epsilons_frame, factor_distance );
381389
}
382390

383391
template class opengeode_geometry_api NNSearch< 2 >;

src/geode/mesh/helpers/detail/curve_merger.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,10 @@ namespace geode
7171

7272
std::unique_ptr< EdgedCurve< dimension > > merge(
7373
EdgedCurveMerger< dimension >& merger,
74-
const Frame< dimension >& epsilons_frame )
74+
const Frame< dimension >& epsilons_frame,
75+
const double factor_distance )
7576
{
76-
merger.create_points( epsilons_frame );
77+
merger.create_points( epsilons_frame, factor_distance );
7778
create_edges( merger );
7879
clean_curve( merger );
7980
curve_id_.clear();
@@ -218,9 +219,10 @@ namespace geode
218219
template < index_t dimension >
219220
std::unique_ptr< EdgedCurve< dimension > >
220221
EdgedCurveMerger< dimension >::merge(
221-
const Frame< dimension >& epsilons_frame )
222+
const Frame< dimension >& epsilons_frame,
223+
const double factor_distance )
222224
{
223-
return impl_->merge( *this, epsilons_frame );
225+
return impl_->merge( *this, epsilons_frame, factor_distance );
224226
}
225227

226228
template < index_t dimension >

src/geode/mesh/helpers/detail/solid_merger.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ namespace geode
9797

9898
std::unique_ptr< SolidMesh< dimension > > merge(
9999
SolidMeshMerger< dimension >& merger,
100-
const Frame3D& epsilons_frame )
100+
const Frame3D& epsilons_frame,
101+
const double factor_distance )
101102
{
102-
merger.create_points( epsilons_frame );
103+
merger.create_points( epsilons_frame, factor_distance );
103104
create_polyhedra( merger );
104105
create_adjacencies( merger );
105106
clean_solid( merger );
@@ -350,9 +351,10 @@ namespace geode
350351
template < index_t dimension >
351352
std::unique_ptr< SolidMesh< dimension > >
352353
SolidMeshMerger< dimension >::merge(
353-
const Frame< dimension >& epsilons_frame )
354+
const Frame< dimension >& epsilons_frame,
355+
const double factor_distance )
354356
{
355-
return impl_->merge( *this, epsilons_frame );
357+
return impl_->merge( *this, epsilons_frame, factor_distance );
356358
}
357359

358360
template < index_t dimension >

src/geode/mesh/helpers/detail/surface_merger.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,10 @@ namespace geode
9797

9898
std::unique_ptr< SurfaceMesh< dimension > > merge(
9999
SurfaceMeshMerger< dimension >& merger,
100-
const Frame< dimension >& epsilons_frame )
100+
const Frame< dimension >& epsilons_frame,
101+
const double factor_distance )
101102
{
102-
merger.create_points( epsilons_frame );
103+
merger.create_points( epsilons_frame, factor_distance );
103104
create_polygons( merger );
104105
create_adjacencies( merger );
105106
clean_surface( merger );
@@ -332,9 +333,10 @@ namespace geode
332333
template < index_t dimension >
333334
std::unique_ptr< SurfaceMesh< dimension > >
334335
SurfaceMeshMerger< dimension >::merge(
335-
const Frame< dimension >& epsilons_frame )
336+
const Frame< dimension >& epsilons_frame,
337+
const double factor_distance )
336338
{
337-
return impl_->merge( *this, epsilons_frame );
339+
return impl_->merge( *this, epsilons_frame, factor_distance );
338340
}
339341

340342
template < index_t dimension >

0 commit comments

Comments
 (0)