98 lines
3.2 KiB
C++
Executable File
98 lines
3.2 KiB
C++
Executable File
/*
|
|
* MouseTool.h - scriptable mouse CommandModes for MAX
|
|
*
|
|
* Copyright © Autodesk, Inc, 1998. John Wainwright.
|
|
*
|
|
*/
|
|
|
|
#ifndef _H_MOUSETOOL
|
|
#define _H_MOUSETOOL
|
|
|
|
class MouseTool;
|
|
class MSPlugin;
|
|
|
|
// tool context local indexes - MUST match order in Parser::tool_def()
|
|
enum { cl_viewPoint, cl_worldPoint, cl_worldDist, cl_worldAngle, cl_gridPoint, cl_gridDist, cl_gridAngle, cl_nodeTM, cl_shift, cl_ctrl, cl_alt, cl_lbutton, cl_mbutton, cl_rbutton, };
|
|
|
|
/* --------- MouseTool command mode & callback classes ------------- */
|
|
|
|
class MouseToolCallBack : public MouseCallBack
|
|
{
|
|
public:
|
|
MouseTool* tool;
|
|
IPoint2 last_mp;
|
|
Point3 last_wp;
|
|
Point3 last_cpp;
|
|
|
|
MouseToolCallBack() {}
|
|
int proc(HWND hwnd, int msg, int point, int flags, IPoint2 m);
|
|
int mouse_proc(ViewExp *vpt, int msg, int point, int flags, IPoint2 m, Matrix3& mat, BOOL createMouseCallback = FALSE);
|
|
void set_context_locals(ViewExp* vpx, int snap, int point, int flag, IPoint2 mp, Point3 cpp, Matrix3& mat);
|
|
void reset_context_locals();
|
|
};
|
|
|
|
#define MOUSE_TOOL_COMMAND 7364
|
|
#define CID_MOUSE_TOOL CID_USER + 45237
|
|
|
|
class MouseToolCommandMode : public CommandMode, public CommandModeChangedCallback
|
|
{
|
|
public:
|
|
MouseToolCallBack proc;
|
|
BOOL active;
|
|
TCHAR* prompt;
|
|
int num_points;
|
|
int cmd_class;
|
|
|
|
int Class() { return cmd_class; }
|
|
int ID() { return CID_MOUSE_TOOL; }
|
|
MouseCallBack *MouseProc(int *points) { *points = num_points; return &proc; }
|
|
ChangeForegroundCallback *ChangeFGProc() { return NULL; }
|
|
BOOL ChangeFG(CommandMode *oldMode) { return FALSE; }
|
|
void EnterMode();
|
|
void ExitMode();
|
|
void ModeChanged(CommandMode *oldM, CommandMode *newM);
|
|
};
|
|
|
|
/* ------------- MouseTool MAXScript value class -------------- */
|
|
|
|
visible_class (MouseTool)
|
|
|
|
class MouseTool : public Value
|
|
{
|
|
public:
|
|
Value* name; // tool name
|
|
HashTable* local_scope; // local name space
|
|
Value** locals; // local var array
|
|
Value** local_inits; // " " " init vals
|
|
int local_count; // " " count
|
|
HashTable* handlers; // handler tables
|
|
short flags; // tool flags
|
|
int cmd_class; // command mode class
|
|
int num_points; // number of points
|
|
Value* prompt; // staus line prompt if non-null
|
|
BOOL init_values; // whether to init ctrl/local values on (re)open
|
|
BOOL end_tool_mode; // signals end of tool cmd mode
|
|
MouseToolCommandMode cmdmode; // my command mode
|
|
// command mode locals...
|
|
Value* result; // tool result
|
|
Value* snap_mode; // #2D or #3D or #none
|
|
MSPlugin* plugin; // current plugin under manip if non-NULL
|
|
|
|
MouseTool(short iflags);
|
|
void init(Value* name, int local_count, Value** inits, HashTable* local_scope, HashTable* handlers);
|
|
~MouseTool();
|
|
|
|
classof_methods (MouseTool, Value);
|
|
void collect() { delete this; }
|
|
void gc_trace();
|
|
ScripterExport void sprin1(CharStream* s);
|
|
|
|
BOOL call_event_handler(Value* handler, Value** arg_list, int count, BOOL enable_redraw = TRUE);
|
|
void init_locals();
|
|
|
|
virtual Value* get_property(Value** arg_list, int count);
|
|
virtual Value* set_property(Value** arg_list, int count);
|
|
};
|
|
|
|
#endif
|