MouseCallBack Class Reference

#include <mouseman.h>

Class Description

Allows the developer to capture and process the mouse events entered by the user.

To create a mouse call back, derive a sub class of this class and implement the proc() function.

See also
CommandMode
+ Inheritance diagram for MouseCallBack:

Public Member Functions

virtual ~MouseCallBack ()
 
virtual CoreExport int proc (HWND hwnd, int msg, int point, int flags, IPoint2 m)
 Called to handle the mouse event processing whenever a mouse event happens. More...
 
virtual void pan (IPoint2 offset)
 
virtual int override (int mode)
 Override the default drag mode. More...
 
void setMouseManager (MouseManager *mm)
 
MouseManagergetMouseManager ()
 
virtual BOOL SupportTransformGizmo ()
 Transform Gizmo Interface. More...
 
virtual void DeactivateTransformGizmo ()
 Deactivates the transform gizmo. More...
 
virtual BOOL SupportAutoGrid ()
 Returns FALSE by default, and needs to be overridden by the mouse procs wishing to utilize the AutoGrid feature. More...
 
virtual BOOL TolerateOrthoMode ()
 Returns FALSE by default. More...
 
- Public Member Functions inherited from BaseInterfaceServer
virtual UtilExport BaseInterfaceGetInterface (Interface_ID id)
 
virtual UtilExport int NumInterfaces () const
 
virtual UtilExport BaseInterfaceGetInterfaceAt (int i) const
 
virtual UtilExport ~BaseInterfaceServer ()
 
- Public Member Functions inherited from InterfaceServer
virtual UtilExport ~InterfaceServer ()
 Destructor. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from MaxHeapOperators
static UtilExport voidoperator new (size_t size)
 Standard new operator used to allocate objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e)
 Standard new operator used to allocate objects if there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new (size_t size, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate objects that takes the type of memory, filename and line number where the new was called If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate objects that takes the filename and line number where the new was called If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new (size_t size, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate objects that takes extra flags to specify special operations If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new[] (size_t size)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new[] (size_t size, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new[] (size_t size, int block_type, const char *filename, int line)
 New operator used to allocate arrays of objects. More...
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, const char *filename, int line)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned. More...
 
static UtilExport voidoperator new[] (size_t size, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, an exception will be thrown. More...
 
static UtilExport voidoperator new[] (size_t size, const std::nothrow_t &e, unsigned long flags)
 New operator used to allocate arrays of objects If there is insufficient memory, NULL will be returned. More...
 
static UtilExport void operator delete (void *ptr)
 Standard delete operator used to deallocate an object If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an object If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an object that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an object that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete (void *ptr, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an object that takes extra flags to specify special operations If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete[] (void *ptr)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e)
 Standard delete operator used to deallocate an array of objects If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete[] (void *ptr, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, int block_type, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the type of memory, filename and line number where the delete was called If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, const char *filename, int line)
 Delete operator used to deallocate an array of objects that takes the filename and line number where the delete was called If the pointer is invalid, nothing will happen. More...
 
static UtilExport void operator delete[] (void *ptr, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport void operator delete[] (void *ptr, const std::nothrow_t &e, unsigned long flags)
 Delete operator used to deallocate an array of objects that takes extra flags to specify special operations If the pointer is invalid, an exception will be thrown. More...
 
static UtilExport voidoperator new (size_t size, void *placement_ptr)
 Placement new operator. More...
 
static UtilExport void operator delete (void *ptr, void *placement_ptr)
 Placement delete operator. More...
 
static UtilExport voidaligned_malloc (size_t size, size_t alignment)
 Allocates memory on a specified alignment boundary. More...
 
static UtilExport voidaligned_realloc (void *ptr, size_t size, size_t alignment)
 Reallocates memory on a specified alignment boundary. More...
 
static UtilExport void aligned_free (void *ptr)
 Frees a block of memory that was allocated with aligned_malloc/aligned_realloc. More...
 
- Protected Attributes inherited from BaseInterfaceServer
Tab< BaseInterface * > interfaces
 

Constructor & Destructor Documentation

virtual ~MouseCallBack ( )
inlinevirtual
25 {}

Member Function Documentation

virtual CoreExport int proc ( HWND  hwnd,
int  msg,
int  point,
int  flags,
IPoint2  m 
)
virtual

Called to handle the mouse event processing whenever a mouse event happens.

Parameters
hwndThe window handle of the window in which the user has clicked. It is one of the viewports to which an interface can be obtained from the system. To get such interface, the window handle should be passes to the functions Interface::GetViewport() as the input. Developers should call Interface::ReleaseViewport() once they are done with the viewport interface.
msgThis message describes the type of event that occurred. See Mouse Call Back Flags.
pointThe point number. this is 0 for the first click, 1 for the second, etc.
flagsThese flags describe the state of the mouse buttons. See Mouse Call Back Flags.
mThe 2D screen point on which that the user has clicked. Methods in the viewport interface allow this point to be converted into a world space ray or a 3D view space point. A world space ray can be intersected with the active construction plane which results in a point on the active construction plane. See Class ViewExp.
Returns
TRUE, indicating the proc should continue to process points; or FALSE, meaning to stop processing points. If a plug-in supplied a large number of points in a command mode that uses this mouse proc, FALSE can be returned to abort the processing before all the points have been entered.

Reimplemented in SSPasteTangentMouseProc, SSCopyTangentMouseProc, SSRefineConnectMouseProc, SSBindMouseProc, SSExtendMouseProc, SSTrimMouseProc, SSBooleanMouseProc, SSCrossSectionMouseProc, SSCreateLineMouseProc, SSVertInsertMouseProc, SSVertConnectMouseProc, SSCrossInsertMouseProc, SSSegRefineMouseProc, SSSegBreakMouseProc, SSChamferMouseProc, SSFilletMouseProc, SSOutlineMouseProc, TransformCtrlApparatus, EP_PasteTangentMouseProc, EP_CopyTangentMouseProc, EP_VertWeldMouseProc, EP_CreatePatchMouseProc, DataEntryMouseProc, EP_CreateVertMouseProc, TransformModBox, EP_BevelMouseProc, SelectionProcessor, EP_NormalFlipMouseProc, EP_ExtrudeMouseProc, EP_BindMouseProc, and MouseToolCallBack.

virtual void pan ( IPoint2  offset)
inlinevirtual

Reimplemented in SelectionProcessor.

54 { UNUSED_PARAM(offset); }
#define UNUSED_PARAM(x)
Definition: BuildWarnings.h:18
virtual int override ( int  mode)
inlinevirtual

Override the default drag mode.

Most plug-ins will not need to replace the default implementation of this method. This function changes the way the messages are sent based on the sequence of mouse inputs by the user. The normal flow of the messages is described as follows: First the user clicks the mouse button and a MOUSE_POINT message is generated. The user then drags the mouse with the button down, resulting in a series of MOUSE_MOVE messages to be sent. When the user releases the mouse button, a MOUSE_POINT messages is generated. Then the mouse is moved again, resulting in a new series of MOUSE_MOVE messages to be sent again. Unlike the first time, when the user clicks the mouse button here, a point message is NOT generated at this point until the button is released. All future points are then only sent after the mouse button has been pressed and released. The default implementation is { return mode; }, and a sample program using the override method (using CLICK_DOWN_POINT) can be found in /MAXSDK/SAMPLES/OBJECTS/SPLINE.CPP.

Parameters
modeThe current drag mode from the list Mouse Drag Modes.
Returns
The given mouse drag mode.

Reimplemented in SSExtendMouseProc, SSTrimMouseProc, SSBooleanMouseProc, SSCrossSectionMouseProc, SSCreateLineMouseProc, and SSVertInsertMouseProc.

75 { return mode; }
void setMouseManager ( MouseManager mm)
inline

This method is used internally.

78 { mouseMan = mm; }
MouseManager* getMouseManager ( )
inline

This method is used internally.

81 { return mouseMan; }
virtual BOOL SupportTransformGizmo ( )
inlinevirtual

Transform Gizmo Interface.

Returns TRUE if the mouse proc supports a transform gizmo, FALSE if not. This method and DeactivateTransformGizmo() are normally implemented by the selection processor and the existing mouse procs. However, special implementation is possible as well. For that, because the transform gizmo depends on the Command Mode, the MouseCallback itself decides if it supports the use of the transform gizmo or not. When the node axis (or transform gizmo) is redrawn, the system will ask the command mode's mouse proc whether or not it supports transform gizmos. If it does, it will draw a gizmo instead of the regular node axis. The same procedure happens with the main selection processor in 3ds Max. When the mouse is moved, the selection processor itself asks if the MouseCallback supports transform gizmos or not. If so, it will hit test the gizmo in a MOUSE_FREEMOVE or MOUSE_POINT message. If any of the transform gizmos hit test flags are passed into the mouse procs hit tester, the transform gizmo should be hit tested as well (using Interface::HitTestTransformGizmo()). The default Implementation of this function is {return FALSE;}. When hit testing the gizmo, different flags will be passed in:

  • HIT_TRANSFORMGIZMO is passed in on a MOUSE_FREEMOVE message so that the axis is hit tested and it highlights if it is hit, but it doesn't actually switch the transform mode.
  • In case of a MOUSE_POINT, the flag will be HIT_SWITCH_GIZMO, and if the axis is hit, the 'hit' transform mode will be pushed on the transform mode stack.
  • When the mouse is released (MOUSE_POINT, pt==1 or MOUSE_ABORT), then the axis constraint should pop back to the existing one, and DeactivateTransformGizmo() is called. Inside DeactivateTransformGizmo() the normal implementation is to pop the axis mode back. It should also maintain a flag (set it if HitTestTransformGizmo() returns TRUE and the HIT_SWITCH_GIZMO is set, and clear it in DeactivateTransformGizmo()). The flag is needed because you should not call Interface::PopAxisMode() unless the axis mode was previously popped.

Reimplemented in SubControlSelectionProcessor, and SubModSelectionProcessor.

117 { return FALSE; }
virtual void DeactivateTransformGizmo ( )
inlinevirtual

Deactivates the transform gizmo.

See the note in SupportTransformGizmo().

Reimplemented in SubControlSelectionProcessor, and SubModSelectionProcessor.

121 {}
virtual BOOL SupportAutoGrid ( )
inlinevirtual

Returns FALSE by default, and needs to be overridden by the mouse procs wishing to utilize the AutoGrid feature.

If overridden, it should return TRUE and also make the appropriate calls to the ViewExp::TrackImpliciGrid(), ViewExp::CommitImplicitGrid() and ViewExp::ReleaseImplicitGrid() from the body of their classes proc() method. For sample code see /MAXSDK/SAMPLES/MODIFIERS/SURFWRAP/SURFWRAP.CPP.

130 {return FALSE;}
virtual BOOL TolerateOrthoMode ( )
inlinevirtual

Returns FALSE by default.

Should return TRUE if Ortho Mode makes sense for this creation, FALSE otherwise. In general it returns TRUE only for splines and such.

135 {return FALSE; }