AIS_Selection::SetCurrentSelection (myCurrentName.ToCString());
Handle(AIS_Selection) aCurSel = AIS_Selection::Selection (myCurrentName.ToCString());
+ NCollection_IndexedMap<Handle(AIS_InteractiveObject)> 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);
--- /dev/null
+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