diff --git a/src/AIS/AIS_InteractiveContext_1.cxx b/src/AIS/AIS_InteractiveContext_1.cxx index 47cc984bce..1618da80cd 100644 --- a/src/AIS/AIS_InteractiveContext_1.cxx +++ b/src/AIS/AIS_InteractiveContext_1.cxx @@ -1014,16 +1014,32 @@ void AIS_InteractiveContext::SetSelected (const Handle(SelectMgr_EntityOwner)& t AIS_Selection::SetCurrentSelection (myCurrentName.ToCString()); Handle(AIS_Selection) aCurSel = AIS_Selection::Selection (myCurrentName.ToCString()); + NCollection_IndexedMap anObjToClear; for (aCurSel->Init(); aCurSel->More(); aCurSel->Next()) { const Handle(SelectMgr_EntityOwner) anOwner = Handle(SelectMgr_EntityOwner)::DownCast (aCurSel->Value()); if (!anOwner->HasSelectable()) continue; - const Standard_Integer aHiMode = anObject->HasHilightMode() ? anObject->HilightMode() : 0; - anOwner->Unhilight (myMainPM, aHiMode); + const Handle(AIS_InteractiveObject) anInteractive = + Handle(AIS_InteractiveObject)::DownCast (anOwner->Selectable()); + if (anOwner->IsAutoHilight()) + { + const Standard_Integer aHiMode = anInteractive->HasHilightMode() ? anInteractive->HilightMode() : 0; + anOwner->Unhilight (myMainPM, aHiMode); + } + else + { + if (!anObjToClear.Contains (anInteractive)) + anObjToClear.Add (anInteractive); + } anOwner->State (0); } + while (!anObjToClear.IsEmpty()) + { + anObjToClear.FindKey (anObjToClear.Size())->ClearSelected(); + anObjToClear.RemoveLast(); + } AIS_Selection::ClearAndSelect (theOwner); theOwner->State (1); diff --git a/tests/bugs/vis/bug26566 b/tests/bugs/vis/bug26566 new file mode 100644 index 0000000000..cd85ddcfd1 --- /dev/null +++ b/tests/bugs/vis/bug26566 @@ -0,0 +1,38 @@ +puts "========" +puts "OCC26566" +puts "========" +puts "" +################################################################## +puts "Visualization - incorrect highlight after selection of owners with auto-highlight disabled" +################################################################## + +pload VISUALIZATION MODELING XSDRAW +vinit + +# create an object with auto-highlight disabled +meshfromstl m [locate_data_file b.stl] +vselmode m 8 1 + +# create an object with auto-highlight enabled +box b 100 100 100 +vdisplay b + +vfit + +# select box +vselect 200 200 + +# select mesh with auto-highlight disabled +vselect 290 370 +# check that box is drawn with its own color +checkcolor 321 128 1 1 0 +# check that selection prs for mesh is displayed +checkcolor 316 321 0.8 0.8 0.8 + +vselect 200 200 +# check that box is highlighted with selection color +checkcolor 321 128 0.8 0.8 0.8 +# check that mesh is drawn without selection +checkcolor 316 321 0 0 0 + +set only_screen 1