From bf916d4102a2d065b2708f4a9a4f30ffd72b0cff Mon Sep 17 00:00:00 2001 From: vsv Date: Thu, 28 May 2020 19:41:55 +0300 Subject: [PATCH] bos #19090: Problem of selection --- src/XGUI/XGUI_Displayer.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/XGUI/XGUI_Displayer.cpp b/src/XGUI/XGUI_Displayer.cpp index e9d1f320d..b725a76ca 100644 --- a/src/XGUI/XGUI_Displayer.cpp +++ b/src/XGUI/XGUI_Displayer.cpp @@ -1115,6 +1115,13 @@ void XGUI_Displayer::AddOrRemoveSelectedShapes(Handle(AIS_InteractiveContext) th Handle(StdSelect_BRepOwner) BROwnr = Handle(StdSelect_BRepOwner)::DownCast(anOwner); if (!BROwnr.IsNull() && BROwnr->HasShape()) { const TopoDS_Shape& aShape = BROwnr->Shape(); + + Handle(ModuleBase_ResultPrs) aResPrs = Handle(ModuleBase_ResultPrs)::DownCast(BROwnr->Selectable()); + TopoDS_Shape aRealShape; + if (!aResPrs.IsNull()) { + aRealShape = aResPrs->originalShape(); + } + if (aShape.IsNull()) continue; @@ -1131,7 +1138,15 @@ void XGUI_Displayer::AddOrRemoveSelectedShapes(Handle(AIS_InteractiveContext) th // isSame should be used here as it does not check orientation of shapes // despite on isEqual of shapes or IsBound for shape in QMap. Orientation is // different for Edges shapes in model shape and owner even if this is the same shape - if (ModuleBase_Tools::isSameShape(aParameterShape, aShape)) { + bool isSame = ModuleBase_Tools::isSameShape(aParameterShape, aShape); + if (!isSame) { + // In case of using HideFaces panel we can have instead of an original shape + // a compaund of faces which represent original shape with hidden faces. + // So, we have to compare the parameter with original shape + if (!aRealShape.IsNull()) + isSame = ModuleBase_Tools::isSameShape(aParameterShape, aRealShape); + } + if (isSame) { Handle(AIS_InteractiveObject) anOwnerPresentation = Handle(AIS_InteractiveObject)::DownCast(anOwner->Selectable()); NCollection_Map aPresentations = -- 2.39.2