renaming package to Kinetic_space_partition

This commit is contained in:
Sven Oesau 2023-12-13 20:52:32 +01:00
parent 9ed7ec2406
commit c868c0fc91
12 changed files with 214 additions and 2128 deletions

View File

@ -102,7 +102,7 @@
\package_listing{Scale_space_reconstruction_3}
\package_listing{Advancing_front_surface_reconstruction}
\package_listing{Polygonal_surface_reconstruction}
\package_listing{Kinetic_shape_partition}
\package_listing{Kinetic_space_partition}
\package_listing{Optimal_transportation_reconstruction_2}
\cgalPackageSection{PartGeometryProcessing,Geometry Processing}

View File

@ -13,7 +13,7 @@
#ifndef CGAL_KSP_2_DATA_STRUCTURE_H
#define CGAL_KSP_2_DATA_STRUCTURE_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
#include <CGAL/KSP/utils.h>
#include <CGAL/KSP_2/Support_line.h>
@ -38,11 +38,11 @@ public:
typedef typename Kernel::Line_2 Line_2;
typedef typename Kernel::Segment_2 Segment_2;
typedef KSP_2::Support_line<Kernel> Support_line;
typedef KSP_2::Segment Segment;
typedef KSP_2::Vertex<FT> Vertex;
typedef Support_line<Kernel> Support_line;
typedef Segment Segment;
typedef Vertex<FT> Vertex;
typedef KSP_2::Meta_vertex<Point_2> Meta_vertex;
typedef Meta_vertex<Point_2> Meta_vertex;
typedef std::vector<Support_line> Support_lines;
typedef std::vector<Segment> Segments;
@ -460,7 +460,7 @@ public:
for (std::size_t i = 0; i < 4; ++i)
{
Point_2 point;
if (!KSP::intersection(m_support_lines[i].line(), m_support_lines.back().line(), point))
if (!KSP::internal::intersection(m_support_lines[i].line(), m_support_lines.back().line(), point))
continue;
FT position = m_support_lines.back().to_1d(point);

View File

@ -13,15 +13,13 @@
#ifndef CGAL_KSP_2_EVENT_H
#define CGAL_KSP_2_EVENT_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
#include <CGAL/KSP/utils.h>
namespace CGAL
{
namespace KSP_2
{
namespace CGAL {
namespace KSP_2 {
namespace internal {
template <typename GeomTraits>
class Event_queue;
@ -45,10 +43,10 @@ private:
public:
Event () { }
Event() { }
Event (std::size_t vertex_idx, std::size_t meta_vertex_idx, FT time)
: m_vertex_idx (vertex_idx), m_meta_vertex_idx (meta_vertex_idx), m_time (time)
Event(std::size_t vertex_idx, std::size_t meta_vertex_idx, FT time)
: m_vertex_idx(vertex_idx), m_meta_vertex_idx(meta_vertex_idx), m_time(time)
{ }
const std::size_t& vertex_idx() const { return m_vertex_idx; }
@ -61,14 +59,15 @@ public:
friend std::ostream& operator<< (std::ostream& os, const Event& ev)
{
os << "Event at t=" << ev.m_time << " between vertex " << ev.m_vertex_idx
<< " and meta vertex " << ev.m_meta_vertex_idx;
<< " and meta vertex " << ev.m_meta_vertex_idx;
return os;
}
};
}} // namespace CGAL::KSP_2
} // namespace internal
} // namespace KSP_2
} // namespace CGAL
#endif // CGAL_KSP_2_EVENT_H

View File

@ -13,7 +13,7 @@
#ifndef CGAL_KSP_2_EVENT_QUEUE_H
#define CGAL_KSP_2_EVENT_QUEUE_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
#include <CGAL/KSP/utils.h>
#include <CGAL/KSP_2/Event.h>
@ -23,11 +23,9 @@
#include <boost/multi_index/identity.hpp>
#include <boost/multi_index/member.hpp>
namespace CGAL
{
namespace KSP_2
{
namespace CGAL {
namespace KSP_2 {
namespace internal {
template <typename GeomTraits>
class Event_queue
@ -36,19 +34,19 @@ public:
typedef GeomTraits Kernel;
typedef typename Kernel::FT FT;
typedef KSP_2::Event<GeomTraits> Event;
typedef Event<GeomTraits> Event;
private:
typedef boost::multi_index_container
<Event,
boost::multi_index::indexed_by<
boost::multi_index::ordered_non_unique
<boost::multi_index::member<Event, FT, &Event::m_time> >,
boost::multi_index::ordered_non_unique
<boost::multi_index::member<Event, std::size_t, &Event::m_vertex_idx> >
>
> Queue;
<Event,
boost::multi_index::indexed_by<
boost::multi_index::ordered_non_unique
<boost::multi_index::member<Event, FT, &Event::m_time> >,
boost::multi_index::ordered_non_unique
<boost::multi_index::member<Event, std::size_t, &Event::m_vertex_idx> >
>
> Queue;
typedef typename Queue::iterator Queue_iterator;
typedef typename Queue::template nth_index<0>::type Queue_by_time;
@ -65,9 +63,9 @@ public:
bool empty() const { return m_queue.empty(); }
std::size_t size() const { return m_queue.size(); }
void push (const Event& ev)
void push(const Event& ev)
{
m_queue.insert (ev);
m_queue.insert(ev);
}
const Queue_by_time& queue_by_time() const { return m_queue.template get<0>(); }
@ -75,7 +73,7 @@ public:
Queue_by_time& queue_by_time() { return m_queue.template get<0>(); }
Queue_by_event_idx& queue_by_event_idx() { return m_queue.template get<1>(); }
Event pop ()
Event pop()
{
Queue_iterator iter = queue_by_time().begin();
Event out = *iter;
@ -89,19 +87,20 @@ public:
std::cerr << e << std::endl;
}
void erase_vertex_events (std::size_t vertex_idx, std::vector<Event>& events)
void erase_vertex_events(std::size_t vertex_idx, std::vector<Event>& events)
{
std::pair<Queue_by_event_idx_iterator, Queue_by_event_idx_iterator>
range = queue_by_event_idx().equal_range(vertex_idx);
std::copy (range.first, range.second, std::back_inserter (events));
queue_by_event_idx().erase (range.first, range.second);
std::copy(range.first, range.second, std::back_inserter(events));
queue_by_event_idx().erase(range.first, range.second);
}
};
}} // namespace CGAL::KSP_2
} // namespace internal
} // namespace KSP_2
} // namespace CGAL
#endif // CGAL_KSP_2_EVENT_QUEUE_H

View File

@ -13,16 +13,14 @@
#ifndef CGAL_KSP_2_META_VERTEX_H
#define CGAL_KSP_2_META_VERTEX_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
#include <CGAL/KSP/utils.h>
#include <set>
namespace CGAL
{
namespace KSP_2
{
namespace CGAL {
namespace KSP_2 {
namespace internal {
template <typename Point_2>
class Meta_vertex
@ -36,29 +34,36 @@ private:
public:
Meta_vertex () { }
Meta_vertex() { }
Meta_vertex (const Point_2& point) : m_point (point) { }
Meta_vertex(const Point_2& point) : m_point(point) { }
const Point_2& point() const { return m_point; }
const std::set<std::size_t>& support_lines_idx() const { return m_support_lines_idx; }
std::set<std::size_t>& support_lines_idx() { return m_support_lines_idx; }
void make_deadend_of (std::size_t support_line_idx)
{ m_deadends.insert (support_line_idx); }
void make_deadend_of(std::size_t support_line_idx)
{
m_deadends.insert(support_line_idx);
}
bool is_deadend_of (std::size_t support_line_idx) const
{ return m_deadends.find(support_line_idx) != m_deadends.end(); }
bool is_deadend_of(std::size_t support_line_idx) const
{
return m_deadends.find(support_line_idx) != m_deadends.end();
}
void make_no_longer_deadend_of (std::size_t support_line_idx)
{ m_deadends.erase (support_line_idx); }
void make_no_longer_deadend_of(std::size_t support_line_idx)
{
m_deadends.erase(support_line_idx);
}
};
}} // namespace CGAL::KSP_2
} // namespace internal
} // namespace KSP_2
} // namespace CGAL
#endif // CGAL_KSP_2_META_VERTEX_H

View File

@ -13,13 +13,11 @@
#ifndef CGAL_KSP_2_SEGMENT_H
#define CGAL_KSP_2_SEGMENT_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
namespace CGAL
{
namespace KSP_2
{
namespace CGAL {
namespace KSP_2 {
namespace internal {
class Segment
{
@ -32,10 +30,10 @@ private:
public:
Segment () { }
Segment() { }
Segment (std::size_t input_idx, std::size_t support_line_idx)
: m_input_idx (input_idx), m_support_line_idx (support_line_idx) { }
Segment(std::size_t input_idx, std::size_t support_line_idx)
: m_input_idx(input_idx), m_support_line_idx(support_line_idx) { }
const std::size_t& input_idx() const { return m_input_idx; }
std::size_t& input_idx() { return m_input_idx; }
@ -47,8 +45,9 @@ public:
std::size_t& support_line_idx() { return m_support_line_idx; }
};
}} // namespace CGAL::KSP_2
} // namespace internal
} // namespace KSP_2
} // namespace CGAL
#endif // CGAL_KSP_2_POLYGON_H

View File

@ -13,16 +13,14 @@
#ifndef CGAL_KSP_2_SUPPORT_LINE_H
#define CGAL_KSP_2_SUPPORT_LINE_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
#include <CGAL/KSP/utils.h>
#include <CGAL/KSP_2/Vertex.h>
namespace CGAL
{
namespace KSP_2
{
namespace CGAL {
namespace KSP_2 {
namespace internal {
template <typename GeomTraits>
class Support_line
@ -47,18 +45,18 @@ private:
public:
Support_line () { }
Support_line() { }
Support_line (const Segment_2& segment)
: m_minimum ((std::numeric_limits<FT>::max)())
, m_maximum (-(std::numeric_limits<FT>::max)())
Support_line(const Segment_2& segment)
: m_minimum((std::numeric_limits<FT>::max)())
, m_maximum(-(std::numeric_limits<FT>::max)())
, m_connected_components(1)
{
m_origin = CGAL::midpoint (segment.source(), segment.target());
m_vector = KSP::normalize (Vector_2 (segment.source(), segment.target()));
m_origin = CGAL::midpoint(segment.source(), segment.target());
m_vector = KSP::internal::normalize(Vector_2(segment.source(), segment.target()));
}
Line_2 line() const { return Line_2 (m_origin, m_vector); }
Line_2 line() const { return Line_2(m_origin, m_vector); }
const Point_2& origin() const { return m_origin; }
const Vector_2& vector() const { return m_vector; }
@ -73,14 +71,14 @@ public:
CGAL::Bbox_2 bbox() const
{
Point_2 pmin = to_2d (m_minimum);
Point_2 pmax = to_2d (m_maximum);
Point_2 pmin = to_2d(m_minimum);
Point_2 pmax = to_2d(m_maximum);
return pmin.bbox() + pmax.bbox();
}
Segment_2 segment_2() const
{
return Segment_2 (to_2d (m_minimum), to_2d (m_maximum));
return Segment_2(to_2d(m_minimum), to_2d(m_maximum));
}
const std::vector<std::size_t>& segments_idx() const { return m_segments_idx; }
@ -89,12 +87,12 @@ public:
const std::vector<std::size_t>& meta_vertices_idx() const { return m_meta_vertices_idx; }
std::vector<std::size_t>& meta_vertices_idx() { return m_meta_vertices_idx; }
FT to_1d (const Point_2& point) const
FT to_1d(const Point_2& point) const
{
return m_vector * Vector_2 (m_origin, point);
return m_vector * Vector_2(m_origin, point);
}
Point_2 to_2d (const FT& point) const { return m_origin + point * m_vector; }
Point_2 to_2d(const FT& point) const { return m_origin + point * m_vector; }
};
@ -107,7 +105,7 @@ bool operator== (const Support_line<Kernel>& a, const Support_line<Kernel>& b)
if (CGAL::abs(va * vb) < 0.99999)
return false;
return (CGAL::approximate_sqrt(CGAL::squared_distance (b.origin(), a.line())) < 1e-10);
return (CGAL::approximate_sqrt(CGAL::squared_distance(b.origin(), a.line())) < 1e-10);
}
@ -115,13 +113,15 @@ bool operator== (const Support_line<Kernel>& a, const Support_line<Kernel>& b)
template <>
bool operator==<CGAL::Exact_predicates_exact_constructions_kernel>
(const Support_line<CGAL::Exact_predicates_exact_constructions_kernel>& a,
const Support_line<CGAL::Exact_predicates_exact_constructions_kernel>& b)
const Support_line<CGAL::Exact_predicates_exact_constructions_kernel>& b)
{
return (a.line() == b.line());
}
#endif
}} // namespace CGAL::KSP_2
} // namespace internal
} // namespace KSP_2
} // namespace CGAL
#endif // CGAL_KSP_2_SUPPORT_LINE_H

View File

@ -13,15 +13,13 @@
#ifndef CGAL_KSP_2_VERTEX_H
#define CGAL_KSP_2_VERTEX_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
#include <CGAL/KSP/utils.h>
namespace CGAL
{
namespace KSP_2
{
namespace CGAL {
namespace KSP_2 {
namespace internal {
template <typename FT>
class Vertex
@ -36,16 +34,16 @@ private:
public:
Vertex () { }
Vertex() { }
Vertex (FT point,
std::size_t segment_idx = KSP::no_element(),
unsigned int remaining_intersections = 0)
: m_point (point)
, m_direction (0)
, m_segment_idx (segment_idx)
Vertex(FT point,
std::size_t segment_idx = std::size_t(-1),
unsigned int remaining_intersections = 0)
: m_point(point)
, m_direction(0)
, m_segment_idx(segment_idx)
, m_remaining_intersections(remaining_intersections)
, m_meta_vertex_idx (KSP::no_element())
, m_meta_vertex_idx(std::size_t(-1))
{
}
@ -55,7 +53,7 @@ public:
FT point(FT time) const { return m_point + time * m_direction; }
const FT& direction() const { return m_direction; }
FT& direction() { return m_direction; }
FT speed() const { return CGAL::abs (m_direction); }
FT speed() const { return CGAL::abs(m_direction); }
const unsigned int& remaining_intersections() const { return m_remaining_intersections; }
unsigned int& remaining_intersections() { return m_remaining_intersections; }
@ -74,15 +72,15 @@ public:
friend std::ostream& operator<< (std::ostream& os, const Vertex& vertex)
{
os << "vertex(" << vertex.m_point << "," << vertex.m_direction << ") on segment " << vertex.m_segment_idx
<< " and meta vertex " << vertex.meta_vertex_idx() << " with "
<< vertex.m_remaining_intersections << " remaining intersection(s)";
<< " and meta vertex " << vertex.meta_vertex_idx() << " with "
<< vertex.m_remaining_intersections << " remaining intersection(s)";
return os;
}
};
}} // namespace CGAL::KSP_2
} // namespace internal
} // namespace KSP_2
} // namespace CGAL
#endif // CGAL_KSP_2_VERTEX_H

View File

@ -10,10 +10,10 @@
//
// Author(s) : Simon Giraudot
#ifndef CGAL_KINETIC_SHAPE_RECONSTRUCTION_2_H
#define CGAL_KINETIC_SHAPE_PARTITION_2_H
#ifndef CGAL_KINETIC_SPACE_PARTITION_2_H
#define CGAL_KINETIC_SPACE_PARTITION_2_H
#include <CGAL/license/Kinetic_shape_partition.h>
#include <CGAL/license/Kinetic_space_partition.h>
#include <CGAL/box_intersection_d.h>
@ -30,7 +30,7 @@ namespace CGAL
{
template <typename GeomTraits>
class Kinetic_shape_partition_2
class Kinetic_space_partition_2
{
public:
@ -43,15 +43,15 @@ public:
typedef typename Kernel::Ray_2 Ray_2;
typedef typename Kernel::Vector_2 Vector_2;
typedef KSP_2::Data_structure<Kernel> Data;
typedef KSP_2::internal::Data_structure<Kernel> Data;
typedef typename Data::Support_line Support_line;
typedef typename Data::Segment Segment;
typedef typename Data::Vertex Vertex;
typedef typename Data::Meta_vertex Meta_vertex;
typedef KSP_2::Event<Kernel> Event;
typedef KSP_2::Event_queue<Kernel> Event_queue;
typedef KSP_2::internal::Event<Kernel> Event;
typedef KSP_2::internal::Event_queue<Kernel> Event_queue;
private:
@ -60,7 +60,7 @@ private:
public:
Kinetic_shape_partition_2() {}
Kinetic_space_partition_2() {}
template <typename SegmentRange, typename SegmentMap>
void partition (const SegmentRange& segments, SegmentMap segment_map,
@ -124,7 +124,7 @@ public:
const Support_line& support_line = m_data.support_line(i);
for (std::size_t s : support_line.segments_idx())
{
if (s == KSP::no_element())
if (s == std::size_t(-1))
{
if (verbose)
std::cerr << "ERROR: Support_line[" << i
@ -162,21 +162,21 @@ public:
{
const Segment& segment = m_data.segment(i);
if (segment.source_idx() == KSP::no_element())
if (segment.source_idx() == std::size_t(-1))
{
if (verbose)
std::cerr << "ERROR: Segment[" << i
<< "] has source Vertex[-1]" << std::endl;
return false;
}
if (segment.target_idx() == KSP::no_element())
if (segment.target_idx() == std::size_t(-1))
{
if (verbose)
std::cerr << "ERROR: Segment[" << i
<< "] has source Vertex[-1]" << std::endl;
return false;
}
if (segment.support_line_idx() == KSP::no_element())
if (segment.support_line_idx() == std::size_t(-1))
{
if (verbose)
std::cerr << "ERROR: Segment[" << i
@ -209,8 +209,8 @@ public:
<< "] acting both as source and target" << std::endl;
return false;
}
if (m_data.source_of_segment(segment).meta_vertex_idx() != KSP::no_element()
&& m_data.target_of_segment(segment).meta_vertex_idx() != KSP::no_element()
if (m_data.source_of_segment(segment).meta_vertex_idx() != std::size_t(-1)
&& m_data.target_of_segment(segment).meta_vertex_idx() != std::size_t(-1)
&& m_data.source_of_segment(segment).meta_vertex_idx() == m_data.target_of_segment(segment).meta_vertex_idx())
{
if (verbose)
@ -261,14 +261,14 @@ public:
{
const Vertex& vertex = m_data.vertex(i);
if (vertex.segment_idx() == KSP::no_element())
if (vertex.segment_idx() == std::size_t(-1))
{
if (verbose)
std::cerr << "ERROR: Vertex[" << i
<< "] is on Segment[-1]" << std::endl;
return false;
}
// if (vertex.meta_vertex_idx() == KSP::no_element())
// if (vertex.meta_vertex_idx() == std::size_t(-1))
// {
// if (verbose)
// std::cerr << "ERROR: Vertex[" << i
@ -618,7 +618,7 @@ private:
!= m_data.segment(segment_idx_b).support_line_idx());
Point_2 point;
if (!KSP::intersection(segments_2[segment_idx_a], segments_2[segment_idx_b], point))
if (!KSP::internal::intersection(segments_2[segment_idx_a], segments_2[segment_idx_b], point))
return;
todo.push_back (std::make_tuple (point,
@ -712,7 +712,7 @@ private:
continue;
Point_2 point;
if (!KSP::intersection(si, segments_2[segment_idx], point))
if (!KSP::internal::intersection(si, segments_2[segment_idx], point))
continue;
Support_line& sli = m_data.support_line_of_vertex(vertex);
@ -896,7 +896,7 @@ private:
m_data.vertex(ev.vertex_idx()).remaining_intersections() --;
// If there are still intersections to be made, propagate
std::size_t new_vertex_idx = KSP::no_element();
std::size_t new_vertex_idx = std::size_t(-1);
if (m_data.vertex(ev.vertex_idx()).remaining_intersections() != 0)
new_vertex_idx = m_data.propagate_segment (ev.vertex_idx());
else
@ -912,7 +912,7 @@ private:
std::vector<Event> events;
m_queue.erase_vertex_events (old_vertex, events);
if (new_vertex != KSP::no_element())
if (new_vertex != std::size_t(-1))
for (Event& ev : events)
{
ev.vertex_idx() = new_vertex;
@ -934,13 +934,13 @@ private:
CGAL_assertion (support_line.meta_vertices_idx().size() > 1);
std::size_t beginning = KSP::no_element();
std::size_t end = KSP::no_element();
std::size_t beginning = std::size_t(-1);
std::size_t end = std::size_t(-1);
for (std::size_t segment_idx : support_line.segments_idx())
{
// New segment
if (beginning == KSP::no_element())
if (beginning == std::size_t(-1))
{
beginning = m_data.source_of_segment(segment_idx).meta_vertex_idx();
end = m_data.target_of_segment(segment_idx).meta_vertex_idx();
@ -974,4 +974,4 @@ private:
} // namespace CGAL
#endif // CGAL_KINETIC_SHAPE_RECONSTRUCTION_2_H
#endif // CGAL_KINETIC_SPACE_PARTITION_2_H

View File

@ -7,7 +7,7 @@
#include <CGAL/Real_timer.h>
#include <CGAL/Surface_mesh.h>
#include <CGAL/Aff_transformation_2.h>
#include <CGAL/Kinetic_shape_partition_2.h>
#include <CGAL/Kinetic_space_partition_2.h>
using SC = CGAL::Simple_cartesian<double>;
using EPECK = CGAL::Exact_predicates_exact_constructions_kernel;
@ -23,8 +23,8 @@ using Transform = CGAL::Aff_transformation_2<EPECK>;
using Random = CGAL::Random;
using Mesh = CGAL::Surface_mesh<Point_2>;
using Exact_reconstruction = CGAL::Kinetic_shape_partition_2<EPECK>;
using Inexact_reconstruction = CGAL::Kinetic_shape_partition_2<EPICK>;
using Exact_reconstruction = CGAL::Kinetic_space_partition_2<EPECK>;
using Inexact_reconstruction = CGAL::Kinetic_space_partition_2<EPICK>;
Random cgal_rand;
@ -130,7 +130,7 @@ void test_segments(
std::vector<typename Kernel::Segment_2> segments;
get_segments_from_exact<Kernel>(exact_segments, segments);
CGAL::Kinetic_shape_partition_2<Kernel> ksp;
CGAL::Kinetic_space_partition_2<Kernel> ksp;
ksp.partition(segments, CGAL::Identity_property_map<typename Kernel::Segment_2>(), k, 2);
segments.clear();
ksp.output_partition_edges_to_segment_soup(std::back_inserter(segments));

View File

@ -1,7 +1,7 @@
#include <CGAL/Simple_cartesian.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Kinetic_shape_partition_3.h>
#include <CGAL/Kinetic_space_partition_3.h>
#include <CGAL/Real_timer.h>
#include <CGAL/IO/OFF.h>
#include <CGAL/IO/PLY.h>
@ -19,7 +19,7 @@ bool run_test(
const std::vector<std::vector<unsigned int> >& results) {
using Point_3 = typename Kernel::Point_3;
using KSP = CGAL::Kinetic_shape_partition_3<Kernel>;
using KSP = CGAL::Kinetic_space_partition_3<Kernel>;
std::string filename = input_filename;
std::ifstream input_file_off(filename);
@ -38,13 +38,12 @@ bool run_test(
std::cout << input_filename << std::endl;
KSP ksp(CGAL::parameters::verbose(true).debug(true));
ksp.insert(input_vertices, input_faces);
ksp.initialize();
for (std::size_t i = 0; i < ks.size(); i++) {
KSP ksp(CGAL::parameters::verbose(false).debug(false));
ksp.insert(input_vertices, input_faces);
ksp.initialize();
//std::cout << std::endl << "--INPUT K: " << k << std::endl;
ksp.partition(ks[i]);
@ -79,38 +78,38 @@ void run_all_tests() {
//run_test<Kernel>("20-inserted-polygons.ply", { 3 }, results);
results[0] = { 837, 855, 228 };
results[1] = { 919, 1043, 285 };
results[2] = { 955, 1279, 360 };
results[0] = { 58, 89, 20 };
results[1] = { 63, 102, 24 };
results[2] = { 63, 106, 26 };
run_test<Kernel>("data/stress-test-5/test-2-rnd-polygons-20-4.off", { 1, 2, 3 }, results);
results[0] = { 333, 497, 133 };
results[1] = { 339, 529, 143 };
results[2] = { 345, 575, 158 };
results[0] = { 206, 385, 99 };
results[1] = { 232, 449, 118 };
results[2] = { 265, 540, 147 };
run_test<Kernel>("data/real-data-test/test-15-polygons.off", { 1, 2, 3 }, results);
results[0] = { 53, 49, 10 };
results[1] = { 54, 63, 14 };
results[2] = { 54, 77, 18 };
results[0] = { 39, 49, 10 };
results[1] = { 48, 70, 16 };
results[2] = { 54, 84, 20 };
run_test<Kernel>("data/edge-case-test/test-same-time.off", { 1, 2, 3 }, results);
// Edge tests.
results[0] = { 18, 20, 4 };
run_test<Kernel>("data/edge-case-test/test-2-polygons.off", { 1 }, results);
results[0] = { 24, 29, 6 };
results[0] = { 22, 25, 5 };
run_test<Kernel>("data/edge-case-test/test-4-polygons.off", { 1 }, results);
results[0] = { 24, 29, 6 };
results[0] = { 22, 25, 5 };
run_test<Kernel>("data/edge-case-test/test-5-polygons.off", { 1 }, results);
results[0] = { 53, 52, 11 };
results[1] = { 54, 77, 18 };
results[0] = { 40, 52, 11 };
results[1] = { 51, 77, 18 };
run_test<Kernel>("data/edge-case-test/test-local-global-1.off", { 1, 2 }, results);
results[0] = { 53, 52, 11 };
results[1] = { 53, 73, 17 };
results[2] = { 54, 77, 18 };
results[0] = { 40, 52, 11 };
results[1] = { 49, 73, 17 };
results[2] = { 54, 84, 20 };
run_test<Kernel>("data/edge-case-test/test-local-global-2.off", { 1, 2, 3 }, results);
// Stress tests 0.
@ -124,34 +123,34 @@ void run_all_tests() {
run_test<Kernel>("data/stress-test-0/test-1-polygon-d.off", { 1 }, results);
results[0] = { 20, 22, 4 };
run_test<Kernel>("data/stress-test-0/test-2-polygons-ab.off", { 1 }, results);
results[0] = { 20, 19, 3 };
results[0] = { 19, 19, 3 };
results[1] = { 20, 22, 4 };
run_test<Kernel>("data/stress-test-0/test-2-polygons-ac.off", { 1, 2 }, results);
results[0] = { 20, 22, 4 };
run_test<Kernel>("data/stress-test-0/test-2-polygons-ad.off", { 1 }, results);
results[0] = { 18, 18, 3 };
run_test<Kernel>("data/stress-test-0/test-2-polygons-bc.off", { 1 }, results);
results[0] = { 19, 18, 3 };
results[0] = { 18, 18, 3 };
results[1] = { 19, 21, 4 };
run_test<Kernel>("data/stress-test-0/test-2-polygons-bd.off", { 1, 2 }, results);
results[0] = { 19, 21, 4 };
run_test<Kernel>("data/stress-test-0/test-2-polygons-cd.off", { 1 }, results);
results[0] = { 27, 32, 6 };
run_test<Kernel>("data/stress-test-0/test-3-polygons-abc.off", { 1 }, results);
results[0] = { 30, 33, 6 };
results[0] = { 28, 33, 6 };
results[1] = { 30, 39, 8 };
run_test<Kernel>("data/stress-test-0/test-3-polygons-abd.off", { 1, 2 }, results);
results[0] = { 28, 32, 6 };
results[0] = { 27, 32, 6 };
results[1] = { 28, 35, 7 };
run_test<Kernel>("data/stress-test-0/test-3-polygons-acd.off", { 1, 2 }, results);
results[0] = { 26, 28, 5 };
results[0] = { 25, 28, 5 };
results[1] = { 26, 31, 6 };
run_test<Kernel>("data/stress-test-0/test-3-polygons-bcd.off", { 1, 2 }, results);
results[0] = { 38, 46, 9 };
results[0] = { 36, 46, 9 };
results[1] = { 38, 52, 11 };
run_test<Kernel>("data/stress-test-0/test-4-polygons-abcd.off", { 1, 2 }, results);
results[0] = { 66, 76, 16 };
results[1] = { 67, 102, 24 };
results[0] = { 54, 76, 16 };
results[1] = { 64, 102, 24 };
results[2] = { 67, 109, 26 };
run_test<Kernel>("data/stress-test-0/test-6-polygons.off", { 1, 2, 3 }, results);
@ -165,13 +164,13 @@ void run_all_tests() {
run_test<Kernel>("data/stress-test-1/test-3-rnd-polygons-1-4.off", { 1 }, results);
results[0] = { 14, 13, 2 };
run_test<Kernel>("data/stress-test-1/test-4-rnd-polygons-1-4.off", { 1 }, results);
results[0] = { 20, 18, 3 };
results[0] = { 18, 18, 3 };
results[1] = { 20, 22, 4 };
run_test<Kernel>("data/stress-test-1/test-5-rnd-polygons-2-4.off", { 1, 2 }, results);
results[0] = { 19, 18, 3 };
results[0] = { 18, 18, 3 };
results[1] = { 19, 21, 4 };
run_test<Kernel>("data/stress-test-1/test-6-rnd-polygons-2-4.off", { 1, 2 }, results);
results[0] = { 20, 22, 4 };
results[0] = { 18, 18, 3 };
run_test<Kernel>("data/stress-test-1/test-7-rnd-polygons-2-4.off", { 1 }, results);
// Stress tests 2.
@ -184,38 +183,38 @@ void run_all_tests() {
run_test<Kernel>("data/stress-test-2/test-3-rnd-polygons-1-4.off", { 1 }, results);
results[0] = { 14, 13, 2 };
run_test<Kernel>("data/stress-test-2/test-4-rnd-polygons-1-3.off", { 1 }, results);
results[0] = { 19, 17, 3 };
results[0] = { 17, 17, 3 };
results[1] = { 19, 21, 4 };
run_test<Kernel>("data/stress-test-2/test-5-rnd-polygons-2-4.off", { 1, 2 }, results);
results[0] = { 26, 31, 6 };
results[0] = { 22, 23, 4 };
run_test<Kernel>("data/stress-test-2/test-6-rnd-polygons-3-4.off", { 1 }, results);
// Stress tests 3.
results[0] = { 20, 18, 3 };
results[0] = { 18, 18, 3 };
results[1] = { 20, 22, 4 };
run_test<Kernel>("data/stress-test-3/test-1-rnd-polygons-2-3.off", { 1, 2 }, results);
results[0] = { 17, 17, 3 };
run_test<Kernel>("data/stress-test-3/test-2-rnd-polygons-2-3.off", { 1 }, results);
results[0] = { 19, 18, 3 };
results[0] = { 18, 18, 3 };
results[1] = { 19, 21, 4 };
run_test<Kernel>("data/stress-test-3/test-3-rnd-polygons-2-3.off", { 1, 2 }, results);
results[0] = { 19, 17, 3 };
results[0] = { 17, 17, 3 };
results[1] = { 19, 21, 4 };
run_test<Kernel>("data/stress-test-3/test-4-rnd-polygons-2-4.off", { 1, 2 }, results);
//results[0] = { 12, 11, 2 };
//run_test<Kernel>("data/stress-test-3/test-5-rnd-polygons-1-3.off", { 1 }, results);
results[0] = { 19, 18, 3 };
results[0] = { 18, 18, 3 };
results[1] = { 19, 21, 4 };
run_test<Kernel>("data/stress-test-3/test-6-rnd-polygons-2-3.off", { 1, 2 }, results);
results[0] = { 22, 21, 3 };
results[0] = { 21, 21, 3 };
results[1] = { 22, 24, 4 };
run_test<Kernel>("data/stress-test-3/test-7-rnd-polygons-2-4.off", { 1, 2 }, results);
results[0] = { 18, 17, 3 };
results[0] = { 17, 17, 3 };
results[1] = { 18, 20, 4 };
run_test<Kernel>("data/stress-test-3/test-8-rnd-polygons-2-10.off", { 1, 2 }, results);
results[0] = { 36, 37, 7 };
results[1] = { 39, 46, 10 };
results[0] = { 31, 37, 7 };
results[1] = { 34, 46, 10 };
results[2] = { 39, 57, 13 };
run_test<Kernel>("data/stress-test-3/test-9-rnd-polygons-4-4.off", { 1, 2, 3 }, results);
results[0] = { 55, 84, 19 };
@ -223,61 +222,61 @@ void run_all_tests() {
// Stress tests 4.
results[0] = { 20, 22, 4 };
results[0] = { 17, 17, 3 };
run_test<Kernel>("data/stress-test-4/test-1-rnd-polygons-2-6.off", { 1 }, results);
results[0] = { 29, 32, 6 };
results[0] = { 27, 32, 6 };
results[1] = { 29, 38, 8 };
run_test<Kernel>("data/stress-test-4/test-2-rnd-polygons-3-8.off", { 1, 2 }, results);
results[0] = { 37, 38, 7 };
results[1] = { 37, 45, 9 };
results[0] = { 32, 38, 7 };
results[1] = { 35, 45, 9 };
results[2] = { 37, 51, 11 };
run_test<Kernel>("data/stress-test-4/test-3-rnd-polygons-4-4.off", { 1, 2, 3 }, results);
results[0] = { 35, 27, 5 };
results[1] = { 37, 41, 8 };
results[0] = { 25, 27, 5 };
results[1] = { 33, 41, 8 };
results[2] = { 37, 53, 12 };
run_test<Kernel>("data/stress-test-4/test-4-rnd-polygons-4-6.off", { 1, 2, 3 }, results);
results[0] = { 83, 105, 24 };
results[1] = { 83, 128, 31 };
results[2] = { 83, 128, 31 };
run_test<Kernel>("data/stress-test-4/test-5-rnd-polygons-6-4.off", { 1, 2, 3}, results);
results[0] = { 61, 91, 20 };
results[1] = { 73, 121, 29 };
results[2] = { 83, 145, 36 };
run_test<Kernel>("data/stress-test-4/test-5-rnd-polygons-6-4.off", { 1, 2, 3 }, results);
results[0] = { 50, 62, 13 };
results[0] = { 45, 62, 13 };
results[1] = { 50, 75, 17 };
run_test<Kernel>("data/stress-test-4/test-6-rnd-polygons-5-6.off", { 1, 2 }, results);
results[0] = { 98, 105, 24 };
results[1] = { 104, 147, 36 };
results[2] = { 104, 157, 39 };
results[0] = { 64, 97, 22 };
results[1] = { 84, 141, 34 };
results[2] = { 88, 151, 37 };
run_test<Kernel>("data/stress-test-4/test-7-rnd-polygons-7-6.off", { 1, 2, 3 }, results);
results[0] = { 69, 77, 16 };
results[1] = { 69, 107, 25 };
results[0] = { 56, 77, 16 };
results[1] = { 68, 107, 25 };
results[2] = { 69, 110, 26 };
run_test<Kernel>("data/stress-test-4/test-8-rnd-polygons-7-8.off", { 1, 2, 3 }, results);
results[0] = { 243, 304, 74 };
results[1] = { 248, 360, 93 };
results[2] = { 248, 384, 101};
results[0] = { 172, 304, 74 };
results[1] = { 192, 366, 95 };
results[2] = { 198, 382, 100};
run_test<Kernel>("data/stress-test-4/test-9-rnd-polygons-12-4.off", { 1, 2, 3 }, results);
// Stress tests 5.
results[0] = { 386, 349, 83 };
results[1] = { 417, 459, 115 };
results[2] = { 444, 616, 165 };
results[0] = { 202, 351, 84 };
results[1] = { 232, 427, 107 };
results[2] = { 284, 558, 146 };
run_test<Kernel>("data/stress-test-5/test-1-rnd-polygons-15-6.off", { 1, 2, 3 }, results);
results[0] = { 837, 855, 228 };
results[1] = { 919, 1043, 285 };
results[2] = { 955, 1279, 360 };
results[0] = { 58, 89, 20 };
results[1] = { 63, 102, 24 };
results[2] = { 63, 106, 26 };
run_test<Kernel>("data/stress-test-5/test-2-rnd-polygons-20-4.off", { 1, 2, 3 }, results);
// Real data tests.
results[0] = { 128, 162, 38 };
results[1] = { 133, 220, 56 };
results[2] = { 133, 241, 62 };
results[0] = { 91, 143, 33 };
results[1] = { 109, 187, 46 };
results[2] = { 127, 233, 60 };
run_test<Kernel>("data/real-data-test/test-10-polygons.off", { 1, 2, 3 }, results);
results[0] = { 2225, 1360, 347 };
results[1] = { 2336, 1540, 403 };
results[2] = { 2527, 2018, 550 };
results[0] = { 1006, 2067, 552 };
results[1] = { 973, 1984, 527 };
results[2] = { 1186, 2560, 708 };
run_test<Kernel>("data/real-data-test/test-40-polygons.ply", { 1, 2, 3 }, results);
const auto kernel_name = boost::typeindex::type_id<Kernel>().pretty_name();