OCC Main Page | Visualization | Toolkits | Packages | Class Hierarchy | Data Structures | File List | Data Fields | Globals

Visualization
TKNIS
NIS


NIS_InteractiveContext Class Reference

#include <NIS_InteractiveContext.hxx>


Public Types

enum  SelectionMode { Mode_NoSelection = 0, Mode_Normal, Mode_Additive, Mode_Exclusive }

Public Member Functions

Standard_EXPORT NIS_InteractiveContext ()
virtual Standard_EXPORT ~NIS_InteractiveContext ()
const Handle_NIS_InteractiveObject & GetObject (const Standard_Integer theID) const
Standard_Integer NbObjects ()
Standard_Integer NbDrawers ()
const Handle_NCollection_IncAllocator & Allocator () const
Management of Views
Standard_EXPORT void AttachView (const Handle_NIS_View &theView)
Standard_EXPORT void DetachView (const Handle_NIS_View &theView)
Management of Objects
Standard_EXPORT void Display (const Handle_NIS_InteractiveObject &theObj, const Handle_NIS_Drawer &theDrawer=NULL, const Standard_Boolean isUpdateViews=Standard_True)
Standard_EXPORT void Erase (const Handle_NIS_InteractiveObject &theObj, const Standard_Boolean isUpdateViews=Standard_True)
Standard_EXPORT void Remove (const Handle_NIS_InteractiveObject &theObj, const Standard_Boolean isUpdateViews=Standard_True)
Standard_EXPORT void DisplayAll (const Standard_Boolean isUpdateViews=Standard_True)
Standard_EXPORT void EraseAll (const Standard_Boolean isUpdateViews=Standard_True)
Standard_EXPORT void RemoveAll (const Standard_Boolean isUpdateViews=Standard_True)
Standard_EXPORT void UpdateViews ()
Standard_EXPORT void GetBox (Bnd_B3f &theBox, const NIS_View *theView) const
Selection API
const Handle_NIS_SelectFilter & GetFilter () const
void SetFilter (const Handle_NIS_SelectFilter &theFilter)
SelectionMode GetSelectionMode () const
void SetSelectionMode (const SelectionMode theMode)
Standard_EXPORT Standard_Boolean ProcessSelection (const Handle_NIS_InteractiveObject &O, const Standard_Boolean isMultiple=Standard_False)
Standard_EXPORT void ProcessSelection (const TColStd_PackedMapOfInteger &map, const Standard_Boolean isMultiple=Standard_False)
Standard_EXPORT Standard_Boolean SetSelected (const Handle_NIS_InteractiveObject &theObj, const Standard_Boolean isSelected=Standard_True)
Standard_EXPORT void SetSelected (const TColStd_PackedMapOfInteger &map, const Standard_Boolean isAdded=Standard_False)
Standard_EXPORT Standard_Boolean IsSelected (const Handle_NIS_InteractiveObject &theOb)
Standard_EXPORT void ClearSelected ()
const TColStd_PackedMapOfInteger & GetSelected ()
Standard_EXPORT void SetSelectable (const TColStd_PackedMapOfInteger &IDs, const Standard_Boolean isSelectable)
Standard_Boolean IsSelectable (const Standard_Integer objID) const

Protected Member Functions

Standard_EXPORT void redraw (const Handle_NIS_View &theView, const NIS_Drawer::DrawType theType)
Standard_EXPORT Standard_Real selectObject (Handle_NIS_InteractiveObject &theSel, const gp_Ax1 &theAxis, const Standard_Real theOver, const Standard_Boolean isOnlySelectable=Standard_True) const
Standard_EXPORT Standard_Boolean selectObjects (TColStd_PackedMapOfInteger &mapObj, const Bnd_B3f &theBox, const gp_Trsf &theTrf, const gp_Trsf &theTrfInv, const Standard_Boolean isFullyIn) const

Private Attributes

NCollection_Vector< Handle_NIS_InteractiveObject > myObjects
NCollection_List< Handle_NIS_View > myViews
NCollection_Map< Handle_NIS_Drawer > myDrawers
TColStd_PackedMapOfInteger myMapObjects [3]
TColStd_PackedMapOfInteger myMapNonSelectableObjects
Handle_NIS_SelectFilter mySelectFilter
SelectionMode mySelectionMode
Handle_NCollection_IncAllocator myAllocator


Detailed Description

InteractiveContext is the central NIS structure that stores and manages all InteractiveObject instances as well as the Drawers for their visualisation. There may be one or more Views referred by an InteractiveContext instance. Also there may be one or more InteractiveContext instances referring the same View. However the latter case is not typical (see NIS_View description).
To add or remove a View in a Context, use methods AttachView() and DetachView().

The main purpose of class NIS_InteractiveContext is allocation and management of NIS_InteractiveObject instances.

An InteractiveObject should be added to the Context by a call to method Display(). After that (not before) it becomes possible to:

All methods managing InteractiveObject instances have the optional parameter 'isUpdateViews'. When it is set to True (default), the modification of the object brings about the immediate update of the presentation (the corresponding Drawer is flagged to recompute presentations). However, for block operations when many InteractiveObject instances are affected it is usually better to delay this recalculation till a definite moment in the end of updates. Then you can set the optional parameter to False and in the end - call the method UpdateViews of the NIS_InteractiveContext.

Typical scheme of usage:

   const Handle(NIS_InteractiveContext) aContext = new NIS_InteractiveContext;
const Handle(NIS_View) aView = new NIS_View(...);
aContext->AttachView (aView);
....
for (; ;) {
const Handle(NIS_InteractiveObject) anObject = new ...
aContext->Display (anObject, NULL, Standard_False);
...
}
aContext->UpdateViews();
Additional services provided by InteractiveContext:


Member Enumeration Documentation

enum NIS_InteractiveContext::SelectionMode
 

Enumeration values:
Mode_NoSelection  Seelction is totally disabled.
Mode_Normal  Selected are added to or removed from list.
Mode_Additive  Selected are added to the list of selected.
Mode_Exclusive  Selected are removed from the list.


Constructor & Destructor Documentation

Standard_EXPORT NIS_InteractiveContext::NIS_InteractiveContext  ) 
 

Empty constructor.

virtual Standard_EXPORT NIS_InteractiveContext::~NIS_InteractiveContext  )  [virtual]
 

Destructor.


Member Function Documentation

const Handle_NCollection_IncAllocator& NIS_InteractiveContext::Allocator  )  const [inline]
 

Query the memory allocator associated with InteractiveContext instance.

Standard_EXPORT void NIS_InteractiveContext::AttachView const Handle_NIS_View &  theView  ) 
 

Associate this Context with the given View.

Standard_EXPORT void NIS_InteractiveContext::ClearSelected  ) 
 

Reset all previous selection.

Standard_EXPORT void NIS_InteractiveContext::DetachView const Handle_NIS_View &  theView  ) 
 

Stop the association of the Context with the given View.

Standard_EXPORT void NIS_InteractiveContext::Display const Handle_NIS_InteractiveObject &  theObj,
const Handle_NIS_Drawer &  theDrawer = NULL,
const Standard_Boolean  isUpdateViews = Standard_True
 

Make the given interactive object visible in the current context. If the object is not yet added to this context, it is added. Therefore this method should follow the creation of an InteractiveObject instance before it can be displayed.

Parameters:
theObj Interactive object instance.
theDrawer If this parameter is NULL, the default drawer is used for theObj, defined by the object type. Otherwise the given Drawer (must be present in this context) is used for theObj. Use the parameter to change the presentation of theObj.
isUpdateViews If True, the drawer receives isUpdate flag, then it will recompute the presentations when Redraw event happens. You can leave the parameter to False if you have to make a number of similar calls, then you would call UpdateViews() in the end.

Standard_EXPORT void NIS_InteractiveContext::DisplayAll const Standard_Boolean  isUpdateViews = Standard_True  ) 
 

Make all stored InteractiveObject instances visible, equivalent to calling method Display() for all contained objects.

Parameters:
isUpdateViews If True, the drawer receives isUpdate flag, then it will recompute the presentations when Redraw event happens. You can leave the parameter to False if you have to make a number of similar calls, then you would call UpdateViews() in the end.

Standard_EXPORT void NIS_InteractiveContext::Erase const Handle_NIS_InteractiveObject &  theObj,
const Standard_Boolean  isUpdateViews = Standard_True
 

Make the given object invisible in the current InteractiveContext.

Parameters:
theObj Interactive object instance. Must be already added to this context.
isUpdateViews If True, the drawer receives isUpdate flag, then it will recompute the presentations when Redraw event happens. You can leave the parameter to False if you have to make a number of similar calls, then you would call UpdateViews() in the end.

Standard_EXPORT void NIS_InteractiveContext::EraseAll const Standard_Boolean  isUpdateViews = Standard_True  ) 
 

Make all stored InteractiveObject instances invisible, equivalent to calling method Erase() for all contained objects.

Parameters:
isUpdateViews If True, the drawer receives isUpdate flag, then it will recompute the presentations when Redraw event happens. You can leave the parameter to False if you have to make a number of similar calls, then you would call UpdateViews() in the end.

Standard_EXPORT void NIS_InteractiveContext::GetBox Bnd_B3f &  theBox,
const NIS_View theView
const
 

Find the bounding box of all Objects displayed (visible) in the given View.

Parameters:
theBox [out] Bounding box, updated (not reinitialized!) by the object boxes.
theView View instance where the objects are displayed.

const Handle_NIS_SelectFilter& NIS_InteractiveContext::GetFilter  )  const [inline]
 

Query the current selection filter. Use the method SetFilter to install it. By default returns a NULL handle.

const Handle_NIS_InteractiveObject& NIS_InteractiveContext::GetObject const Standard_Integer  theID  )  const [inline]
 

Query the InteractiveObject instance by its ID.

const TColStd_PackedMapOfInteger& NIS_InteractiveContext::GetSelected  )  [inline]
 

Query the set of selected objects.

Returns:
Map of integer IDs of objects.

SelectionMode NIS_InteractiveContext::GetSelectionMode  )  const [inline]
 

Query the current selection mode.

Standard_Boolean NIS_InteractiveContext::IsSelectable const Standard_Integer  objID  )  const [inline]
 

Return True if the object can be selected (processing by SetSelected methods), or False if can not be.

Returns:
Selectable state of the object.

Standard_EXPORT Standard_Boolean NIS_InteractiveContext::IsSelected const Handle_NIS_InteractiveObject &  theOb  ) 
 

Query if the given object is selected.

Standard_Integer NIS_InteractiveContext::NbDrawers  )  [inline]
 

Query the total number of Drawers instances.

Standard_Integer NIS_InteractiveContext::NbObjects  )  [inline]
 

Query the total number of InteractiveObject instances. This number can be smaller than the greatest object ID, therefore you should not iterate till this number using GetObject; use class NIS_ObjectsIterator instead.

Standard_EXPORT void NIS_InteractiveContext::ProcessSelection const TColStd_PackedMapOfInteger &  map,
const Standard_Boolean  isMultiple = Standard_False
 

Process the selection of multiple objects. Equivalent to the other ProcessSelection method, on a set of objects. Particularly, the current selection mode is respected.

Parameters:
map Container of IDs of objects to be processed
isMultiple If True, then the objects are not automatically deselected.

Standard_EXPORT Standard_Boolean NIS_InteractiveContext::ProcessSelection const Handle_NIS_InteractiveObject &  O,
const Standard_Boolean  isMultiple = Standard_False
 

Set or unset the selected state of the object, also changing its hilight status.
If mySelectionMode == Mode_NoSelection this method does nothing (returns False always).
If the given object is NULL (e.g., if the mouse was clicked on empty area), then the current selection is cleared (modes Normal and Additive only).
The selection algorithm with respect to the given object is defined by the current selection mode :

  • Mode_Normal - the selection state is toggled
  • Mode_Additive - the object is always added to the selection
  • Mode_Exclusive - the object is always removed from the selection
This method does not update the views.
Parameters:
O Object to be selected or deselected
isMultiple If True, then the objects are not automatically deselected.
Returns:
True if the selection status has been changed, False if nothing changed

Standard_EXPORT void NIS_InteractiveContext::redraw const Handle_NIS_View &  theView,
const NIS_Drawer::DrawType  theType
[protected]
 

Standard_EXPORT void NIS_InteractiveContext::Remove const Handle_NIS_InteractiveObject &  theObj,
const Standard_Boolean  isUpdateViews = Standard_True
 

Remove the given object from its Interactive context.

Parameters:
theObj Interactive object instance. Must be already added to this context.
isUpdateViews If True, the drawer receives isUpdate flag, then it will recompute the presentations when Redraw event happens. You can leave the parameter to False if you have to make a number of similar calls, then you would call UpdateViews() in the end.

Standard_EXPORT void NIS_InteractiveContext::RemoveAll const Standard_Boolean  isUpdateViews = Standard_True  ) 
 

Clean the context of its contained objects. Drawers are not destroyed however all presentations should become empty.

Parameters:
isUpdateViews If True, the drawer receives isUpdate flag, then it will recompute the presentations when Redraw event happens. You can leave the parameter to False if you have to make a number of similar calls, then you would call UpdateViews() in the end.

Standard_EXPORT Standard_Real NIS_InteractiveContext::selectObject Handle_NIS_InteractiveObject &  theSel,
const gp_Ax1 &  theAxis,
const Standard_Real  theOver,
const Standard_Boolean  isOnlySelectable = Standard_True
const [protected]
 

Detect the object selected by the given ray.

Parameters:
theSel [out] The selected object that has the lowest ray distance.
theAxis Selection ray
theOver Thickness of the selecting ray
isOnlySelectable If False, any displayed object can be picked, otherwise only selectable ones.
Returns:
The ray distance of the intersection point between the ray and theSel.

Standard_EXPORT Standard_Boolean NIS_InteractiveContext::selectObjects TColStd_PackedMapOfInteger &  mapObj,
const Bnd_B3f &  theBox,
const gp_Trsf &  theTrf,
const gp_Trsf &  theTrfInv,
const Standard_Boolean  isFullyIn
const [protected]
 

Build a list of objects that are inside or touched by an oriented box.

Parameters:
mapObj [out] Container of object IDs, updated by detected objects.
theBox 3D box of selection
theTrf Position/Orientation of the box (for box-box intersections)
theTrfInv Inverted Position/Orientation of the box (for box-object intersections)
isFullyIn True if only those objects are processed that are fully inside the selection rectangle. False if objects fully or partially included in the rectangle are processed.
Returns:
True if at least one object was selected.

void NIS_InteractiveContext::SetFilter const Handle_NIS_SelectFilter &  theFilter  )  [inline]
 

Install a selection filter.

Standard_EXPORT void NIS_InteractiveContext::SetSelectable const TColStd_PackedMapOfInteger &  IDs,
const Standard_Boolean  isSelectable
 

Define objects that can be selected by no means (isSelectable = false), or make the objects selectable (isSelectable = true).

Parameters:
IDs Container of IDs of objects to be set as selectable or not selectable
isSelectable If False, the given IDs are made non-selectable by SetSelected methods, If True, the given IDs are made selectable.

Standard_EXPORT void NIS_InteractiveContext::SetSelected const TColStd_PackedMapOfInteger &  map,
const Standard_Boolean  isAdded = Standard_False
 

Set the selection. Previously selected objects are deselected if they are not included in the given map.

Parameters:
map Container of IDs of objects to be selected
isAdded If True, the given IDs are added to the current selection (nothing is deselected). If False (default) - the previous selection is forgotten.

Standard_EXPORT Standard_Boolean NIS_InteractiveContext::SetSelected const Handle_NIS_InteractiveObject &  theObj,
const Standard_Boolean  isSelected = Standard_True
 

Set or unset the selected state of the object, also changing its hilight status.
This method does not update the views.

Parameters:
theObj Object to be selected or deselected
isSelected true if the object should be selected, False - if deselected.
Returns:
True if the selection status has been changed, False if noithing changed

void NIS_InteractiveContext::SetSelectionMode const SelectionMode  theMode  )  [inline]
 

Set the selection mode.

Standard_EXPORT void NIS_InteractiveContext::UpdateViews  ) 
 

This method signal that the presenation should be refreshed in all Drawers and in all Views.


Field Documentation

Handle_NCollection_IncAllocator NIS_InteractiveContext::myAllocator [private]
 

Allocator for arbitrary data associated with objects and drawers.

NCollection_Map<Handle_NIS_Drawer> NIS_InteractiveContext::myDrawers [private]
 

Container of Drawers. There should be one or more Drawers for each type of contained InteractiveObject.

TColStd_PackedMapOfInteger NIS_InteractiveContext::myMapNonSelectableObjects [private]
 

Objects contained in this map are ignored by SetSelected methods, these objects are not selectable.

TColStd_PackedMapOfInteger NIS_InteractiveContext::myMapObjects[3] [private]
 

Three maps indicating the state of contained objects:

  • #0 - normally presented objects
  • #1 - hilighted objects (i.e., selected)
  • #2 - transparent objects
    Each object can have only one entry in these maps.

NCollection_Vector<Handle_NIS_InteractiveObject> NIS_InteractiveContext::myObjects [private]
 

Container of InteractiveObject instances.

Handle_NIS_SelectFilter NIS_InteractiveContext::mySelectFilter [private]
 

Instance of selection filter used for interactive selections.

SelectionMode NIS_InteractiveContext::mySelectionMode [private]
 

Current mode of selection.

NCollection_List<Handle_NIS_View> NIS_InteractiveContext::myViews [private]
 

List of Views.


The documentation for this class was generated from the following file:
Generated on Mon Aug 25 13:55:53 2008 for OpenCASCADE by  doxygen 1.4.1