0026076: Visualization - empty bounding box of a shape after closing local context
authorvpa <vpa@opencascade.com>
Fri, 17 Apr 2015 17:12:29 +0000 (20:12 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 23 Apr 2015 13:12:55 +0000 (16:12 +0300)
Fixed handling of invalid bounding boxes;
Links related to temporary objects are now removed from selection structures;
Test case for issue #26076

src/AIS/AIS_InteractiveObject.cxx
src/AIS/AIS_LocalContext.cxx
src/SelectMgr/SelectMgr_SelectableObjectSet.cxx
src/SelectMgr/SelectMgr_SelectionManager.cxx
src/ViewerTest/ViewerTest.cxx
tests/bugs/vis/bug26076 [new file with mode: 0644]

index 0256b6e..cc4dad7 100644 (file)
@@ -603,6 +603,13 @@ void AIS_InteractiveObject::BoundingBox (Bnd_Box& theBndBox)
       const Handle(PrsMgr_Presentation)& aPrs3d = myPresentations.First().Presentation();
       const Handle(Graphic3d_Structure)& aStruct = aPrs3d->Presentation();
       const Graphic3d_BndBox4f& aBndBox = aStruct->CStructure()->BoundingBox();
+
+      if (!aBndBox.IsValid())
+      {
+        theBndBox.SetVoid();
+        return;
+      }
+
       theBndBox.Update (static_cast<Standard_Real> (aBndBox.CornerMin().x()),
                         static_cast<Standard_Real> (aBndBox.CornerMin().y()),
                         static_cast<Standard_Real> (aBndBox.CornerMin().z()),
@@ -636,6 +643,13 @@ void AIS_InteractiveObject::BoundingBox (Bnd_Box& theBndBox)
         const Handle(PrsMgr_Presentation)& aPrs3d = myPresentations (aPrsIter).Presentation();
         const Handle(Graphic3d_Structure)& aStruct = aPrs3d->Presentation();
         const Graphic3d_BndBox4f& aBndBox = aStruct->CStructure()->BoundingBox();
+
+        if (!aBndBox.IsValid())
+        {
+          theBndBox.SetVoid();
+          return;
+        }
+
         theBndBox.Update (static_cast<Standard_Real> (aBndBox.CornerMin().x()),
                           static_cast<Standard_Real> (aBndBox.CornerMin().y()),
                           static_cast<Standard_Real> (aBndBox.CornerMin().z()),
index 6549e9a..259cf01 100644 (file)
@@ -1017,8 +1017,17 @@ void AIS_LocalContext::ClearObjects()
 
     }
   ClearSelected( Standard_False );
+
+  // Clear selection structures for temporary objects, created in local context
+  for (AIS_DataMapIteratorOfDataMapOfSelStat anIter (myActiveObjects); anIter.More(); anIter.Next())
+  {
+    if (anIter.Value()->IsTemporary())
+    {
+      mySM->Remove (anIter.Key(), myMainVS);
+    }
+  }
+
   myActiveObjects.Clear();
-//  myMainVS->ClearAreas();myMainVS->ClearSensitive();
 }
 
 
index 9148657..014fdbd 100644 (file)
@@ -72,6 +72,9 @@ Select3D_BndBox3d SelectMgr_SelectableObjectSet::Box (const Standard_Integer the
   const Handle(SelectMgr_SelectableObject)& anObject = GetObjectById (theIndex);
   Bnd_Box aBox;
   anObject->BoundingBox (aBox);
+  if (aBox.IsVoid())
+    return Select3D_BndBox3d();
+
   return Select3D_BndBox3d (SelectMgr_Vec3 (aBox.CornerMin().X(), aBox.CornerMin().Y(), aBox.CornerMin().Z()),
                             SelectMgr_Vec3 (aBox.CornerMax().X(), aBox.CornerMax().Y(), aBox.CornerMax().Z()));
 }
index 5e8513b..3ded691 100644 (file)
@@ -273,9 +273,6 @@ void SelectMgr_SelectionManager::Remove (const Handle(SelectMgr_SelectableObject
         break;
       }
     }
-    theSelector->RemoveSelectionOfObject (theObject, theObject->CurrentSelection());
-    theSelector->RemoveSelectableObject (theObject);
-    theObject->CurrentSelection()->UpdateBVHStatus (SelectMgr_TBU_Remove);
 
     if (aSelectors.IsEmpty())
     {
index e8d03fd..5f04601 100644 (file)
@@ -3478,7 +3478,8 @@ static int VDisplay2 (Draw_Interpretor& theDI,
         {
           aShape->SetHilightMode (anObjHighMode);
         }
-        GetMapOfAIS().Bind (aShape, aName);
+        if (!toDisplayLocal)
+          GetMapOfAIS().Bind (aShape, aName);
 
         Standard_Integer aDispMode = aShape->HasDisplayMode()
                                    ? aShape->DisplayMode()
diff --git a/tests/bugs/vis/bug26076 b/tests/bugs/vis/bug26076
new file mode 100644 (file)
index 0000000..90f83f4
--- /dev/null
@@ -0,0 +1,33 @@
+puts "============"
+puts "CR26076"
+puts "============"
+puts ""
+
+##########################################################################################
+puts "Visualization - empty bounding box of a shape after closing local context"
+##########################################################################################
+
+pload VISUALIZATION MODELING
+
+vinit
+
+box b1 1 1 1
+box b2 4 5 6
+
+# display box b1 in global context
+vdisplay b1
+# display box b2 in local context only
+vdisplay -local b2
+
+vfit
+
+# display only box b1 by closing local context and erasing box b2
+vdonly b1
+
+vfit
+
+# check that selection works properly
+vmoveto 100 100
+checkcolor 205 205 0 1 1
+
+vdump ${imagedir}/${casename}.png