1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-03 17:56:21 +03:00

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.
This commit is contained in:
kgv 2021-02-24 19:07:07 +03:00 committed by bugmaster
parent e70625d6b1
commit 19ed08fda6
3 changed files with 43 additions and 4 deletions

View File

@ -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())

View File

@ -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;

22
tests/bugs/vis/bug31794 Normal file
View File

@ -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