void MeshFaceAddition::finishEditing() { Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(parent()); Gui::View3DInventorViewer* viewer = view->getViewer(); viewer->setEditing(false); viewer->setRedirectToSceneGraph(false); viewer->removeViewProvider(faceView); //faceView->mesh->finishEditing(); viewer->removeEventCallback(SoEvent::getClassTypeId(), MeshFaceAddition::addFacetCallback, this); this->deleteLater(); }
void CmdInspectElement::activated(int iMsg) { Gui::Document* doc = Gui::Application::Instance->activeDocument(); Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(doc->getActiveView()); if (view) { Gui::View3DInventorViewer* viewer = view->getViewer(); viewer->setEditing(true); viewer->setRedirectToSceneGraph(true); viewer->setEditingCursor(QCursor(Gui::BitmapFactory().pixmap("mesh_pipette"),4,29)); viewer->addEventCallback(SoButtonEvent::getClassTypeId(), InspectionGui::ViewProviderInspection::inspectCallback); } }
void MeshFaceAddition::startEditing(MeshGui::ViewProviderMesh* vp) { Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(parent()); Gui::View3DInventorViewer* viewer = view->getViewer(); viewer->setEditing(true); viewer->setRedirectToSceneGraph(true); faceView->mesh = vp; faceView->attach(vp->getObject()); viewer->addViewProvider(faceView); //faceView->mesh->startEditing(); viewer->addEventCallback(SoEvent::getClassTypeId(), MeshFaceAddition::addFacetCallback, this); }
void ViewProviderInspection::inspectCallback(void * ud, SoEventCallback * n) { Gui::View3DInventorViewer* view = reinterpret_cast<Gui::View3DInventorViewer*>(n->getUserData()); const SoEvent* ev = n->getEvent(); if (ev->getTypeId() == SoMouseButtonEvent::getClassTypeId()) { const SoMouseButtonEvent * mbe = static_cast<const SoMouseButtonEvent *>(ev); // Mark all incoming mouse button events as handled, especially, to deactivate the selection node n->getAction()->setHandled(); n->setHandled(); if (mbe->getButton() == SoMouseButtonEvent::BUTTON2 && mbe->getState() == SoButtonEvent::UP) { n->setHandled(); // context-menu QMenu menu; QAction* fl = menu.addAction(QObject::tr("Annotation")); fl->setCheckable(true); fl->setChecked(addflag); QAction* cl = menu.addAction(QObject::tr("Leave info mode")); QAction* id = menu.exec(QCursor::pos()); if (fl == id) { addflag = fl->isChecked(); } else if (cl == id) { // post an event to a proxy object to make sure to avoid problems // when opening a modal dialog QApplication::postEvent( new ViewProviderProxyObject(view->getGLWidget()), new QEvent(QEvent::User)); view->setEditing(false); view->getWidget()->setCursor(QCursor(Qt::ArrowCursor)); view->setRedirectToSceneGraph(false); view->setRedirectToSceneGraphEnabled(false); view->removeEventCallback(SoButtonEvent::getClassTypeId(), inspectCallback); } } else if (mbe->getButton() == SoMouseButtonEvent::BUTTON1 && mbe->getState() == SoButtonEvent::UP) { const SoPickedPoint * point = n->getPickedPoint(); if (point == NULL) { Base::Console().Message("No point picked.\n"); return; } n->setHandled(); // check if we have picked one a node of the view provider we are insterested in Gui::ViewProvider* vp = static_cast<Gui::ViewProvider*>(view->getViewProviderByPath(point->getPath())); if (vp && vp->getTypeId().isDerivedFrom(ViewProviderInspection::getClassTypeId())) { ViewProviderInspection* that = static_cast<ViewProviderInspection*>(vp); QString info = that->inspectDistance(point); Gui::getMainWindow()->setPaneText(1,info); if (addflag) ViewProviderProxyObject::addFlag(view, info, point); else Gui::ToolTip::showText(QCursor::pos(), info); } else { // the nearest picked point was not part of the view provider SoRayPickAction action(view->getViewportRegion()); action.setPickAll(TRUE); action.setPoint(mbe->getPosition()); action.apply(view->getSceneManager()->getSceneGraph()); const SoPickedPointList& pps = action.getPickedPointList(); for (int i=0; i<pps.getLength(); ++i) { const SoPickedPoint * point = pps[i]; vp = static_cast<Gui::ViewProvider*>(view->getViewProviderByPath(point->getPath())); if (vp && vp->getTypeId().isDerivedFrom(ViewProviderInspection::getClassTypeId())) { ViewProviderInspection* that = static_cast<ViewProviderInspection*>(vp); QString info = that->inspectDistance(point); Gui::getMainWindow()->setPaneText(1,info); if (addflag) ViewProviderProxyObject::addFlag(view, info, point); else Gui::ToolTip::showText(QCursor::pos(), info); break; } } } } } // toggle between inspection and navigation mode else if (ev->getTypeId().isDerivedFrom(SoKeyboardEvent::getClassTypeId())) { const SoKeyboardEvent * const ke = static_cast<const SoKeyboardEvent *>(ev); if (ke->getState() == SoButtonEvent::DOWN && ke->getKey() == SoKeyboardEvent::ESCAPE) { SbBool toggle = view->isRedirectedToSceneGraph(); view->setRedirectToSceneGraph(!toggle); n->setHandled(); } } }