Skip to content

Commit ba20e6c

Browse files
committed
Merge branch 'next' of https://github.com/Geode-solutions/OpenGeode into fix/basic-obj-degen
2 parents ff0fe6b + 11e15b3 commit ba20e6c

File tree

18 files changed

+91
-42
lines changed

18 files changed

+91
-42
lines changed

include/geode/geometry/bounding_box.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ namespace geode
5757

5858
void add_point( const Point< dimension >& point );
5959

60+
void extends( double length );
61+
6062
bool contains( const Point< dimension >& point ) const;
6163

6264
[[nodiscard]] bool intersects(

include/geode/geometry/nn_search.hpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ namespace geode
4242
public:
4343
struct ColocatedInfo
4444
{
45+
ColocatedInfo() = default;
4546
[[nodiscard]] index_t nb_unique_points() const
4647
{
4748
return unique_points.size();
@@ -52,13 +53,19 @@ namespace geode
5253
return colocated_mapping.size() - nb_unique_points();
5354
}
5455

56+
std::vector< Point< dimension > > unique_points;
57+
/*!
58+
* This list has the size of the number of points in the tree.
59+
* Each index is pointing to its old point index as given in input
60+
* vector.
61+
*/
62+
std::vector< index_t > colocated_mapping;
5563
/*!
5664
* This list has the size of the number of points in the tree.
5765
* Each index is pointing to its new unique point stored in the
5866
* unique_points vector.
5967
*/
60-
std::vector< index_t > colocated_mapping;
61-
std::vector< Point< dimension > > unique_points;
68+
std::vector< index_t > colocated_input_points;
6269
};
6370

6471
public:

include/geode/mesh/builder/graph_builder.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ namespace geode
8989
void set_edges_around_vertex(
9090
index_t vertex_id, EdgesAroundVertex edges );
9191

92+
/*!
93+
* Replace old edge vertices from a given vertex to another.
94+
* @param[in] old_vertex_id Index of the initial mesh vertex to modify
95+
* @param[in] new_vertex_id Index of the target mesh vertex to set as
96+
* edge vertex
97+
*/
98+
void replace_vertex( index_t old_vertex_id, index_t new_vertex_id );
99+
92100
/*!
93101
* Delete a set of edges
94102
* @param[in] to_delete Vector of size graph_.nb_edges(). If

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ namespace geode
6464
EdgedCurveMerger( absl::Span< const std::reference_wrapper<
6565
const EdgedCurve< dimension > > > curves,
6666
double epsilon );
67+
EdgedCurveMerger( EdgedCurveMerger&& ) noexcept;
6768
~EdgedCurveMerger();
6869

6970
[[nodiscard]] std::unique_ptr< EdgedCurve< dimension > > merge();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ namespace geode
4444
PointSetMerger( absl::Span< const std::reference_wrapper<
4545
const PointSet< dimension > > > pointsets,
4646
double epsilon );
47+
PointSetMerger( PointSetMerger&& ) noexcept;
4748
~PointSetMerger();
4849

4950
[[nodiscard]] std::unique_ptr< PointSet< dimension > > merge();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ namespace geode
6767
SolidMeshMerger( absl::Span< const std::reference_wrapper<
6868
const SolidMesh< dimension > > > solids,
6969
double epsilon );
70+
SolidMeshMerger( SolidMeshMerger&& ) noexcept;
7071
~SolidMeshMerger();
7172

7273
[[nodiscard]] std::unique_ptr< SolidMesh< dimension > > merge();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ namespace geode
6666
SurfaceMeshMerger( absl::Span< const std::reference_wrapper<
6767
const SurfaceMesh< dimension > > > surfaces,
6868
double epsilon );
69+
SurfaceMeshMerger( SurfaceMeshMerger&& ) noexcept;
6970
~SurfaceMeshMerger();
7071

7172
[[nodiscard]] std::unique_ptr< SurfaceMesh< dimension > > merge();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ namespace geode
6060
VertexMerger(
6161
absl::Span< const std::reference_wrapper< const Mesh > > meshes,
6262
double epsilon );
63+
VertexMerger( VertexMerger&& ) noexcept;
6364
~VertexMerger();
6465

6566
[[nodiscard]] absl::Span<

src/geode/geometry/basic_objects/tetrahedron.cpp

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -85,30 +85,18 @@ namespace geode
8585
template < typename PointType >
8686
bool GenericTetrahedron< PointType >::is_degenerated() const
8787
{
88-
for( const auto [vertex0, vertex1, vertex2] : tetrahedron_facet_vertex )
88+
const Point3D& point0 = vertices_.at( 0 );
89+
const Point3D& point1 = vertices_.at( 1 );
90+
const Point3D& point2 = vertices_.at( 2 );
91+
const Triangle3D triangle{ point0, point1, point2 };
92+
if( triangle.is_degenerated() )
8993
{
90-
const Point3D& point0 = vertices_.at( vertex0 );
91-
const Point3D& point1 = vertices_.at( vertex1 );
92-
const Point3D& point2 = vertices_.at( vertex2 );
93-
const Triangle3D triangle{ point0, point1, point2 };
94-
if( triangle.is_degenerated() )
95-
{
96-
return true;
97-
}
98-
for( const auto vertex3 : LRange{ 4 } )
99-
{
100-
if( vertex3 == vertex0 || vertex3 == vertex1
101-
|| vertex3 == vertex2 )
102-
{
103-
continue;
104-
}
105-
const Point3D& point3 = vertices_.at( vertex3 );
106-
return std::get< 0 >(
107-
point_plane_distance( point3, Plane{ triangle } ) )
108-
<= GLOBAL_EPSILON;
109-
}
94+
return true;
11095
}
111-
return true;
96+
const Point3D& point3 = vertices_.at( 3 );
97+
return std::get< 0 >(
98+
point_plane_distance( point3, Plane{ triangle } ) )
99+
<= GLOBAL_EPSILON;
112100
}
113101

114102
OwnerTetrahedron::OwnerTetrahedron( Point3D point0,

src/geode/geometry/basic_objects/triangle.cpp

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -273,23 +273,16 @@ namespace geode
273273
template < typename PointType, index_t dimension >
274274
bool GenericTriangle< PointType, dimension >::is_degenerated() const
275275
{
276-
for( const auto edge_id : LRange{ 3 } )
276+
const Point< dimension >& point0 = vertices_.at( 0 );
277+
const Point< dimension >& point1 = vertices_.at( 1 );
278+
const Segment< dimension > edge{ point0, point1 };
279+
if( edge.is_degenerated() )
277280
{
278-
const auto next_vertex = edge_id == 2 ? 0 : edge_id + 1;
279-
const Point< dimension >& point0 = vertices_.at( edge_id );
280-
const Point< dimension >& point1 = vertices_.at( next_vertex );
281-
const Segment< dimension > edge{ point0, point1 };
282-
if( edge.is_degenerated() )
283-
{
284-
return true;
285-
}
286-
const auto last_vertex = next_vertex == 2 ? 0 : next_vertex + 1;
287-
const Point< dimension >& point2 = vertices_.at( last_vertex );
288-
return point_line_distance(
289-
point2, InfiniteLine< dimension >{ edge } )
290-
<= GLOBAL_EPSILON;
281+
return true;
291282
}
292-
return true;
283+
const Point< dimension >& point2 = vertices_.at( 2 );
284+
return point_line_distance( point2, InfiniteLine< dimension >{ edge } )
285+
<= GLOBAL_EPSILON;
293286
}
294287

295288
template < index_t dimension >

0 commit comments

Comments
 (0)