void ViewProviderPoints::clipPointsCallback(void * ud, SoEventCallback * n) { // When this callback function is invoked we must in either case leave the edit mode Gui::View3DInventorViewer* view = reinterpret_cast<Gui::View3DInventorViewer*>(n->getUserData()); view->setEditing(false); view->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), clipPointsCallback); n->setHandled(); std::vector<SbVec2f> clPoly = view->getGLPolygon(); if (clPoly.size() < 3) return; if (clPoly.front() != clPoly.back()) clPoly.push_back(clPoly.front()); std::vector<Gui::ViewProvider*> views = view->getViewProvidersOfType(ViewProviderPoints::getClassTypeId()); for (std::vector<Gui::ViewProvider*>::iterator it = views.begin(); it != views.end(); ++it) { ViewProviderPoints* that = static_cast<ViewProviderPoints*>(*it); if (that->getEditingMode() > -1) { that->finishEditing(); that->cut(clPoly, *view); } } view->redraw(); }