]> OCCT Git - occt.git/commitdiff
0032487: Visualization - synchronize myHasEntityWithPersistence with such entities...
authordrochalo <diogo.lopes@opencascade.com>
Thu, 26 Oct 2023 10:43:19 +0000 (11:43 +0100)
committermzernova <mzernova@opencascade.com>
Mon, 3 Mar 2025 12:11:27 +0000 (12:11 +0000)
Changed myHasEntityWithPersistence to a counter.
Renamed variable to myNbEntityWithPersistence.
Modified HasEntityWithPersistence() method.
Modified logical test in SelectMgr_ViewerSelector::traverseObject.

src/SelectMgr/SelectMgr_SensitiveEntitySet.cxx
src/SelectMgr/SelectMgr_SensitiveEntitySet.hxx

index 209d9f9b55f768430ed51c96527d44fff01e3ff7..5f853514b75cce5fa27ef3ff25f3bc000e90f213 100644 (file)
@@ -28,7 +28,7 @@ IMPLEMENT_STANDARD_RTTIEXT(SelectMgr_SensitiveEntitySet, BVH_PrimitiveSet3d)
 SelectMgr_SensitiveEntitySet::SelectMgr_SensitiveEntitySet (const Handle(Select3D_BVHBuilder3d)& theBuilder)
 : BVH_PrimitiveSet3d (theBuilder)
 {
-  //
+  myNbEntityWithPersistence = 0;
 }
 
 //=======================================================================
@@ -42,7 +42,6 @@ void SelectMgr_SensitiveEntitySet::Append (const Handle(SelectMgr_SensitiveEntit
     theEntity->ResetSelectionActiveStatus();
     return;
   }
-
   const Standard_Integer anExtent = mySensitives.Extent();
   if (mySensitives.Add (theEntity) > anExtent)
   {
@@ -50,7 +49,7 @@ void SelectMgr_SensitiveEntitySet::Append (const Handle(SelectMgr_SensitiveEntit
   }
   if (!theEntity->BaseSensitive()->TransformPersistence().IsNull())
   {
-    myHasEntityWithPersistence = Standard_True;
+    ++myNbEntityWithPersistence;
   }
   MarkDirty();
 }
@@ -78,7 +77,7 @@ void SelectMgr_SensitiveEntitySet::Append (const Handle(SelectMgr_Selection)& th
     }
     if (!aSensEnt->BaseSensitive()->TransformPersistence().IsNull())
     {
-      myHasEntityWithPersistence = Standard_True;
+      ++myNbEntityWithPersistence;
     }
   }
   MarkDirty();
@@ -93,7 +92,8 @@ void SelectMgr_SensitiveEntitySet::Remove (const Handle(SelectMgr_Selection)& th
 {
   for (NCollection_Vector<Handle(SelectMgr_SensitiveEntity)>::Iterator aSelEntIter (theSelection->Entities()); aSelEntIter.More(); aSelEntIter.Next())
   {
-    const Standard_Integer anEntIdx = mySensitives.FindIndex (aSelEntIter.Value());
+    const Handle(SelectMgr_SensitiveEntity)& aSensEnt = aSelEntIter.Value();
+    const Standard_Integer anEntIdx = mySensitives.FindIndex (aSensEnt);
     if (anEntIdx == 0)
     {
       continue;
@@ -103,9 +103,13 @@ void SelectMgr_SensitiveEntitySet::Remove (const Handle(SelectMgr_Selection)& th
     {
       Swap (anEntIdx - 1, mySensitives.Size() - 1);
     }
+    if (!aSensEnt->BaseSensitive()->TransformPersistence().IsNull())
+    {
+      --myNbEntityWithPersistence;
+    }
 
     mySensitives.RemoveLast();
-    removeOwner (aSelEntIter.Value()->BaseSensitive()->OwnerId());
+    removeOwner (aSensEnt->BaseSensitive()->OwnerId());
   }
 
   MarkDirty();
index 41cf73233336729c512e6872c38d65d9b871b820..01752fd2f3a9793ad7b9c115dfa82479bc488260 100644 (file)
@@ -77,7 +77,7 @@ public:
   const SelectMgr_MapOfOwners& Owners() const { return myOwnersMap; }
 
   //! Returns map of entities.
-  Standard_Boolean HasEntityWithPersistence() const { return myHasEntityWithPersistence; }
+  Standard_Boolean HasEntityWithPersistence() const { return myNbEntityWithPersistence > 0; }
 
 protected:
 
@@ -89,9 +89,9 @@ protected:
 
 private:
 
-  SelectMgr_IndexedMapOfHSensitive mySensitives; //!< Map of entities and its corresponding index in BVH
-  SelectMgr_MapOfOwners            myOwnersMap;  //!< Map of entity owners and its corresponding number of sensitives
-  Standard_Boolean  myHasEntityWithPersistence;  //!< flag if some of sensitive entity has own transform persistence
+  SelectMgr_IndexedMapOfHSensitive mySensitives;              //!< Map of entities and its corresponding index in BVH
+  SelectMgr_MapOfOwners            myOwnersMap;               //!< Map of entity owners and its corresponding number of sensitives
+  Standard_Integer                 myNbEntityWithPersistence; //!< number of sensitive entities that have own transform persistence
 };
 
 #endif // _SelectMgr_SensitiveEntitySet_HeaderFile