1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-04 18:06:22 +03:00

0026076: Visualization - empty bounding box of a shape after closing local context

Fixed handling of invalid bounding boxes;
Links related to temporary objects are now removed from selection structures;
Test case for issue #26076
This commit is contained in:
vpa 2015-04-17 20:12:29 +03:00 committed by bugmaster
parent 2afd4e9888
commit b3c433fea3
6 changed files with 62 additions and 5 deletions

View 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()),

View 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();
}

View 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()));
}

View 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())
{

View 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()

33
tests/bugs/vis/bug26076 Normal file
View File

@ -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