mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-05-16 10:54:53 +03:00
298 lines
11 KiB
C++
Executable File
298 lines
11 KiB
C++
Executable File
// File: NIS_View.hxx
|
|
// Created: 06.07.07 10:08
|
|
// Author: Alexander GRIGORIEV
|
|
// Copyright: Open Cascade 2007
|
|
|
|
|
|
#ifndef NIS_View_HeaderFile
|
|
#define NIS_View_HeaderFile
|
|
|
|
#include <Handle_NIS_InteractiveObject.hxx>
|
|
#include <V3d_OrthographicView.hxx>
|
|
#include <Standard_DefineHandle.hxx>
|
|
#include <NCollection_List.hxx>
|
|
#include <NCollection_Vector.hxx>
|
|
#include <Bnd_B3f.hxx>
|
|
#include <TColStd_PackedMapOfInteger.hxx>
|
|
#include <gp_XY.hxx>
|
|
|
|
class NIS_InteractiveContext;
|
|
class gp_Ax1;
|
|
|
|
/**
|
|
* Manager of a single window with OpenGL context, used by one or more
|
|
* NIS_InteractiveContext instances.
|
|
* This class inherits V3d_OrthograpicView therefore its instances can be used
|
|
* to display any object that is normally handled by Graphic3d/V3d/AIS classes.
|
|
* Also the standard view operations: Pan, Rotate, Zoom, mouse API, etc. are
|
|
* supported due to this inheritance.<p>
|
|
* The new services added by this class is the visualisation of
|
|
* NIS_InteractiveObject (i.e., accommodation of NIS_InteractiveContext
|
|
* instances). This visualisation is done by the method MyCallback that is
|
|
* called just before redrawing the scene by Graphic3d/OpenGl drivers.<p>
|
|
* The View instance can be understood as a collector of several interactive
|
|
* contexts that exist independently (do not interfere) though they output
|
|
* into the same OpenGL context. The contexts are:
|
|
* <ul>
|
|
* <li>AIS_InteractiveContext associated with the view by means of V3d_Viewer
|
|
* instance (the traditional AIS architecture);</li>
|
|
* <li>1st associated NIS_InteractiveContext</li>
|
|
* <li>2nd associated NIS_InteractiveContext</li>
|
|
* <li>...</li>
|
|
* </ul>
|
|
* The list of associated NIS_InteractiveContext can be modified by methods
|
|
* AddContext and RemoveContext.
|
|
*/
|
|
|
|
class NIS_View : public V3d_OrthographicView
|
|
{
|
|
public:
|
|
// ---------- PUBLIC METHODS ----------
|
|
|
|
|
|
/**
|
|
* Attach the view to the window.
|
|
*/
|
|
Standard_EXPORT NIS_View (const Handle_V3d_Viewer& theViewer,
|
|
const Handle_Aspect_Window& theWindow = NULL);
|
|
|
|
/**
|
|
* Attach the view to the window.
|
|
*/
|
|
Standard_EXPORT void SetWindow(const Handle_Aspect_Window &theWindow);
|
|
|
|
/**
|
|
* Indicate whether to draw hilighted objects on top of all other ones
|
|
*/
|
|
inline void SetHilightOnTop(const Standard_Boolean theTop = Standard_True)
|
|
{ myIsTopHilight = theTop; }
|
|
|
|
/**
|
|
* Indicate whether to hilight selected object dynamically
|
|
* By default dynamic hilight works on all objects independently on its
|
|
* selected/non-selected state.
|
|
* This behaviour differs from the behaviour of AIS interactive context,
|
|
* that doesn't hilight dynamically (on mouse movements) selected objects.
|
|
* In the case both context are used in the same view the behaviour of both
|
|
* context can be made consistent by setting this flag to False
|
|
*/
|
|
inline void SetDynHilightSelected (const Standard_Boolean
|
|
theHilight = Standard_True)
|
|
{ myDoHilightSelected = theHilight; }
|
|
|
|
/**
|
|
* Zoom the view to fit to visible objects size and positions.
|
|
* @param theCoef
|
|
* Relative margin in both X and Y dimensions. For example, value 1.0
|
|
* will fit to twice the actual size.
|
|
* @return
|
|
* True if operation performed, False if failed (most likely because of
|
|
* very big actual scale)
|
|
*/
|
|
Standard_EXPORT Standard_Boolean FitAll3d (const Quantity_Coefficient theCoef
|
|
= 0.01);
|
|
|
|
/**
|
|
* Gets bounding box covering objects displayed in viewer.
|
|
*/
|
|
Standard_EXPORT Bnd_B3f GetBndBox() const;
|
|
|
|
/**
|
|
* Gets bounding box covering objects displayed in viewer.
|
|
* If operation is fails when Xmax < Xmin abd Ymax < Ymin
|
|
*/
|
|
Standard_EXPORT void GetBndBox(Standard_Integer& theXMin,
|
|
Standard_Integer& theXMax,
|
|
Standard_Integer& theYMin,
|
|
Standard_Integer& theYMax ) const;
|
|
|
|
// /**
|
|
// * Destructor.
|
|
// */
|
|
// Standard_EXPORT virtual ~NIS_View ();
|
|
|
|
/**
|
|
* Set or unset the dynamically hilighted object, depending on the
|
|
* given mouse coordinates.
|
|
*/
|
|
Standard_EXPORT void DynamicHilight (const Standard_Integer theX,
|
|
const Standard_Integer theY);
|
|
|
|
/**
|
|
* Unhilights the hilighted object if it coincides with the given
|
|
* object instance.
|
|
*/
|
|
Standard_EXPORT void DynamicUnhilight(const Handle_NIS_InteractiveObject&);
|
|
|
|
/**
|
|
* Unhilights the currently hilighted object.
|
|
*/
|
|
inline void DynamicUnhilight() { DynamicUnhilight(myDynHilighted); }
|
|
|
|
/**
|
|
* Set or unset the selected (hilighted) state of the object that is under
|
|
* the coordinates theX, theY.
|
|
* @param theX
|
|
* X coordinate of the view window
|
|
* @param theY
|
|
* X coordinate of the view window
|
|
* @param isForceMult
|
|
* True if the effect of multi-Selection should be forced (e.g., when Shift
|
|
* is pressed).
|
|
* @param theRedraw
|
|
* True to redraw view automatically (default value).
|
|
*/
|
|
Standard_EXPORT void Select (const Standard_Integer theX,
|
|
const Standard_Integer theY,
|
|
const Standard_Boolean isForceMult
|
|
= Standard_False,
|
|
const Standard_Boolean theRedraw
|
|
= Standard_True);
|
|
|
|
/**
|
|
* Set or unset the selected (hilighted) state of the objects that are
|
|
* intersected by 2D box in the view
|
|
* @param theXmin
|
|
* left X coordinate of the view window
|
|
* @param theYmin
|
|
* lower Y coordinate of the view window
|
|
* @param theXmax
|
|
* right X coordinate of the view window
|
|
* @param theYmax
|
|
* upper Y coordinate of the view window
|
|
* @param isForceMult
|
|
* True if the effect of multi-Selection should be forced (e.g., when Shift
|
|
* is pressed).
|
|
* @param isFullyIncluded
|
|
* 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.
|
|
* @param theRedraw
|
|
* True to redraw view automatically (default value).
|
|
*/
|
|
Standard_EXPORT void Select (const Standard_Integer theXmin,
|
|
const Standard_Integer theYmin,
|
|
const Standard_Integer theXmax,
|
|
const Standard_Integer theYmax,
|
|
const Standard_Boolean isForceMult
|
|
= Standard_False,
|
|
const Standard_Boolean isFullyIncluded
|
|
= Standard_False,
|
|
const Standard_Boolean theRedraw
|
|
= Standard_True);
|
|
|
|
/**
|
|
* Set or unset the selected (hilighted) state of the objects that are
|
|
* intersected by 2D polygon in the view
|
|
* @param thePolygon
|
|
* defines the vertices of a free-form closed polygon without
|
|
* self-intersections. The last point should not coincide with the first
|
|
* point of the list. Points are interpreted as X and Y integer coordinates
|
|
* of the view window. Any two neighbor points should not be confused.
|
|
* @param isForceMult
|
|
* True if the effect of multi-Selection should be forced (e.g., when Shift
|
|
* is pressed).
|
|
* @param isFullyIncluded
|
|
* 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.
|
|
* @param theRedraw
|
|
* True to redraw view automatically (default value).
|
|
*/
|
|
Standard_EXPORT void Select (const NCollection_List<gp_XY> &thePolygon,
|
|
const Standard_Boolean isForceMult
|
|
= Standard_False,
|
|
const Standard_Boolean isFullyIncluded
|
|
= Standard_False,
|
|
const Standard_Boolean theRedraw
|
|
= Standard_True);
|
|
|
|
/**
|
|
* Interactive selection by mouse click. Selection itself is performed in each
|
|
* Interactive Context attached to this View, accordingto the local parameters
|
|
* (mode, filter) of selection in each context.
|
|
* @param theX
|
|
* X coordinate of mouse pointer in the window.
|
|
* @param theY
|
|
* Y coordinate of mouse pointer in the window.
|
|
* @return
|
|
* the selected object picked by the minimal intersection distance among
|
|
* all contexts attached to this View.
|
|
*/
|
|
Standard_EXPORT Handle_NIS_InteractiveObject
|
|
Pick (const Standard_Integer theX,
|
|
const Standard_Integer theY);
|
|
|
|
/**
|
|
* Interactive selection by mouse click. Selection itself is performed in each
|
|
* Interactive Context attached to this View, accordingto the local parameters
|
|
* (mode, filter) of selection in each context.
|
|
* @param theAxis
|
|
* 3D axis for objects selection
|
|
* @param theOver
|
|
* Overlap for the selecting axis
|
|
* @param isOnlySel
|
|
* If False, any displayed object can be picked, otherwise only selectable
|
|
* ones.
|
|
* @return
|
|
* the selected object picked by the minimal intersection distance among
|
|
* all contexts attached to this View.
|
|
*/
|
|
Standard_EXPORT Handle_NIS_InteractiveObject
|
|
Pick (const gp_Ax1& theAxis,
|
|
const Standard_Real theOver,
|
|
const Standard_Boolean isOnlySel);
|
|
|
|
/**
|
|
* Gets all objects detected by last call of Pick() method
|
|
*/
|
|
inline NCollection_Vector<NIS_InteractiveObject *> GetDetected() const
|
|
{ return myDetected; }
|
|
|
|
/**
|
|
* Obtain the IDs of ex-lists.
|
|
*/
|
|
inline TColStd_PackedMapOfInteger& GetExListId ()
|
|
{ return myExListId; }
|
|
|
|
protected:
|
|
// ---------- PROTECTED METHODS ----------
|
|
|
|
static int MyCallback (Aspect_Drawable /* Window ID */,
|
|
void* /* user data */,
|
|
Aspect_GraphicCallbackStruct* /* call data */);
|
|
|
|
/**
|
|
* Register an interactive context for this view.
|
|
*/
|
|
Standard_EXPORT void AddContext (NIS_InteractiveContext *);
|
|
|
|
/**
|
|
* Detach an interactive context from this view.
|
|
*/
|
|
Standard_EXPORT void RemoveContext (NIS_InteractiveContext *);
|
|
|
|
private:
|
|
// ---------- PRIVATE FIELDS ----------
|
|
|
|
NCollection_List<NIS_InteractiveContext *> myContexts;
|
|
Handle_NIS_InteractiveObject myDynHilighted;
|
|
Standard_Boolean myIsTopHilight : 1;
|
|
Standard_Boolean myDoHilightSelected : 1;
|
|
NCollection_Vector<NIS_InteractiveObject *> myDetected;
|
|
TColStd_PackedMapOfInteger myExListId;
|
|
|
|
friend class NIS_InteractiveContext;
|
|
|
|
public:
|
|
// Declaration of CASCADE RTTI
|
|
DEFINE_STANDARD_RTTI (NIS_View)
|
|
};
|
|
|
|
// Definition of HANDLE object using Standard_DefineHandle.hxx
|
|
//DEFINE_STANDARD_HANDLE (NIS_View, V3d_OrthographicView)
|
|
|
|
#include <Handle_NIS_View.hxx>
|
|
|
|
#endif
|