2017-04-17 06:17:10 -06:00

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