Add two actions to join and split polylines_items

This commit is contained in:
Maxime Gimeno 2016-10-12 09:28:01 +02:00
parent 09dcb9d13b
commit 40e3eadf4f
1 changed files with 86 additions and 2 deletions

View File

@ -65,6 +65,18 @@ public:
menuFile->insertAction(actionAfterLoad,actionAdd_polylines);
}
}
actionJoin_polylines= new QAction(tr("Join Selected Polylines"), mainWindow);
actionJoin_polylines->setProperty("subMenuName", "Operations on Polylines");
actionJoin_polylines->setObjectName("actionJoinPolylines");
actionSplit_polylines= new QAction(tr("Split Selected Polylines"), mainWindow);
actionSplit_polylines->setProperty("subMenuName", "Operations on Polylines");
actionSplit_polylines->setObjectName("actionSplitPolylines");
connect(actionSplit_polylines, &QAction::triggered, this, &Polyhedron_demo_polylines_io_plugin::split);
connect(actionJoin_polylines, &QAction::triggered, this, &Polyhedron_demo_polylines_io_plugin::join);
}
QString name() const { return "polylines_io_plugin"; }
QString nameFilters() const { return "Polylines files (*.polylines.txt *.cgal)"; }
@ -73,9 +85,29 @@ public:
bool canSave(const CGAL::Three::Scene_item*);
bool save(const CGAL::Three::Scene_item*, QFileInfo fileinfo);
bool applicable(QAction*) const { return true;}
bool applicable(QAction* a) const {
bool all_polylines_selected = true;
Q_FOREACH(int index, scene->selectionIndices())
{
if (!qobject_cast<Scene_polylines_item*>(scene->item(index)))
{
all_polylines_selected = false;
}
}
if(a==actionSplit_polylines)
return (all_polylines_selected &&
scene->selectionIndices().size() == 1);
else if(a==actionJoin_polylines)
return (all_polylines_selected &&
scene->selectionIndices().size() > 1);
else
return false;
}
QList<QAction*> actions() const {
return QList<QAction*>();
return QList<QAction*>()<<actionSplit_polylines
<<actionJoin_polylines;
}
protected Q_SLOTS:
//!Opens a dialog to add polylines on the fly.
@ -84,9 +116,15 @@ public:
void addPolylineButton_clicked();
//!Closes the dialog
void closePolylinesButton_clicked();
//!Splits the selected Scene_polylines_item in multiple items all containing a single polyline.
void split();
//!Joins the selected Scene_polylines_items in a single item containing all their polylines.
void join();
private:
QAction* actionAdd_polylines;
QAction* actionSplit_polylines;
QAction* actionJoin_polylines;
Ui::Add_polylines_dialog *add_polydiagui;
QDialog *add_polydiag;
};
@ -273,4 +311,50 @@ void Polyhedron_demo_polylines_io_plugin::closePolylinesButton_clicked()
add_polydiag->close();
}
void Polyhedron_demo_polylines_io_plugin::split()
{
Scene_polylines_item* item = qobject_cast<Scene_polylines_item*>(scene->item(scene->mainSelectionIndex()));
Scene_group_item* group = new Scene_group_item("Splitted Polylines");
scene->addItem(group);
group->setColor(item->color());
int i=0;
Q_FOREACH(Scene_polylines_item::Polyline polyline, item->polylines)
{
Scene_polylines_item::Polylines_container container;
container.push_back(polyline);
Scene_polylines_item *new_polyline = new Scene_polylines_item();
new_polyline->polylines = container;
new_polyline->setColor(item->color());
new_polyline->setName(QString("Splitted %1 #%2").arg(item->name()).arg(i++));
scene->addItem(new_polyline);
scene->changeGroup(new_polyline, group);
}
}
void Polyhedron_demo_polylines_io_plugin::join()
{
std::vector<Scene_polylines_item*> items;
items.resize(scene->selectionIndices().size());
for(std::size_t i = 0; i < scene->selectionIndices().size(); ++i)
items[i] = qobject_cast<Scene_polylines_item*>(scene->item(scene->selectionIndices().at(i)));
Scene_polylines_item* new_polyline= new Scene_polylines_item();
Scene_polylines_item::Polylines_container container;
Q_FOREACH(Scene_polylines_item* item, items)
{
for(Scene_polylines_item::Polylines_container::iterator
it = item->polylines.begin();
it!= item->polylines.end();
++it)
{
container.push_back(*it);
}
}
new_polyline->polylines = container;
new_polyline->setColor(QColor(Qt::black));
new_polyline->setName(QString("Joined from %1 items").arg(items.size()));
scene->addItem(new_polyline);
}
#include "Polylines_io_plugin.moc"