X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Selection.cpp;h=1b91cb3dccad3b2dc905d617c40f91ebf8b16474;hb=ed165fd07e71c11885fdc5f475a8522a5914e00d;hp=05b4e0ea6d95cf5b8886669138589ef70a0b2339;hpb=3985b767e74385e51d1b503d2c97d3bb1e3f6faa;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Selection.cpp b/src/XGUI/XGUI_Selection.cpp index 05b4e0ea6..1b91cb3dc 100644 --- a/src/XGUI/XGUI_Selection.cpp +++ b/src/XGUI/XGUI_Selection.cpp @@ -14,54 +14,65 @@ #include - XGUI_Selection::XGUI_Selection(XGUI_Workshop* theWorkshop) -: myWorkshop(theWorkshop) + : myWorkshop(theWorkshop) { } std::list XGUI_Selection::getSelected(int theShapeTypeToSkip) const { - std::set aPrsFeatures; + std::set aPrsFeatures; std::list aPresentations; + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { - Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive(); - TopoDS_Shape aShape = aContext->SelectedShape(); + ModuleBase_ViewerPrs aPrs; - if (theShapeTypeToSkip >= 0 && !aShape.IsNull() && aShape.ShapeType() == theShapeTypeToSkip) - continue; - - ResultPtr aFeature = myWorkshop->displayer()->getResult(anIO); - if (aPrsFeatures.find(aFeature) != aPrsFeatures.end()) - continue; + Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive(); + aPrs.setInteractive(anIO); + + ObjectPtr aFeature = aDisplayer->getObject(anIO); + if (aPrsFeatures.find(aFeature) == aPrsFeatures.end()) { + aPrs.setFeature(aFeature); + aPrsFeatures.insert(aFeature); + } + if (aContext->HasOpenedContext()) { + TopoDS_Shape aShape = aContext->SelectedShape(); + if (!aShape.IsNull() && (aShape.ShapeType() != theShapeTypeToSkip)) + aPrs.setShape(aShape); + } Handle(SelectMgr_EntityOwner) anOwner = aContext->SelectedOwner(); - aPresentations.push_back(ModuleBase_ViewerPrs(aFeature, aShape, anOwner)); - aPrsFeatures.insert(aFeature); + aPrs.setOwner(anOwner); + aPresentations.push_back(aPrs); } return aPresentations; } std::list XGUI_Selection::getHighlighted(int theShapeTypeToSkip) const { - std::set aPrsFeatures; + std::set aPrsFeatures; std::list aPresentations; + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); for (aContext->InitDetected(); aContext->MoreDetected(); aContext->NextDetected()) { + ModuleBase_ViewerPrs aPrs; Handle(AIS_InteractiveObject) anIO = aContext->DetectedInteractive(); - TopoDS_Shape aShape = aContext->DetectedShape(); - if (theShapeTypeToSkip >= 0 && !aShape.IsNull() && aShape.ShapeType() == theShapeTypeToSkip) - continue; - - ResultPtr aResult = myWorkshop->displayer()->getResult(anIO); - if (aPrsFeatures.find(aResult) != aPrsFeatures.end()) - continue; - aPresentations.push_back(ModuleBase_ViewerPrs(aResult, aShape, NULL)); - aPrsFeatures.insert(aResult); + aPrs.setInteractive(anIO); + + ObjectPtr aResult = aDisplayer->getObject(anIO); + if (aPrsFeatures.find(aResult) == aPrsFeatures.end()) { + aPrs.setFeature(aResult); + aPrsFeatures.insert(aResult); + } + if (aContext->HasOpenedContext()) { + TopoDS_Shape aShape = aContext->DetectedShape(); + if (!aShape.IsNull() && aShape.ShapeType() != theShapeTypeToSkip) + aPrs.setShape(aShape); + } + aPresentations.push_back(aPrs); } - return aPresentations; } @@ -69,25 +80,24 @@ QList XGUI_Selection::selectedObjects() const { return myWorkshop->objectBrowser()->selectedObjects(); } - -QResultList XGUI_Selection::selectedResults() const + +QList XGUI_Selection::selectedPresentations() const { - QResultList aSelectedList; + QList aSelectedList; Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive(); - ResultPtr aResult = myWorkshop->displayer()->getResult(anIO); + ObjectPtr aResult = myWorkshop->displayer()->getObject(anIO); if (aResult) aSelectedList.append(aResult); } return aSelectedList; } - //************************************************************** -QModelIndexList XGUI_Selection::selectedIndexes() const -{ +QModelIndexList XGUI_Selection::selectedIndexes() const +{ return myWorkshop->objectBrowser()->selectedIndexes(); } @@ -101,13 +111,20 @@ void XGUI_Selection::selectedAISObjects(AIS_ListOfInteractive& theList) const } //************************************************************** -void XGUI_Selection::selectedShapes(NCollection_List& theList) const +void XGUI_Selection::selectedShapes(NCollection_List& theList, + std::list& theOwners) const { theList.Clear(); Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { TopoDS_Shape aShape = aContext->SelectedShape(); - if (!aShape.IsNull()) + if (!aShape.IsNull()) { theList.Append(aShape); + Handle(SelectMgr_EntityOwner) aEO = aContext->SelectedOwner(); + Handle(AIS_InteractiveObject) anObj = + Handle(AIS_InteractiveObject)::DownCast(aEO->Selectable()); + ObjectPtr anObject = myWorkshop->displayer()->getObject(anObj); + theOwners.push_back(anObject); + } } }