From c67608d37fc4fb8307f18e16ad6183be1e862b50 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Wed, 1 Oct 2008 19:37:31 +0000 Subject: [PATCH] Added two more partition methods to the demo --- GraphicsView/demo/Polygon/Polygon_2.cpp | 46 ++++++++++++++++++++++--- GraphicsView/demo/Polygon/Polygon_2.ui | 18 ++++++++-- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/GraphicsView/demo/Polygon/Polygon_2.cpp b/GraphicsView/demo/Polygon/Polygon_2.cpp index fd8b7fb7b71..6c05f3ebf5f 100644 --- a/GraphicsView/demo/Polygon/Polygon_2.cpp +++ b/GraphicsView/demo/Polygon/Polygon_2.cpp @@ -42,6 +42,10 @@ class MainWindow : Q_OBJECT private: + + enum PartitionAlgorithm {YMonotone, ApproximateConvex, OptimalConvex} ; + + CGAL::Qt::Converter convert; Polygon poly; QGraphicsScene scene; @@ -70,7 +74,10 @@ public slots: void on_actionInnerSkeleton_triggered(); void on_actionCreateInputPolygon_toggled(bool); - void on_actionPartition_triggered(); + void on_actionYMonotonePartition_triggered(); + void on_actionApproximateConvexPartition_triggered(); + void on_actionOptimalConvexPartition_triggered(); + void partition(PartitionAlgorithm); void clearPartition(); void clearSkeleton(); @@ -295,8 +302,30 @@ MainWindow::on_actionInnerSkeleton_triggered() } } + void -MainWindow::on_actionPartition_triggered() +MainWindow::on_actionYMonotonePartition_triggered() +{ + partition(YMonotone); +} + + +void +MainWindow::on_actionOptimalConvexPartition_triggered() +{ + partition(OptimalConvex); +} + + +void +MainWindow::on_actionApproximateConvexPartition_triggered() +{ + partition(ApproximateConvex); +} + + +void +MainWindow::partition(PartitionAlgorithm pa) { if(poly.size()>0){ clearSkeleton(); @@ -304,8 +333,17 @@ MainWindow::on_actionPartition_triggered() if(! poly.is_counterclockwise_oriented()){ poly.reverse_orientation(); } - CGAL::approx_convex_partition_2(poly.vertices_begin(), poly.vertices_end(), std::back_inserter(partitionPolygons)); - + switch (pa) { + case YMonotone : + CGAL::y_monotone_partition_2(poly.vertices_begin(), poly.vertices_end(), std::back_inserter(partitionPolygons)); + break; + case ApproximateConvex: + CGAL::approx_convex_partition_2(poly.vertices_begin(), poly.vertices_end(), std::back_inserter(partitionPolygons)); + break; + default: + CGAL::optimal_convex_partition_2(poly.vertices_begin(), poly.vertices_end(), std::back_inserter(partitionPolygons)); + break; + } for(std::list::iterator it = partitionPolygons.begin(); it != partitionPolygons.end(); ++it){ diff --git a/GraphicsView/demo/Polygon/Polygon_2.ui b/GraphicsView/demo/Polygon/Polygon_2.ui index 057ed469cc6..4f4f6e1438a 100644 --- a/GraphicsView/demo/Polygon/Polygon_2.ui +++ b/GraphicsView/demo/Polygon/Polygon_2.ui @@ -115,7 +115,9 @@ - + + + @@ -188,9 +190,9 @@ Ctrl+R - + - Partition + Y-monotone Partition @@ -206,6 +208,16 @@ Inner Skeleton + + + Optimal Convex Partition + + + + + Approximate Convex Partition + +