From: vsv Date: Wed, 27 May 2020 15:47:56 +0000 (+0300) Subject: bos #17910: Filters can only be used once X-Git-Tag: V9_5_0rc1~33 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=60b9fa9fd7197f1406cdcb4725c26015952f5147;p=modules%2Fshaper.git bos #17910: Filters can only be used once --- diff --git a/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp b/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp index 9b09b7205..33bb8470c 100644 --- a/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp +++ b/src/ModuleBase/ModuleBase_WidgetSelectionFilter.cpp @@ -520,33 +520,40 @@ void ModuleBase_WidgetSelectionFilter::updatePreview(const TopoDS_Shape& theShap void ModuleBase_WidgetSelectionFilter::onShowOnly(bool theShow) { - if (myPreview.IsNull()) - return; Handle(AIS_InteractiveContext) aCtx = myWorkshop->viewer()->AISContext(); - if (theShow) { AIS_ListOfInteractive aList; aCtx->DisplayedObjects(AIS_KOI_Shape, -1, aList); - aList.Remove(myPreview); + if (!myPreview.IsNull()) + aList.Remove(myPreview); if (aList.Size() > 0) myListIO = aList; } AIS_ListOfInteractive::const_iterator aIt; Handle(AIS_Shape) aShapeIO; + bool isModified = false; for (aIt = myListIO.cbegin(); aIt != myListIO.cend(); aIt++) { aShapeIO = Handle(AIS_Shape)::DownCast(*aIt); if (!aShapeIO.IsNull()) { - if (theShow) - aCtx->Erase(aShapeIO, false); + if (theShow) { + if (aCtx->IsDisplayed(aShapeIO)) { + aCtx->Erase(aShapeIO, false); + isModified = true; + } + } else { - aCtx->Display(aShapeIO, false); - std::shared_ptr anAISObj = AISObjectPtr(new GeomAPI_AISObject()); - anAISObj->setImpl(new Handle(AIS_InteractiveObject)(aShapeIO)); - myWorkshop->applyCurrentSelectionModes(anAISObj); + if (!aCtx->IsDisplayed(aShapeIO)) { + aCtx->Display(aShapeIO, false); + std::shared_ptr anAISObj = AISObjectPtr(new GeomAPI_AISObject()); + anAISObj->setImpl(new Handle(AIS_InteractiveObject)(aShapeIO)); + myWorkshop->applyCurrentSelectionModes(anAISObj); + isModified = true; + } } } } - myWorkshop->viewer()->update(); + if (isModified) + myWorkshop->viewer()->update(); } void ModuleBase_WidgetSelectionFilter::updateSelectBtn() @@ -559,11 +566,16 @@ void ModuleBase_WidgetSelectionFilter::updateNumberSelected() { int aNb = myValues.size(); myNbLbl->setText(QString::number(aNb)); - if (aNb == 0) + if (aNb == 0) { myFeature->setError(translate("Selection is empty").toStdString(), false, false); + myShowBtn->setChecked(false); + onShowOnly(false); + myShowBtn->setEnabled(false); + } else { myFeature->setError("", false, false); myFeature->data()->execState(ModelAPI_StateDone); + myShowBtn->setEnabled(true); } }