]> OCCT Git - occt.git/commitdiff
0032976: Visualization - AIS_InteractiveContext::FitSelected() includes objects invis...
authorkgv <kgv@opencascade.com>
Mon, 16 May 2022 20:02:31 +0000 (23:02 +0300)
committersmoskvin <smoskvin@opencascade.com>
Tue, 17 May 2022 17:15:55 +0000 (20:15 +0300)
src/AIS/AIS_InteractiveContext.cxx
src/AIS/AIS_InteractiveContext.hxx
src/AIS/AIS_ViewController.cxx
src/AIS/AIS_ViewCube.cxx

index a2130989aca6b162552aa28626e8dfd1ce782ff3..1cd4cb8f91115e510c70c1382217d98a211874fc 100644 (file)
@@ -2214,10 +2214,11 @@ void AIS_InteractiveContext::FitSelected (const Handle(V3d_View)& theView)
 //function : BoundingBoxOfSelection
 //purpose  :
 //=======================================================================
-Bnd_Box AIS_InteractiveContext::BoundingBoxOfSelection() const
+Bnd_Box AIS_InteractiveContext::BoundingBoxOfSelection (const Handle(V3d_View)& theView) const
 {
   Bnd_Box aBndSelected;
   AIS_MapOfObjectOwners anObjectOwnerMap;
+  const Standard_Integer aViewId = !theView.IsNull() ? theView->View()->Identification() : -1;
   for (AIS_NListOfEntityOwner::Iterator aSelIter (mySelection->Objects()); aSelIter.More(); aSelIter.Next())
   {
     const Handle(SelectMgr_EntityOwner)& anOwner = aSelIter.Value();
@@ -2227,6 +2228,13 @@ Bnd_Box AIS_InteractiveContext::BoundingBoxOfSelection() const
       continue;
     }
 
+    Handle(Graphic3d_ViewAffinity) anAffinity = myMainVwr->StructureManager()->ObjectAffinity (anObj);
+    const Standard_Boolean isVisible = aViewId == -1 || anAffinity->IsVisible (aViewId);
+    if (!isVisible)
+    {
+      continue;
+    }
+
     if (anOwner == anObj->GlobalSelOwner())
     {
       Bnd_Box aTmpBnd;
@@ -2264,7 +2272,7 @@ void AIS_InteractiveContext::FitSelected (const Handle(V3d_View)& theView,
                                           const Standard_Real theMargin,
                                           const Standard_Boolean theToUpdate)
 {
-  Bnd_Box aBndSelected = BoundingBoxOfSelection();
+  Bnd_Box aBndSelected = BoundingBoxOfSelection (theView);
   if (!aBndSelected.IsVoid())
   {
     theView->FitAll (aBndSelected, theMargin, theToUpdate);
index 5b9ec24c2836b8f8b1f49d31f4449babf691f398..5e79807ea685a25f5e1b126a32ae8bd89ccfcede 100644 (file)
@@ -502,7 +502,10 @@ public: //! @name Selection management
   Standard_EXPORT AIS_StatusOfPick SelectDetected (const AIS_SelectionScheme theSelScheme = AIS_SelectionScheme_Replace);
 
   //! Returns bounding box of selected objects.
-  Standard_EXPORT Bnd_Box BoundingBoxOfSelection() const;
+  Standard_EXPORT Bnd_Box BoundingBoxOfSelection (const Handle(V3d_View)& theView) const;
+
+  Standard_DEPRECATED ("BoundingBoxOfSelection() should be called with View argument")
+  Bnd_Box BoundingBoxOfSelection() const { return BoundingBoxOfSelection (Handle(V3d_View)()); }
 
   //! Sets list of owner selected/deselected using specified selection scheme.
   //! @param theOwners owners to change selection state
index 8ce7822d48baf9a969a1e668133441d710ac96fa..12ad1ef6176b46552a5b45363116d97fab8ed42f 100644 (file)
@@ -1969,7 +1969,7 @@ gp_Pnt AIS_ViewController::GravityPoint (const Handle(AIS_InteractiveContext)& t
 void AIS_ViewController::FitAllAuto (const Handle(AIS_InteractiveContext)& theCtx,
                                      const Handle(V3d_View)& theView)
 {
-  const Bnd_Box aBoxSel = theCtx->BoundingBoxOfSelection();
+  const Bnd_Box aBoxSel = theCtx->BoundingBoxOfSelection (theView);
   const double aFitMargin = 0.01;
   if (aBoxSel.IsVoid())
   {
index 2af2fef307e571ab77e6d029f023a6f6bb9dd0c7..d2ec561fc1728b687a721ac62759779d37e42d95 100644 (file)
@@ -859,7 +859,7 @@ Standard_Boolean AIS_ViewCube::HasAnimation() const
 void AIS_ViewCube::viewFitAll (const Handle(V3d_View)& theView,
                                const Handle(Graphic3d_Camera)& theCamera)
 {
-  Bnd_Box aBndBox = myToFitSelected ? GetContext()->BoundingBoxOfSelection() : theView->View()->MinMaxValues();
+  Bnd_Box aBndBox = myToFitSelected ? GetContext()->BoundingBoxOfSelection (theView) : theView->View()->MinMaxValues();
   if (aBndBox.IsVoid()
    && myToFitSelected)
   {