void Polyhedron_demo_nef_plugin::on_actionToNef_triggered() { const Scene_interface::Item_id index = scene->mainSelectionIndex(); Scene_polyhedron_item* item = qobject_cast<Scene_polyhedron_item*>(scene->item(index)); if(item) { QApplication::setOverrideCursor(Qt::WaitCursor); QTime time; time.start(); std::cerr << "Convert polyhedron to nef polyhedron..."; Scene_nef_polyhedron_item* new_nef_item = Scene_nef_polyhedron_item::from_polyhedron(item); new_nef_item->setName(tr("%1 (to nef)").arg(item->name())); new_nef_item->setRenderingMode(item->renderingMode()); item->setVisible(false); scene->itemChanged(index); scene->addItem(new_nef_item); std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; QApplication::restoreOverrideCursor(); } }
void Polyhedron_demo_nef_plugin::on_actionConvexDecomposition_triggered() { const Scene_interface::Item_id index = scene->mainSelectionIndex(); Scene_polyhedron_item* pitem = qobject_cast<Scene_polyhedron_item*>(scene->item(index)); Scene_nef_polyhedron_item* item = (pitem)? Scene_nef_polyhedron_item::from_polyhedron(pitem) : qobject_cast<Scene_nef_polyhedron_item*>(scene->item(index)); if(item) { QTime time; time.start(); std::cerr << "Convex decomposition..."; QApplication::setOverrideCursor(Qt::WaitCursor); std::list<Scene_polyhedron_item*> convex_parts; item->convex_decomposition(convex_parts); int i = 0; for(std::list<Scene_polyhedron_item*>::iterator it = convex_parts.begin(); it != convex_parts.end(); ++it){ (*it)->setName(tr("part %1 of %2").arg(i++).arg(item->name())); (*it)->setRenderingMode(item->renderingMode()); scene->addItem(*it); } if(pitem){ delete item; pitem->setVisible(false); } else { item->setVisible(false); } std::cerr << "ok (" << time.elapsed() << " ms)" << std::endl; QApplication::restoreOverrideCursor(); } else { std::cerr << "Only a Polyhedron or a Nef Polyhedron can be decomposed in convex parts" << std::endl; } }