#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)
+ friend class SelectMgr_SelectionManager;
public:
-
- //! 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;
-
+ //! Clears all selections of the object
+ Standard_EXPORT virtual ~SelectMgr_SelectableObject();
+
+ //! 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 aMode is present in this framework.
- Standard_EXPORT Standard_Boolean HasSelection (const Standard_Integer aMode) const;
-
- //! Begins the iteration scanning for sensitive primitives.
- void Init();
-
- //! Continues the iteration scanning for sensitive primitives.
- Standard_Boolean More() const;
-
- //! Continues the iteration scanning for sensitive primitives.
- void Next();
-
- //! Returns the current selection in this framework.
- const Handle(SelectMgr_Selection)& CurrentSelection() const;
-
+ //! Returns the selection having specified selection mode or NULL.
+ Standard_EXPORT const Handle(SelectMgr_Selection)& Selection (const Standard_Integer theMode) const;
+
+ //! 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(); }
+
+ //! Return the sequence of selections.
+ const SelectMgr_SequenceOfSelection& Selections() const { return myselections; }
+
Standard_EXPORT void ResetTransformation() Standard_OVERRIDE;
//! Recomputes the location of the selection aSelection.
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 )
Standard_EXPORT virtual void ClearSelected();
-
+
+ //! Method that needs to be implemented when the object
+ //! manages selection and dynamic highlighting on its own.
+ //! Clears or invalidates dynamic highlight presentation.
+ //! By default it clears immediate draw of given presentation
+ //! manager.
+ 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, const Quantity_NameOfColor theColor, 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;
+ Standard_EXPORT virtual void HilightOwnerWithColor (const Handle(PrsMgr_PresentationManager)& thePM,
+ const Handle(Prs3d_Drawer)& theStyle,
+ const Handle(SelectMgr_EntityOwner)& theOwner);
- //! 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);
-
- Standard_EXPORT Handle(Prs3d_Presentation) GetSelectPresentation (const Handle(PrsMgr_PresentationManager3d)& TheMgr);
+ //! Set AutoHilight property to true or false.
+ virtual void SetAutoHilight (const Standard_Boolean theAutoHilight) { myAutoHilight = theAutoHilight; }
+ //! 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);
+
//! Set Z layer ID and update all presentations of the selectable object.
//! The layers mechanism allows drawing objects in higher layers in overlay of objects in lower layers.
Standard_EXPORT virtual void SetZLayer (const Graphic3d_ZLayerId theLayerId) 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 void UpdateSelection (const Standard_Integer theMode = -1);
-
- //! 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;
-
- //! Initializes the drawing tool theDrawer.
- Standard_EXPORT virtual void SetAttributes (const Handle(Prs3d_Drawer)& theDrawer);
-
- //! Returns the attributes settings.
- const Handle(Prs3d_Drawer)& Attributes() const;
-
- //! Clears settings provided by the drawing tool theDrawer.
- Standard_EXPORT virtual void UnsetAttributes();
-
- //! Initializes the hilight drawing tool theDrawer.
- Standard_EXPORT virtual void SetHilightAttributes (const Handle(Prs3d_Drawer)& theDrawer);
-
- //! Returns the hilight attributes settings.
- const Handle(Prs3d_Drawer)& HilightAttributes() const;
-
- //! Clears settings provided by the hilight drawing tool theDrawer.
- Standard_EXPORT virtual void UnsetHilightAttributes();
-
- //! Initializes theDrawer by default hilight settings.
- Standard_EXPORT static void InitDefaultHilightAttributes (const Handle(Prs3d_Drawer)& theDrawer);
-
+ void UpdateSelection (const Standard_Integer theMode = -1)
+ {
+ updateSelection (theMode);
+ }
+
//! 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
- Standard_EXPORT Bnd_Box BndBoxOfSelected (Handle(SelectMgr_IndexedMapOfOwner)& theOwners);
+ //! 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);
-friend class SelectMgr_SelectionManager;
+ //! 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;
- DEFINE_STANDARD_RTTI(SelectMgr_SelectableObject,PrsMgr_PresentableObject)
+ //! 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);
- SelectMgr_SequenceOfSelection myselections;
- Handle(Prs3d_Drawer) myDrawer;
- Handle(Prs3d_Drawer) myHilightDrawer;
- Handle(SelectMgr_EntityOwner) myAssemblyOwner;
-
+ //! Override global selection mode.
+ void setGlobalSelMode (const Standard_Integer theMode)
+ {
+ myGlobalSelMode = theMode > 0 ? theMode : 0;
+ }
-private:
+ //! 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);
- Standard_Integer mycurrent;
- Standard_Boolean myAutoHilight;
- Handle(Prs3d_Presentation) mySelectionPrs;
- Handle(Prs3d_Presentation) myHilightPrs;
+protected:
+ 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
};
-
-#include <SelectMgr_SelectableObject.lxx>
-
-
-
-
+DEFINE_STANDARD_HANDLE(SelectMgr_SelectableObject, PrsMgr_PresentableObject)
#endif // _SelectMgr_SelectableObject_HeaderFile