0030674: Visualization, AIS_InteractiveObject - fix accessibility of several properties
[occt.git] / src / SelectMgr / SelectMgr_SelectableObject.hxx
index 3132b5f..efb7604 100644 (file)
@@ -18,8 +18,6 @@
 #define _SelectMgr_SelectableObject_HeaderFile
 
 #include <PrsMgr_PresentableObject.hxx>
-#include <PrsMgr_PresentationManager3d.hxx>
-#include <PrsMgr_TypeOfPresentation3d.hxx>
 #include <SelectMgr_IndexedMapOfOwner.hxx>
 #include <SelectMgr_SequenceOfSelection.hxx>
 #include <SelectMgr_Selection.hxx>
@@ -30,15 +28,20 @@ class Prs3d_Presentation;
 class Standard_NotImplemented;
 class SelectMgr_SelectionManager;
 
-//! A framework to supply the structure of the object to be
-//! selected. At the first pick, this structure is created by
-//! calling the appropriate algorithm and retaining this
-//! framework for further picking.
-//! This abstract framework is inherited in Application
-//! Interactive Services (AIS), notably in AIS_InteractiveObject.
-//! Consequently, 3D selection should be handled by the
-//! relevant daughter classes and their member functions
-//! in AIS. This is particularly true in the creation of new interactive objects.
+//! A framework to supply the structure of the object to be selected.
+//! At the first pick, this structure is created by calling the appropriate algorithm and retaining this framework for further picking.
+//! This abstract framework is inherited in Application Interactive Services (AIS), notably in AIS_InteractiveObject.
+//! Consequently, 3D selection should be handled by the relevant daughter classes and their member functions in AIS.
+//! This is particularly true in the creation of new interactive objects.
+//!
+//! Key interface methods to be implemented by every Selectable Object:
+//! * Presentable Object (PrsMgr_PresentableObject)
+//!   Consider defining an enumeration of supported Display Mode indexes for particular Interactive Object or class of Interactive Objects.
+//!   - AcceptDisplayMode() accepting display modes implemented by this object;
+//!   - Compute() computing presentation for the given display mode index;
+//! * Selectable Object (SelectMgr_SelectableObject)
+//!   Consider defining an enumeration of supported Selection Mode indexes for particular Interactive Object or class of Interactive Objects.
+//!   - ComputeSelection() computing selectable entities for the given selection mode index.
 class SelectMgr_SelectableObject : public PrsMgr_PresentableObject
 {
   DEFINE_STANDARD_RTTIEXT(SelectMgr_SelectableObject, PrsMgr_PresentableObject)
@@ -47,17 +50,17 @@ public:
 
   //! Clears all selections of the object
   Standard_EXPORT virtual ~SelectMgr_SelectableObject();
-  
-  //! Recovers and calculates any sensitive primitive,
-  //! aSelection, available in Shape mode, specified by
-  //! aMode. As a rule, these are sensitive faces.
-  //! This method is defined as virtual. This enables you to
-  //! implement it in the creation of a new class of AIS
-  //! Interactive Object. You need to do this and in so
-  //! doing, redefine this method, if you create a class
-  //! which enriches the list of signatures and types.
-  Standard_EXPORT virtual void ComputeSelection (const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) = 0;
-  
+
+  //! Computes sensitive primitives for the given selection mode - key interface method of Selectable Object.
+  //! @param theSelection selection to fill
+  //! @param theMode selection mode to create sensitive primitives
+  virtual void ComputeSelection (const Handle(SelectMgr_Selection)& theSelection,
+                                 const Standard_Integer theMode) = 0;
+
+  //! Informs the graphic context that the interactive Object may be decomposed into sub-shapes for dynamic selection.
+  //! The most used Interactive Object is AIS_Shape.
+  virtual Standard_Boolean AcceptShapeDecomposition() const { return Standard_False; }
+
   //! Re-computes the sensitive primitives for all modes. IMPORTANT: Do not use
   //! this method to update selection primitives except implementing custom selection manager!
   //! This method does not take into account necessary BVH updates, but may invalidate the pointers
@@ -91,22 +94,6 @@ public:
   //! Return the sequence of selections.
   const SelectMgr_SequenceOfSelection& Selections() const { return myselections; }
 
-  //! Begins the iteration scanning for sensitive primitives.
-  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
-  void Init() { mycurrent = 1; }
-
-  //! Continues the iteration scanning for sensitive primitives.
-  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
-  Standard_Boolean More() const { return mycurrent <= myselections.Length(); }
-
-  //! Continues the iteration scanning for sensitive primitives.
-  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
-  void Next() { ++mycurrent; }
-
-  //! Returns the current selection in this framework.
-  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
-  const Handle(SelectMgr_Selection)& CurrentSelection() const { return myselections (mycurrent); }
-
   Standard_EXPORT void ResetTransformation() Standard_OVERRIDE;
   
   //! Recomputes the location of the selection aSelection.
@@ -117,7 +104,8 @@ public:
   Standard_EXPORT virtual void UpdateTransformations (const Handle(SelectMgr_Selection)& aSelection);
   
   //! Method which draws selected owners ( for fast presentation draw )
-  Standard_EXPORT virtual void HilightSelected (const Handle(PrsMgr_PresentationManager3d)& PM, const SelectMgr_SequenceOfOwner& Seq);
+  Standard_EXPORT virtual void HilightSelected (const Handle(PrsMgr_PresentationManager)& thePrsMgr,
+                                                const SelectMgr_SequenceOfOwner& theSeq);
   
   //! Method which clear all selected owners belonging
   //! to this selectable object ( for fast presentation draw )
@@ -128,28 +116,30 @@ public:
   //! Clears or invalidates dynamic highlight presentation.
   //! By default it clears immediate draw of given presentation
   //! manager.
-  Standard_EXPORT virtual void ClearDynamicHighlight (const Handle(PrsMgr_PresentationManager3d)& theMgr);
+  Standard_EXPORT virtual void ClearDynamicHighlight (const Handle(PrsMgr_PresentationManager)& theMgr);
 
   //! Method which hilight an owner belonging to
   //! this selectable object  ( for fast presentation draw )
-  Standard_EXPORT virtual void HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager3d)& thePM,
+  Standard_EXPORT virtual void HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager)& thePM,
                                                       const Handle(Prs3d_Drawer)& theStyle,
                                                       const Handle(SelectMgr_EntityOwner)& theOwner);
   
-  //! If returns True, the old mechanism for highlighting
-  //! selected objects is used (HilightSelected Method may be empty).
-  //! If returns False, the HilightSelected method will be
-  //! fully responsible for highlighting selected entity
-  //! owners belonging to this selectable object.
-  Standard_EXPORT virtual Standard_Boolean IsAutoHilight() const;
+  //! If returns True, the old mechanism for highlighting selected objects is used (HilightSelected Method may be empty).
+  //! If returns False, the HilightSelected method will be fully responsible for highlighting selected entity owners belonging to this selectable object.
+  virtual Standard_Boolean IsAutoHilight() const { return myAutoHilight; }
   
-  //! Set AutoHilight property to true or false
-  //! Sets  up  Transform  Persistence Mode  for  this  object
-  Standard_EXPORT virtual void SetAutoHilight (const Standard_Boolean newAutoHilight);
+  //! Set AutoHilight property to true or false.
+  virtual void SetAutoHilight (const Standard_Boolean theAutoHilight) { myAutoHilight = theAutoHilight; }
   
-  Standard_EXPORT Handle(Prs3d_Presentation) GetHilightPresentation (const Handle(PrsMgr_PresentationManager3d)& TheMgr);
-  
-  Standard_EXPORT Handle(Prs3d_Presentation) GetSelectPresentation (const Handle(PrsMgr_PresentationManager3d)& TheMgr);
+  //! Creates or returns existing presentation for highlighting detected object.
+  //! @param thePrsMgr presentation manager to create new presentation
+  //! @return existing or newly created presentation (when thePrsMgr is not NULL)
+  Standard_EXPORT Handle(Prs3d_Presentation) GetHilightPresentation (const Handle(PrsMgr_PresentationManager)& thePrsMgr);
+
+  //! Creates or returns existing presentation for highlighting selected object.
+  //! @param thePrsMgr presentation manager to create new presentation
+  //! @return existing or newly created presentation (when thePrsMgr is not NULL)
+  Standard_EXPORT Handle(Prs3d_Presentation) GetSelectPresentation (const Handle(PrsMgr_PresentationManager)& thePrsMgr);
 
   //! Removes presentations returned by GetHilightPresentation() and GetSelectPresentation().
   Standard_EXPORT virtual void ErasePresentations (Standard_Boolean theToRemove);
@@ -165,23 +155,14 @@ public:
     updateSelection (theMode);
   }
 
-  //! Returns bounding box of selectable object
-  //! by storing its minimum and maximum 3d coordinates
-  //! to output parameters
-  Standard_EXPORT virtual void BoundingBox (Bnd_Box& theBndBox) = 0;
-
   //! Sets common entity owner for assembly sensitive object entities
   Standard_EXPORT void SetAssemblyOwner (const Handle(SelectMgr_EntityOwner)& theOwner, const Standard_Integer theMode = -1);
 
-  //! Returns a bounding box of sensitive entities with the owners given
-  //! if they are a part of activated selection
+  //! Returns a bounding box of sensitive entities with the owners given if they are a part of activated selection
   Standard_EXPORT Bnd_Box BndBoxOfSelected (const Handle(SelectMgr_IndexedMapOfOwner)& theOwners);
 
-  //! Returns the mode for selection of object as a whole
-  Standard_Integer GlobalSelectionMode() const
-  {
-    return myGlobalSelMode;
-  }
+  //! Returns the mode for selection of object as a whole; 0 by default.
+  Standard_Integer GlobalSelectionMode() const { return myGlobalSelMode; }
 
   //! Returns the owner of mode for selection of object as a whole
   Standard_EXPORT virtual Handle(SelectMgr_EntityOwner) GlobalSelOwner() const;
@@ -189,10 +170,30 @@ public:
   //! Returns common entity owner if the object is an assembly
   Standard_EXPORT virtual const Handle(SelectMgr_EntityOwner)& GetAssemblyOwner() const;
 
+public:
+
+  //! Begins the iteration scanning for sensitive primitives.
+  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
+  void Init() { mycurrent = 1; }
+
+  //! Continues the iteration scanning for sensitive primitives.
+  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
+  Standard_Boolean More() const { return mycurrent <= myselections.Length(); }
+
+  //! Continues the iteration scanning for sensitive primitives.
+  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
+  void Next() { ++mycurrent; }
+
+  //! Returns the current selection in this framework.
+  Standard_DEPRECATED("Deprecated method, Selections() should be used instead")
+  const Handle(SelectMgr_Selection)& CurrentSelection() const { return myselections (mycurrent); }
+
 protected:
 
+  //! Protected empty constructor.
   Standard_EXPORT SelectMgr_SelectableObject(const PrsMgr_TypeOfPresentation3d aTypeOfPresentation3d = PrsMgr_TOP_AllView);
 
+  //! Override global selection mode.
   void setGlobalSelMode (const Standard_Integer theMode)
   {
     myGlobalSelMode = theMode > 0 ? theMode : 0;
@@ -201,19 +202,18 @@ protected:
   //! Update clipping planes state.
   Standard_EXPORT virtual void UpdateClipping() Standard_OVERRIDE;
 
+  //! Sets update status FULL to selections of the object.
+  //! Must be used as the only method of UpdateSelection from outer classes to prevent BVH structures from being outdated.
   Standard_EXPORT virtual void updateSelection (const Standard_Integer theMode);
 
 protected:
 
-  SelectMgr_SequenceOfSelection myselections;
-  Handle(Prs3d_Presentation) mySelectionPrs;
-  Handle(Prs3d_Presentation) myHilightPrs;
-  Standard_Boolean myAutoHilight;
-
-private:
-
-  Standard_Integer mycurrent;
-  Standard_Integer myGlobalSelMode;
+  SelectMgr_SequenceOfSelection myselections;    //!< list of selections
+  Handle(Prs3d_Presentation)    mySelectionPrs;  //!< optional presentation for highlighting selected object
+  Handle(Prs3d_Presentation)    myHilightPrs;    //!< optional presentation for highlighting detected object
+  Standard_Integer              myGlobalSelMode; //!< global selection mode
+  Standard_Integer              mycurrent;       //!< [deprecated] iterator value
+  Standard_Boolean              myAutoHilight;   //!< auto-highlighting flag defining
 
 };