mirror of https://github.com/CGAL/cgal
Temporary workaround the selection item emitting way too many signals
This commit is contained in:
parent
829e8095ed
commit
7ec586ca73
|
|
@ -605,18 +605,25 @@ private:
|
||||||
sm_item->setRenderingMode(GouraudPlusEdges);
|
sm_item->setRenderingMode(GouraudPlusEdges);
|
||||||
sm_item->redraw();
|
sm_item->redraw();
|
||||||
|
|
||||||
scene->addItem(heat_item);
|
auto heat_item_id = scene->addItem(heat_item);
|
||||||
scene->setSelectedItem(scene->item_id(sm_item));
|
scene->setSelectedItem(heat_item_id);
|
||||||
|
|
||||||
// any change of sm_item destroys everything
|
// any change of sm_item destroys everything
|
||||||
connect(sm_item, &Scene_surface_mesh_item::itemChanged,
|
|
||||||
this, [this, sm_item, heat_item]()
|
// @todo do not emit itemChanged when the colors are reset
|
||||||
{
|
// @todo with qt6, single connection can be performed with `static_cast<Qt::ConnectionType>(Qt::SingleShotConnection)`
|
||||||
sm_item->resetColors();
|
// see https://www.kdab.com/single-shot-connections/
|
||||||
removePluginProperties(sm_item);
|
auto connection = std::make_shared<QMetaObject::Connection>();
|
||||||
scene->erase(scene->item_id(heat_item));
|
*connection = connect(sm_item, &Scene_surface_mesh_item::itemChanged,
|
||||||
onItemIndicesSelected(scene->selectionIndices());
|
this, [this, sm_item, heat_item, connection]()
|
||||||
});
|
{
|
||||||
|
QObject::disconnect(*connection);
|
||||||
|
|
||||||
|
sm_item->resetColors();
|
||||||
|
removePluginProperties(sm_item);
|
||||||
|
scene->erase(scene->item_id(heat_item));
|
||||||
|
onItemIndicesSelected(scene->selectionIndices());
|
||||||
|
});
|
||||||
|
|
||||||
connect(sm_item, &Scene_surface_mesh_item::aboutToBeDestroyed,
|
connect(sm_item, &Scene_surface_mesh_item::aboutToBeDestroyed,
|
||||||
this, [this, heat_item]()
|
this, [this, heat_item]()
|
||||||
|
|
@ -765,7 +772,8 @@ private Q_SLOTS:
|
||||||
|
|
||||||
Scene_polyhedron_selection_item* source_vertices = new Scene_polyhedron_selection_item(sm_item, mw);
|
Scene_polyhedron_selection_item* source_vertices = new Scene_polyhedron_selection_item(sm_item, mw);
|
||||||
source_vertices->setName(tr("%1 (source vertices)").arg(sm_item->name()));
|
source_vertices->setName(tr("%1 (source vertices)").arg(sm_item->name()));
|
||||||
scene->addItem(source_vertices);
|
auto source_vertices_id = scene->addItem(source_vertices);
|
||||||
|
scene->setSelectedItem(source_vertices_id);
|
||||||
|
|
||||||
link_mesh_and_selection(sm_item, source_vertices);
|
link_mesh_and_selection(sm_item, source_vertices);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue