X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_SelectionMgr.cpp;h=f32ed5012b18c7180f8eab47693b092b19e3cd19;hb=176403004ff97696f3c0b5f8bdf48692177fb34a;hp=84d03259006a4f449ebae4ce90457ab97101ddd2;hpb=3d67438a08a827073a84056caa0db80f5258b2d3;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_SelectionMgr.cpp b/src/XGUI/XGUI_SelectionMgr.cpp old mode 100644 new mode 100755 index 84d032590..f32ed5012 --- a/src/XGUI/XGUI_SelectionMgr.cpp +++ b/src/XGUI/XGUI_SelectionMgr.cpp @@ -9,7 +9,9 @@ #include "XGUI_Displayer.h" #include "XGUI_Selection.h" +#ifndef HAVE_SALOME #include +#endif #include #include @@ -17,6 +19,10 @@ #include #include #include +#include + +#include +#include #include @@ -50,19 +56,26 @@ void XGUI_SelectionMgr::setSelectedOwners(const SelectMgr_IndexedMapOfOwner& the selection()->selectedOwners(aSelectedOwners); Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); - for (Standard_Integer i = 1, n = theSelectedOwners.Extent(); i <= n; i++) { - Handle(SelectMgr_EntityOwner) anOwner = theSelectedOwners(i); - if (aSelectedOwners.FindIndex(anOwner) > 0) - continue; + if (!aContext.IsNull()) { + for (Standard_Integer i = 1, n = theSelectedOwners.Extent(); i <= n; i++) { + Handle(SelectMgr_EntityOwner) anOwner = theSelectedOwners(i); + if (aSelectedOwners.FindIndex(anOwner) > 0) + continue; - aContext->AddOrRemoveSelected(anOwner, isUpdateViewer); + aContext->AddOrRemoveSelected(anOwner, isUpdateViewer); + } } + ModuleBase_Tools::selectionInfo(aContext, + "XGUI_SelectionMgr::setSelectedOwners -- AddOrRemoveSelected"); } //************************************************************** void XGUI_SelectionMgr::updateSelectedOwners(bool isUpdateViewer) { Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); + if (aContext.IsNull()) + return; + const SelectMgr_ListOfFilter& aFilters = aContext->Filters(); SelectMgr_IndexedMapOfOwner anOwnersToDeselect; @@ -86,22 +99,68 @@ void XGUI_SelectionMgr::updateSelectedOwners(bool isUpdateViewer) //************************************************************** void XGUI_SelectionMgr::onObjectBrowserSelection() { - QObjectPtrList aObjects = myWorkshop->objectBrowser()->selectedObjects(); + QList aSelectedPrs = + myWorkshop->selector()->selection()->getSelected(ModuleBase_ISelection::Browser); + + QList aTmpList = aSelectedPrs; + ObjectPtr aObject; + FeaturePtr aFeature; + foreach(ModuleBase_ViewerPrsPtr aPrs, aTmpList) { + aObject = aPrs->object(); + if (aObject.get()) { + aFeature = std::dynamic_pointer_cast(aObject); + if (aFeature.get()) { + const std::list> aResList = aFeature->results(); + ResultPtr aResult; + ResultCompSolidPtr aCompSolid; + std::list::const_iterator aIt; + for (aIt = aResList.cbegin(); aIt != aResList.cend(); ++aIt) { + aResult = (*aIt); + aSelectedPrs.append(std::shared_ptr( + new ModuleBase_ViewerPrs(aResult, GeomShapePtr(), NULL))); + aCompSolid = std::dynamic_pointer_cast(aResult); + if (aCompSolid.get()) { + for (int i = 0; i < aCompSolid->numberOfSubs(); i++) { + ResultBodyPtr aResult = aCompSolid->subResult(i); + aSelectedPrs.append(std::shared_ptr( + new ModuleBase_ViewerPrs(aResult, aResult->shape(), NULL))); + } + } + } + } + } + } XGUI_Displayer* aDisplayer = myWorkshop->displayer(); - aDisplayer->setSelected(aObjects); + aDisplayer->setSelected(aSelectedPrs); emit selectionChanged(); } //************************************************************** void XGUI_SelectionMgr::onViewerSelection() { + SessionPtr aMgr = ModelAPI_Session::get(); + DocumentPtr anActiveDocument = aMgr->activeDocument(); QObjectPtrList aFeatures; + ResultPtr aResult; + FeaturePtr aFeature; Handle(AIS_InteractiveContext) aContext = myWorkshop->viewer()->AISContext(); - for (aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected()) { - Handle(AIS_InteractiveObject) anIO = aContext->SelectedInteractive(); - ObjectPtr aResult = myWorkshop->displayer()->getObject(anIO); - if (aResult) - aFeatures.append(aResult); + if (!aContext.IsNull()) { + QList aPresentations = + selection()->getSelected(ModuleBase_ISelection::Viewer); + foreach(ModuleBase_ViewerPrsPtr aPrs, aPresentations) { + if (aPrs->object().get()) { + if (!aFeatures.contains(aPrs->object())) + aFeatures.append(aPrs->object()); + if (aPrs->shape().get()) { + aResult = std::dynamic_pointer_cast(aPrs->object()); + if (aResult.get()) { + aFeature = anActiveDocument->producedByFeature(aResult, aPrs->shape()); + if (aFeature.get() && (!aFeatures.contains(aFeature))) + aFeatures.append(aFeature); + } + } + } + } } bool aBlocked = myWorkshop->objectBrowser()->blockSignals(true); myWorkshop->objectBrowser()->setObjectsSelected(aFeatures); @@ -110,6 +169,17 @@ void XGUI_SelectionMgr::onViewerSelection() emit selectionChanged(); } +//************************************************************** +void XGUI_SelectionMgr::updateSelectionBy(const ModuleBase_ISelection::SelectionPlace& thePlace) +{ + QList aSelectedPrs = + myWorkshop->selector()->selection()->getSelected(thePlace); + if (thePlace == ModuleBase_ISelection::Browser) { + XGUI_Displayer* aDisplayer = myWorkshop->displayer(); + aDisplayer->setSelected(aSelectedPrs); + } + +} //************************************************************** void XGUI_SelectionMgr::clearSelection() { @@ -117,9 +187,12 @@ void XGUI_SelectionMgr::clearSelection() bool aBlocked = myWorkshop->objectBrowser()->blockSignals(true); myWorkshop->objectBrowser()->setObjectsSelected(aFeatures); myWorkshop->objectBrowser()->blockSignals(aBlocked); + + QList aSelectedPrs = + myWorkshop->selector()->selection()->getSelected(ModuleBase_ISelection::Browser); XGUI_Displayer* aDisplayer = myWorkshop->displayer(); - aDisplayer->setSelected(aFeatures); + aDisplayer->setSelected(aSelectedPrs); emit selectionChanged(); }