0026566: Visualization - incorrect highlight after selection of owners with auto...
authorvpa <vpa@opencascade.com>
Tue, 18 Aug 2015 11:49:43 +0000 (14:49 +0300)
committerski <ski@opencascade.com>
Thu, 20 Aug 2015 13:55:20 +0000 (16:55 +0300)
Unhighlight of previously selected owners was corrected

src/AIS/AIS_InteractiveContext_1.cxx
tests/bugs/vis/bug26566 [new file with mode: 0644]

index 47cc984..1618da8 100644 (file)
@@ -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<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);
diff --git a/tests/bugs/vis/bug26566 b/tests/bugs/vis/bug26566
new file mode 100644 (file)
index 0000000..cd85ddc
--- /dev/null
@@ -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