X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_Displayer.cpp;h=368dbb57469080e6f02d66e23a37690cb3388df4;hb=998909e881f6117ac083d0f4ae607602fce7fc55;hp=cbe4bb8fe0235dcd4033d554b039711c6eae0132;hpb=33b3a43ad2266cb044e4232c902344842adbba7c;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_Displayer.cpp b/src/XGUI/XGUI_Displayer.cpp index cbe4bb8fe..368dbb574 100644 --- a/src/XGUI/XGUI_Displayer.cpp +++ b/src/XGUI/XGUI_Displayer.cpp @@ -706,7 +706,9 @@ void XGUI_Displayer::removeSelectionFilter(const Handle(SelectMgr_Filter)& theFi Handle(AIS_InteractiveContext) aContext = AISContext(); if (aContext.IsNull()) return; - GetFilter()->Remove(theFilter); + Handle(SelectMgr_AndFilter) aCompositeFilter = GetFilter(); + if (aCompositeFilter->IsIn(theFilter)) + aCompositeFilter->Remove(theFilter); } void XGUI_Displayer::removeFilters() @@ -751,8 +753,30 @@ void XGUI_Displayer::activate(const Handle(AIS_InteractiveObject)& theIO, if (aContext.IsNull() || theIO.IsNull()) return; - aContext->Load(theIO, -1, true); - aContext->Deactivate(theIO); + // deactivate object in all modes, which are not in the list of activation + TColStd_ListOfInteger aTColModes; + aContext->ActivatedModes(theIO, aTColModes); + TColStd_ListIteratorOfListOfInteger itr( aTColModes ); + QIntList aModesActivatedForIO; + for (; itr.More(); itr.Next() ) { + Standard_Integer aMode = itr.Value(); + if (!theModes.contains(aMode)) { +#ifdef DEBUG_ACTIVATE + qDebug(QString("deactivate: %1").arg(aMode).toStdString().c_str()); +#endif + aContext->Deactivate(theIO, aMode); + } + else { + aModesActivatedForIO.append(aMode); +#ifdef DEBUG_ACTIVATE + qDebug(QString(" active: %1").arg(aMode).toStdString().c_str()); +#endif + } + } + // loading the interactive object allowing the decomposition + if (aTColModes.IsEmpty()) + aContext->Load(theIO, -1, true); + Handle(AIS_Trihedron) aTrihedron = Handle(AIS_Trihedron)::DownCast(theIO); //Deactivate trihedron which can be activated in local selector if (aTrihedron.IsNull()) { @@ -761,10 +785,18 @@ void XGUI_Displayer::activate(const Handle(AIS_InteractiveObject)& theIO, if (theModes.size() == 0) { //aContext->Load(anAISIO, 0, true); aContext->Activate(theIO); +#ifdef DEBUG_ACTIVATE + qDebug("activate in all modes"); +#endif } else { foreach(int aMode, theModes) { //aContext->Load(anAISIO, aMode, true); - aContext->Activate(theIO, aMode); + if (!aModesActivatedForIO.contains(aMode)) { + aContext->Activate(theIO, aMode); +#ifdef DEBUG_ACTIVATE + qDebug(QString("activate: %1").arg(aMode).toStdString().c_str()); +#endif + } } } }