From: kgv Date: Wed, 24 Feb 2021 16:07:07 +0000 (+0300) Subject: 0031794: Visualization - Highlighting of AIS_Shape works incorrectly when AddChild... X-Git-Tag: V7_6_0_beta~234 X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=19ed08fda6377c1c6d740c5c5fc8492d846bfbaa;p=occt.git 0031794: Visualization - Highlighting of AIS_Shape works incorrectly when AddChild() used PrsMgr_PresentationManager::Display(), PrsMgr_PresentationManager::Color(), and SelectMgr_SelectionManager::Activate() now skip children in Erased state. --- diff --git a/src/PrsMgr/PrsMgr_PresentationManager.cxx b/src/PrsMgr/PrsMgr_PresentationManager.cxx index b1deaba5f6..4aba5811be 100644 --- a/src/PrsMgr/PrsMgr_PresentationManager.cxx +++ b/src/PrsMgr/PrsMgr_PresentationManager.cxx @@ -73,7 +73,11 @@ void PrsMgr_PresentationManager::Display (const Handle(PrsMgr_PresentableObject) { for (PrsMgr_ListOfPresentableObjectsIter anIter(thePrsObj->Children()); anIter.More(); anIter.Next()) { - Display(anIter.Value(), theMode); + const Handle(PrsMgr_PresentableObject)& aChild = anIter.Value(); + if (aChild->DisplayStatus() != PrsMgr_DisplayStatus_Erased) + { + Display(anIter.Value(), theMode); + } } } } @@ -157,7 +161,12 @@ void PrsMgr_PresentationManager::SetVisibility (const Handle(PrsMgr_PresentableO { for (PrsMgr_ListOfPresentableObjectsIter anIter(thePrsObj->Children()); anIter.More(); anIter.Next()) { - SetVisibility(anIter.Value(), theMode, theValue); + const Handle(PrsMgr_PresentableObject)& aChild = anIter.Value(); + if (!theValue + || aChild->DisplayStatus() != PrsMgr_DisplayStatus_Erased) + { + SetVisibility (anIter.Value(), theMode, theValue); + } } } if (!thePrsObj->HasOwnPresentations()) @@ -616,7 +625,11 @@ void PrsMgr_PresentationManager::Color (const Handle(PrsMgr_PresentableObject)& { for (PrsMgr_ListOfPresentableObjectsIter anIter(thePrsObj->Children()); anIter.More(); anIter.Next()) { - Color(anIter.Value(), theStyle, theMode, NULL, theImmediateStructLayerId); + const Handle(PrsMgr_PresentableObject)& aChild = anIter.Value(); + if (aChild->DisplayStatus() != PrsMgr_DisplayStatus_Erased) + { + Color (aChild, theStyle, theMode, NULL, theImmediateStructLayerId); + } } } if (!thePrsObj->HasOwnPresentations()) diff --git a/src/SelectMgr/SelectMgr_SelectionManager.cxx b/src/SelectMgr/SelectMgr_SelectionManager.cxx index 5de7197409..a3e27f1793 100644 --- a/src/SelectMgr/SelectMgr_SelectionManager.cxx +++ b/src/SelectMgr/SelectMgr_SelectionManager.cxx @@ -114,7 +114,11 @@ void SelectMgr_SelectionManager::Activate (const Handle(SelectMgr_SelectableObje for (PrsMgr_ListOfPresentableObjectsIter anChildIter (theObject->Children()); anChildIter.More(); anChildIter.Next()) { - Activate (Handle(SelectMgr_SelectableObject)::DownCast (anChildIter.Value()), theMode); + Handle(SelectMgr_SelectableObject) aChild = Handle(SelectMgr_SelectableObject)::DownCast (anChildIter.Value()); + if (aChild->DisplayStatus() != PrsMgr_DisplayStatus_Erased) + { + Activate (aChild, theMode); + } } if (!theObject->HasOwnPresentations()) return; diff --git a/tests/bugs/vis/bug31794 b/tests/bugs/vis/bug31794 new file mode 100644 index 0000000000..5f4ab5fae5 --- /dev/null +++ b/tests/bugs/vis/bug31794 @@ -0,0 +1,22 @@ +puts "============" +puts "0031794: Visualization - Highlighting of AIS_Shape works incorrectly when AddChild() used" +puts "============" +puts "" + +pload MODELING VISUALIZATION +vinit View1 +box b 10 10 10 +box p1 -100 -100 0 200 200 0 -preview +box p2 100 -100 0 200 200 0 -preview +vdisplay b -dispMode 1 +vdisplay p1 p2 -dispMode 1 -highMode 1 +vfit +vselmode b 0 0 +verase p1 +vchild b -add p1 +vchild b -add p2 +vselmode b 0 1 +vmoveto 100 200 +if {[vreadpixel 100 200 -rgb -name] != "BLACK"} { puts "Error" } + +vdump ${imagedir}/${casename}.png