mirror of https://github.com/CGAL/cgal
add Pierre's polyline smoother in item context menu
This commit is contained in:
parent
faa00e3d9e
commit
a18b9ee368
|
|
@ -327,6 +327,11 @@ QMenu* Scene_polylines_item::contextMenu()
|
|||
QAction* action = menu->addAction(tr("Display corners with radius..."));
|
||||
connect(action, SIGNAL(triggered()),
|
||||
this, SLOT(change_corner_radii()));
|
||||
|
||||
QAction* actionSmoothPolylines =
|
||||
menu->addAction(tr("Smooth polylines"));
|
||||
actionSmoothPolylines->setObjectName("actionSmoothPolylines");
|
||||
connect(actionSmoothPolylines, SIGNAL(triggered()),this, SLOT(smooth()));
|
||||
menu->setProperty(prop_name, true);
|
||||
}
|
||||
return menu;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
#include "Scene_item.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QMenu>
|
||||
|
||||
#include <list>
|
||||
#include <vector>
|
||||
|
|
@ -47,7 +48,28 @@ public:
|
|||
void draw_edges() const;
|
||||
|
||||
void draw_points() const;
|
||||
|
||||
|
||||
void smooth(std::vector<Point_3>& polyline){
|
||||
bool is_closed = polyline.front()==polyline.back();
|
||||
typedef K::Vector_3 Vector_3;
|
||||
|
||||
std::size_t start = is_closed ? 0:1;
|
||||
std::size_t end = polyline.size()-1;
|
||||
|
||||
Vector_3 prev = (is_closed ? polyline[end-1] : polyline[0]) - CGAL::ORIGIN;
|
||||
|
||||
for (std::size_t i=start; i!=end; ++i)
|
||||
{
|
||||
Vector_3 curr = polyline[i] - CGAL::ORIGIN;
|
||||
Vector_3 next = polyline[i+1] - CGAL::ORIGIN;
|
||||
|
||||
polyline[i] = CGAL::ORIGIN+(prev+2*curr+next)/4;
|
||||
prev=curr;
|
||||
}
|
||||
|
||||
if (is_closed) polyline[end]=polyline[0];
|
||||
}
|
||||
|
||||
public slots:
|
||||
void change_corner_radii(double);
|
||||
void change_corner_radii();
|
||||
|
|
@ -55,6 +77,11 @@ public slots:
|
|||
|
||||
void merge(Scene_polylines_item*);
|
||||
|
||||
void smooth(){
|
||||
for (Polylines_container::iterator pit=polylines.begin(),pit_end=polylines.end();pit!=pit_end;++pit)
|
||||
smooth(*pit);
|
||||
emit itemChanged();
|
||||
}
|
||||
public:
|
||||
Polylines_container polylines;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue