X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Viewer.cpp;h=23560ca86031d369571e2dcf5d864eb5a43d675e;hb=d86c77d1c6210bbe04fbc3e5b00f9e212e1ec930;hp=c78bd72d1bfa7fa6d065fb90bfe2d148682c6880;hpb=f11baf398313d8250c878ef7923879c527d1c0e1;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Viewer.cpp b/src/XGUI/XGUI_Viewer.cpp index c78bd72d1..23560ca86 100644 --- a/src/XGUI/XGUI_Viewer.cpp +++ b/src/XGUI/XGUI_Viewer.cpp @@ -190,47 +190,37 @@ QMdiSubWindow* XGUI_Viewer::createView(V3d_TypeOfView theType) return aWnd; } -void XGUI_Viewer::setLocalSelection(const AIS_ListOfInteractive& theAISObjects, const int theMode, - const bool isUpdateViewer) +XGUI_ViewWindow* XGUI_Viewer::activeViewWindow() const { - Handle(AIS_InteractiveContext) ic = AISContext(); - - // Open local context if there is no one - bool allObjects = false; // calculate by AIS shape - if (!ic->HasOpenedContext()) { - ic->ClearCurrents(false); - ic->OpenLocalContext(allObjects, true, true); - } + return dynamic_cast(myActiveView->widget()); +} - // Activate selection of objects from prs - AIS_ListIteratorOfListOfInteractive aIter(theAISObjects); - for (; aIter.More(); aIter.Next()) { - Handle(AIS_InteractiveObject) anAIS = aIter.Value(); - if (!anAIS.IsNull()) { - if (anAIS->IsKind(STANDARD_TYPE(AIS_Shape))) { - ic->Load(anAIS, -1, false); - ic->Activate(anAIS, AIS_Shape::SelectionMode((TopAbs_ShapeEnum)theMode)); - } - else if (anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron)) { - ic->Load(anAIS, -1, false); - ic->Activate(anAIS, theMode); - } - } - } - if (isUpdateViewer) - ic->UpdateCurrentViewer(); +void XGUI_Viewer::getSelectedObjects(AIS_ListOfInteractive& theList) +{ + theList.Clear(); + for (myAISContext->InitSelected(); myAISContext->MoreSelected(); myAISContext->NextSelected()) + theList.Append(myAISContext->SelectedInteractive()); } -void XGUI_Viewer::setGlobalSelection(const bool isUpdateViewer) +void XGUI_Viewer::getSelectedShapes(NCollection_List& theList) { Handle(AIS_InteractiveContext) ic = AISContext(); - if (!ic.IsNull()) { - ic->CloseAllContexts(false); - if (isUpdateViewer) - ic->UpdateCurrentViewer(); + + for (ic->InitSelected(); ic->MoreSelected(); ic->NextSelected()) { + TopoDS_Shape aShape = ic->SelectedShape(); + if (!aShape.IsNull()) + theList.Append(aShape); } } +void XGUI_Viewer::setObjectsSelected(const AIS_ListOfInteractive& theList) +{ + AIS_ListIteratorOfListOfInteractive aIt; + for (aIt.Initialize(theList); aIt.More(); aIt.Next()) + myAISContext->AddOrRemoveSelected(aIt.Value(), false); + myAISContext->UpdateCurrentViewer(); +} + /*! Sets hot button *\param theOper - hot operation *\param theState - adding state to state map operations. @@ -257,6 +247,17 @@ void XGUI_Viewer::getHotButton(XGUI::InteractionStyle theInteractionStyle, theButton = myButtonMap[theInteractionStyle][theOper]; } +void XGUI_Viewer::setViewProjection(double theX, double theY, double theZ) +{ + XGUI_ViewWindow* aWindow = dynamic_cast(myActiveView->widget()); + if (aWindow) { + Handle(V3d_View) aView3d = aWindow->viewPort()->getView(); + if ( !aView3d.IsNull() ) + aView3d->SetProj(theX, theY, theZ); + aWindow->viewPort()->fitAll(); + } +} + /*! Changes visibility of trihedron to opposite */ @@ -505,8 +506,10 @@ void XGUI_Viewer::onMouseMove(XGUI_ViewWindow* theWindow, QMouseEvent* theEvent) XGUI_ViewPort* aViewPort = theWindow->viewPort(); Handle(V3d_View) aView3d = aViewPort->getView(); - if ( !aView3d.IsNull() ) + if ( !aView3d.IsNull() ) { myAISContext->MoveTo(theEvent->x(), theEvent->y(), aView3d); + mouseMoved(theEvent->pos()); + } } /*! @@ -516,5 +519,5 @@ void XGUI_Viewer::onMouseReleased(XGUI_ViewWindow* theWindow, QMouseEvent* theEv { myAISContext->Select(); - emit selectionChanged(); + emit mouseReleased(theEvent->pos()); }