0026139: AIS_InteractiveContext::Display performance regression
[occt.git] / src / SelectMgr / SelectMgr_SensitiveEntitySet.hxx
index c143bb9..c3025d1 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <BVH_PrimitiveSet.hxx>
 
-#include <NCollection_Sequence.hxx>
+#include <NCollection_IndexedMap.hxx>
 #include <NCollection_Handle.hxx>
 
 #include <Select3D_BndBox3d.hxx>
 #include <SelectMgr_SensitiveEntity.hxx>
 #include <SelectMgr_Selection.hxx>
 
+typedef NCollection_IndexedMap<Handle(SelectMgr_SensitiveEntity)> SelectMgr_IndexedMapOfHSensitive;
+
 //! This class is used to store all calculated sensitive entites of one selectable
 //! object. It provides an interface for building BVH tree which is used to speed-up
 //! the performance of searching for overlap among sensitives of one selectable object
 class SelectMgr_SensitiveEntitySet : public BVH_PrimitiveSet<Standard_Real, 3>
 {
+  Handle(SelectMgr_SensitiveEntity) EMPTY_ENT;
+
 public:
 
   SelectMgr_SensitiveEntitySet();
@@ -38,15 +42,12 @@ public:
   virtual ~SelectMgr_SensitiveEntitySet() {};
 
   //! Adds new entity to the set and marks BVH tree for rebuild
-  void Append (const SelectMgr_HSensitiveEntity& theEntity);
+  void Append (const Handle(SelectMgr_SensitiveEntity)& theEntity);
 
   //! Adds every entity of selection theSelection to the set and marks
   //! BVH tree for rebuild
   void Append (const Handle(SelectMgr_Selection)& theSelection);
 
-  //! Removes entity from the set and marks BVH tree for rebuild
-  void Remove (const SelectMgr_HSensitiveEntity& theEntity);
-
   //! Removes every entity of selection theSelection from the set
   //! and marks BVH tree for rebuild
   void Remove (const Handle(SelectMgr_Selection)& theSelection);
@@ -67,12 +68,11 @@ public:
   virtual Standard_Integer Size() const Standard_OVERRIDE;
 
   //! Returns the entity with index theIndex in the set
-  const SelectMgr_HSensitiveEntity& GetSensitiveById (const Standard_Integer theIndex) const;
+  const Handle(SelectMgr_SensitiveEntity)& GetSensitiveById (const Standard_Integer theIndex) const;
 
 private:
 
-  NCollection_Sequence<SelectMgr_HSensitiveEntity> myEntities;       //!< A sequence of calculated sensitives of the object
-  NCollection_Sequence<Standard_Integer>           myEntityIdxs;     //!< Cached indexes for faster BVH build
+  SelectMgr_IndexedMapOfHSensitive mySensitives;     //!< Map of entities and its corresponding index in BVH
 };
 
 #endif // _SelectMgr_SensitiveEntitySet_HeaderFile