#ifndef _SelectMgr_SelectableObject_HeaderFile
#define _SelectMgr_SelectableObject_HeaderFile
-#include <Standard.hxx>
-#include <Standard_Type.hxx>
-
-#include <SelectMgr_SequenceOfSelection.hxx>
-#include <Prs3d_Drawer.hxx>
-#include <Standard_Integer.hxx>
-#include <Standard_Boolean.hxx>
#include <PrsMgr_PresentableObject.hxx>
-#include <PrsMgr_TypeOfPresentation3d.hxx>
+#include <SelectMgr_IndexedMapOfOwner.hxx>
+#include <SelectMgr_SequenceOfSelection.hxx>
#include <SelectMgr_Selection.hxx>
-#include <PrsMgr_PresentationManager3d.hxx>
#include <SelectMgr_SequenceOfOwner.hxx>
-#include <Quantity_NameOfColor.hxx>
-#include <Graphic3d_ZLayerId.hxx>
-#include <SelectMgr_IndexedMapOfOwner.hxx>
+
class SelectMgr_EntityOwner;
-class Prs3d_Presentation;
class Standard_NotImplemented;
class SelectMgr_SelectionManager;
-class Bnd_Box;
-
-class SelectMgr_SelectableObject;
-DEFINE_STANDARD_HANDLE(SelectMgr_SelectableObject, PrsMgr_PresentableObject)
-
-//! 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)
//! 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
//! completely) when some selection mode is activated not for the first time.
Standard_EXPORT void ClearSelections (const Standard_Boolean update = Standard_False);
- //! Returns the selection Selection having the selection mode aMode.
- Standard_EXPORT const Handle(SelectMgr_Selection)& Selection (const Standard_Integer aMode) const;
-
- //! Returns true if a selection corresponding to the
- //! selection mode theMode was computed for this object.
- Standard_EXPORT virtual Standard_Boolean HasSelection (const Standard_Integer theMode) const;
-
- //! Begins the iteration scanning for sensitive primitives.
- void Init()
- {
- mycurrent = 1;
- }
-
- //! Continues the iteration scanning for sensitive primitives.
- Standard_Boolean More() const
- {
- return mycurrent <= myselections.Length();
- }
+ //! Returns the selection having specified selection mode or NULL.
+ Standard_EXPORT const Handle(SelectMgr_Selection)& Selection (const Standard_Integer theMode) const;
- //! Continues the iteration scanning for sensitive primitives.
- void Next()
- {
- mycurrent++;
- }
+ //! Returns true if a selection corresponding to the selection mode theMode was computed for this object.
+ Standard_Boolean HasSelection (const Standard_Integer theMode) const { return !Selection (theMode).IsNull(); }
- //! Returns the current selection in this framework.
- const Handle(SelectMgr_Selection)& CurrentSelection() const
- {
- return myselections (mycurrent);
- }
+ //! Return the sequence of selections.
+ const SelectMgr_SequenceOfSelection& Selections() const { return myselections; }
Standard_EXPORT void ResetTransformation() Standard_OVERRIDE;
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 )
//! 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;
-
- //! Set AutoHilight property to true or false
- //! Sets up Transform Persistence Mode for this object
- Standard_EXPORT virtual void SetAutoHilight (const Standard_Boolean newAutoHilight);
+ //! 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; }
- Standard_EXPORT Handle(Prs3d_Presentation) GetHilightPresentation (const Handle(PrsMgr_PresentationManager3d)& TheMgr);
+ //! Set AutoHilight property to true or false.
+ virtual void SetAutoHilight (const Standard_Boolean theAutoHilight) { myAutoHilight = theAutoHilight; }
- 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);
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 common entity owner if the object is an assembly
- Standard_EXPORT const Handle(SelectMgr_EntityOwner)& GetAssemblyOwner() const;
-
- //! 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;
+ //! Returns common entity owner if the object is an assembly
+ Standard_EXPORT virtual const Handle(SelectMgr_EntityOwner)& GetAssemblyOwner() const;
+
+ //! Dumps the content of me into the stream
+ Standard_EXPORT virtual void DumpJson (Standard_OStream& theOStream, const Standard_Integer theDepth = -1) const Standard_OVERRIDE;
+
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;
}
+ //! 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(SelectMgr_EntityOwner) myAssemblyOwner;
- 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_Boolean myAutoHilight; //!< auto-highlighting flag defining
};
+DEFINE_STANDARD_HANDLE(SelectMgr_SelectableObject, PrsMgr_PresentableObject)
+
#endif // _SelectMgr_SelectableObject_HeaderFile