Refactoring of the enum Half to Cones_selected and fix bugs in cone spanners ipelet

This commit is contained in:
Frédérik Paradis 2016-12-02 13:56:14 -05:00
parent 7369b842a4
commit c0e49e7a29
4 changed files with 44 additions and 34 deletions

View File

@ -4,6 +4,7 @@
#include <CGAL/Construct_theta_graph_2.h>
#include <CGAL/Construct_yao_graph_2.h>
#include <CGAL/Compute_cone_boundaries_2.h>
#include <CGAL/Cone_spanners_enum_2.h>
#include <CGAL/property_map.h>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
@ -40,10 +41,10 @@ const std::string hmsg[] = {
};
class Cone_spanners_ipelet
: public CGAL::Ipelet_base<Kernel,6> {
: public CGAL::Ipelet_base<Kernel,7> {
public:
Cone_spanners_ipelet()
:CGAL::Ipelet_base<Kernel,6>("Cone Spanners",labels,hmsg){}
:CGAL::Ipelet_base<Kernel,7>("Cone Spanners",labels,hmsg){}
void protected_run(int);
private:
};
@ -94,11 +95,11 @@ void Cone_spanners_ipelet::protected_run(int fn)
}
if(fn >= 0 && fn <= 5) {
CGAL::Half half = CGAL::ALL_CONES;
CGAL::Cones_selected cones_selected = CGAL::ALL_CONES;
if(fn == 2 || fn == 3)
half = CGAL::EVEN_CONES;
cones_selected = CGAL::EVEN_CONES;
else if(fn == 4 || fn == 5)
half = CGAL::ODD_CONES;
cones_selected = CGAL::ODD_CONES;
Graph g;
switch (fn){
@ -106,7 +107,7 @@ void Cone_spanners_ipelet::protected_run(int fn)
case 2:
case 4:
{
CGAL::Construct_theta_graph_2<Kernel, Graph> theta(number_of_cones, Direction_2(1,0), half);
CGAL::Construct_theta_graph_2<Kernel, Graph> theta(number_of_cones, Direction_2(1,0), cones_selected);
theta(lst.begin(), lst.end(), g);
break;
}
@ -114,7 +115,7 @@ void Cone_spanners_ipelet::protected_run(int fn)
case 3:
case 5:
{
CGAL::Construct_yao_graph_2<Kernel, Graph> yao(number_of_cones, Direction_2(1,0), half);
CGAL::Construct_yao_graph_2<Kernel, Graph> yao(number_of_cones, Direction_2(1,0), cones_selected);
yao(lst.begin(), lst.end(), g);
break;
}
@ -128,7 +129,7 @@ void Cone_spanners_ipelet::protected_run(int fn)
}
group_selected_objects_();
}
else if(fn == 4) {
else if(fn == 6) {
CGAL::Compute_cone_boundaries_2<Kernel> cones;
std::vector<Direction_2> directions(number_of_cones);
cones(number_of_cones, Direction_2(1,0), directions.begin());

View File

@ -16,22 +16,31 @@
// $Id$
//
//
// Authors: Weisheng Si, Quincy Tse
// Authors: Frédérk Paradis
/*! \file Cone_spanners_2_enum.h
/*! \file Cone_spanners_enum_2.h
*
* This header defines enumerators for the cone spanners functors.
*/
#ifndef CONE_SPANNERS_2_ENUM_H
#define CONE_SPANNERS_2_ENUM_H
#ifndef CONE_SPANNERS_ENUM_2_H
#define CONE_SPANNERS_ENUM_2_H
namespace CGAL {
/*! \ingroup PkgConeBasedSpanners
\brief An enum of the types of cone spanners.
\brief An enum of the choice of cones in cone spanners.
*/
enum Half { EVEN_CONES = 0, ODD_CONES = 1, ALL_CONES = 2 };
enum Cones_selected {
/*! \brief Select even cones.
*/
EVEN_CONES = 0,
/*! \brief Select odd cones.
*/
ODD_CONES = 1,
/*! \brief Select all cones.
*/
ALL_CONES = 2 };
} // namespace CGAL

View File

@ -16,7 +16,7 @@
// $Id$
//
//
// Authors: Weisheng Si, Quincy Tse
// Authors: Weisheng Si, Quincy Tse, Frédérk Paradis
/*! \file Construct_theta_graph_2.h
*
@ -33,7 +33,7 @@
#include <CGAL/Compute_cone_boundaries_2.h>
#include <CGAL/Cone_spanners_2/Less_by_direction_2.h>
#include <CGAL/Cone_spanners_2/Plane_scan_tree.h>
#include <CGAL/Cone_spanners_2_enum.h>
#include <CGAL/Cone_spanners_enum_2.h>
#include <boost/config.hpp>
#include <boost/graph/adjacency_list.hpp>
@ -79,8 +79,8 @@ private:
/* Store the number of cones. */
unsigned int cone_number;
/* Store whether this is an half-theta graph */
Half half;
/* Store whether even, odd or all cones are selected to construct graph. */
Cones_selected cones_choice;
/* Store the directions of the rays dividing the plane. The initial direction will be
* stored in rays[0].
@ -94,13 +94,13 @@ public:
\param initial_direction A direction denoting one of the rays dividing the
cones. This allows arbitary rotations of the rays that divide
the plane. (default: positive x-axis)
\param half_theta Indicates whether all the cones are used or just half of
them (default: all cones).
\param cones_selected Indicates whether even, odd or all cones are
selected to construct graph.
*/
Construct_theta_graph_2 (unsigned int k,
Direction_2 initial_direction = Direction_2(1,0),
Half half_theta = ALL_CONES
): cone_number(k), rays(std::vector<Direction_2>(k)), half(half_theta)
Cones_selected cones_selected = ALL_CONES
): cone_number(k), rays(std::vector<Direction_2>(k)), cones_choice(cones_selected)
{
if (k<2) {
@ -138,8 +138,8 @@ public:
unsigned int j; // index of the ccw ray
// add edges into the graph for every cone
int new_start = half != ALL_CONES ? half : 0;
int increment = half != ALL_CONES ? 2 : 1;
int new_start = cones_choice != ALL_CONES ? cones_choice : 0;
int increment = cones_choice != ALL_CONES ? 2 : 1;
for (i = new_start; i < cone_number; i += increment) {
j = (i+1) % cone_number;
add_edges_in_cone(rays[i], rays[j], g);

View File

@ -16,7 +16,7 @@
// $Id$
//
//
// Authors: Weisheng Si, Quincy Tse
// Authors: Weisheng Si, Quincy Tse, Frédérk Paradis
/*! \file Construct_yao_graph_2.h
*
@ -31,7 +31,7 @@
#include <utility>
#include <CGAL/Compute_cone_boundaries_2.h>
#include <CGAL/Cone_spanners_2/Less_by_direction_2.h>
#include <CGAL/Cone_spanners_2_enum.h>
#include <CGAL/Cone_spanners_enum_2.h>
#include <boost/config.hpp>
#include <boost/graph/adjacency_list.hpp>
@ -74,8 +74,8 @@ private:
/* Store the number of cones. */
unsigned int cone_number;
/* Store whether this is an half-yao graph */
Half half;
/* Store whether even, odd or all cones are selected to construct graph. */
Cones_selected cones_choice;
/* Store the directions of the rays dividing the plane. The initial direction will be
stored in rays[0]. */
@ -89,13 +89,13 @@ public:
\param initial_direction A direction denoting one of the rays dividing the
cones. This allows arbitary rotations of the rays that divide
the plane. (default: positive x-axis)
\param half_yao Indicates whether all the cones are used or just half of
them (default: all cones).
\param cones_selected Indicates whether even, odd or all cones are
selected to construct graph.
*/
Construct_yao_graph_2 (unsigned int k,
Direction_2 initial_direction = Direction_2(1,0),
Half half_yao = ALL_CONES
): cone_number(k), rays(std::vector<Direction_2>(k)), half(half_yao)
Cones_selected cones_selected = ALL_CONES
): cone_number(k), rays(std::vector<Direction_2>(k)), cones_choice(cones_selected)
{
if (k<2) {
@ -134,8 +134,8 @@ public:
unsigned int j; // index of the ccw ray
// add edges into the graph for every cone
int new_start = half != ALL_CONES ? half : 0;
int increment = half != ALL_CONES ? 2 : 1;
int new_start = cones_choice != ALL_CONES ? cones_choice : 0;
int increment = cones_choice != ALL_CONES ? 2 : 1;
for (i = new_start; i < cone_number; i += increment) {
j = (i+1) % cone_number;
add_edges_in_cone(rays[i], rays[j], g);