0026680: Visualization - Changed behavior of mesh visualization and selection in...
authorvpa <vpa@opencascade.com>
Thu, 17 Sep 2015 15:57:48 +0000 (18:57 +0300)
committerkgv <kgv@opencascade.com>
Thu, 24 Sep 2015 11:13:32 +0000 (14:13 +0300)
- handling of global selection mode was added to MeshVS_Mesh;
- corrected unhighlight of interactives with auto-highlight disabled;
- test case for issue 0026680.

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

index 81cdbf3..2cb6e92 100644 (file)
@@ -426,7 +426,10 @@ AIS_StatusOfPick AIS_InteractiveContext::Select (const Standard_Boolean toUpdate
     }
     while (!anObjToClear.IsEmpty())
     {
-      anObjToClear.FindKey (anObjToClear.Size())->ClearSelected();
+      const Handle(AIS_InteractiveObject)& anObj = anObjToClear.FindKey (anObjToClear.Size());
+      const Standard_Integer aHiMode = anObj->HasHilightMode() ? anObj->HilightMode() : 0;
+      myMainPM->Unhighlight (anObj, aHiMode);
+      anObj->ClearSelected();
       anObjToClear.RemoveLast();
     }
 
index 9dd9264..894bd96 100644 (file)
@@ -908,6 +908,13 @@ void MeshVS_Mesh::HilightSelected ( const Handle(PrsMgr_PresentationManager3d)&
 
   for( i=1; i<=len; i++ )
   {
+    if (theOwners.Value (i) == GlobalSelOwner())
+    {
+      const Standard_Integer aHiMode = HasHilightMode() ? HilightMode() : 0;
+      const Quantity_NameOfColor aSelColor = GetContext().IsNull() ? Quantity_NOC_GRAY80 : GetContext()->SelectionColor();
+      thePM->Color (this, aSelColor, aHiMode);
+      continue;
+    }
     anOwner = Handle (MeshVS_MeshEntityOwner)::DownCast ( theOwners.Value ( i ) );
     if ( !anOwner.IsNull() )
     {
@@ -1016,6 +1023,16 @@ void MeshVS_Mesh::HilightOwnerWithColor ( const Handle(PrsMgr_PresentationManage
                                           const Quantity_NameOfColor Color,
                                           const Handle(SelectMgr_EntityOwner)& Owner)
 {
+  if (Owner.IsNull())
+    return;
+
+  if (Owner == GlobalSelOwner())
+  {
+    Standard_Integer aHiMode = HasHilightMode() ? HilightMode() : 0;
+    PM->Color (this, Color, aHiMode, NULL, Graphic3d_ZLayerId_Top);
+    return;
+  }
+
   if ( myHilighter.IsNull() )
     return;
 
@@ -1029,8 +1046,6 @@ void MeshVS_Mesh::HilightOwnerWithColor ( const Handle(PrsMgr_PresentationManage
     aHilightPrs->SetTransformPersistence( Presentation()->TransformPersistenceMode(), Presentation()->TransformPersistencePoint() );
   //----------------
 
-  if( Owner.IsNull() ) return;
-
   const Standard_Boolean isMeshEntityOwner = Owner->IsKind ( STANDARD_TYPE ( MeshVS_MeshEntityOwner ) );
   const Standard_Boolean isWholeMeshOwner =
 //agv    !Owner.IsNull() && Owner==myWholeMeshOwner;
diff --git a/tests/bugs/vis/bug26680 b/tests/bugs/vis/bug26680
new file mode 100644 (file)
index 0000000..c4e8da6
--- /dev/null
@@ -0,0 +1,36 @@
+puts "============"
+puts "CR26680"
+puts "============"
+puts ""
+
+##########################################################################################
+puts "Visualization - Changed behavior of mesh visualization and selection in OMF sample"
+##########################################################################################
+
+pload VISUALIZATION XDE
+
+vinit
+meshfromstl m [locate_data_file bug26680.stl]
+meshcolors m elem2 1
+
+vselmode 0 1
+
+vmoveto 200 200
+if {[vreadpixel 197 257 name] != "CYAN1 1"} {
+  puts "ERROR: presentation for dynamic highlight of the object is wrong!"
+}
+vmoveto 0 0
+if {[vreadpixel 197 257 name] != "BLUE2 1"} {
+  puts "ERROR: the object is not unhighlighted after dynamic highlight!"
+}
+
+vselect 200 200
+if {[vreadpixel 197 257 name] != "GRAY80 1"} {
+  puts "ERROR: presentation for selection highlight is wrong!"
+}
+vselect 0 0
+if {[vreadpixel 197 257 name] != "BLUE2 1"} {
+  puts "ERROR: the object is not unhighlighted after selection highlight!"
+}
+
+set only_screen 1