131 lines
4.0 KiB
C++
Executable File
131 lines
4.0 KiB
C++
Executable File
/**********************************************************************
|
||
*<
|
||
FILE: osnap.h
|
||
|
||
DESCRIPTION: Classes for Osnaps
|
||
|
||
CREATED BY: John Hutchinson
|
||
|
||
HISTORY: December 9, 1996
|
||
*> Copyright (c) 1994, All Rights Reserved.
|
||
**********************************************************************/
|
||
|
||
#ifndef _OSNAP_H_
|
||
#define _OSNAP_H_
|
||
|
||
#include "tab.h"
|
||
#define RESET 0
|
||
#define NEXT 1
|
||
#define ICON_WIDTH 32
|
||
|
||
#define HILITE_NORMAL (1<<0)
|
||
#define HILITE_BOX (1<<1)
|
||
#define HILITE_NODE (1<<2)//Not implemented
|
||
#define HILITE_CROSSHAIR (1<<3)
|
||
|
||
#define OSNAP_STATE _T("ObjectSnapPluginState")
|
||
|
||
//Some types
|
||
class Candidate
|
||
{
|
||
public:
|
||
Candidate(){};
|
||
Candidate(Point3* p, int s, int num=0, ...);
|
||
void SetMeshPoint(int which, const Point3 p);
|
||
~Candidate();
|
||
Point3 *pt;
|
||
int type;
|
||
int count;
|
||
Point3 *meshverts;
|
||
};
|
||
|
||
//typedef Tab<Point3> Point3Tab;
|
||
typedef Tab<Candidate *> CandidateTab;
|
||
typedef void (*SnapCallback) (Object* pobj, IPoint2 *p) ;
|
||
|
||
class OsnapMarker;
|
||
class HitMesh;
|
||
class IOsnapManager;
|
||
|
||
//The osnap class
|
||
//===========================================================================
|
||
|
||
class Osnap {
|
||
friend class OsnapHit;
|
||
friend class OsnapManager;
|
||
|
||
protected:
|
||
BOOL *m_active;
|
||
DllExport void _Snap(INode* inode, TimeValue t, ViewExp *vpt, IPoint2 *p, SnapInfo *snap);
|
||
DllExport Point3 _ReEvaluate(TimeValue t, OsnapHit *hit);
|
||
DllExport boolean IsActive();
|
||
DllExport void SetActive(int index, boolean state);
|
||
DllExport boolean GetActive(int index);
|
||
|
||
GraphicsWindow *m_hitgw;
|
||
|
||
//Point management.
|
||
//Some osnaps may want to maintain a list of potential hit points.
|
||
//Note that the points should be passed in in modeling space
|
||
DllExport void AddCandidate(Point3 *pt, int type = -1, int num = 0,...);
|
||
DllExport Point3 *GetCandidatePoint(int index);
|
||
DllExport void GetCandidateMesh(int index, HitMesh *m);
|
||
DllExport int GetCandidateType(int index);
|
||
// DllExport void AddCandidate(Point3 *pt);
|
||
DllExport void ClearCandidates();
|
||
DllExport int NumCandidates(){return point_candidates.Count();}
|
||
virtual DllExport Point3 ReEvaluate(TimeValue t, OsnapHit *hit, Object* pobj);
|
||
|
||
//Note: the following version uses an index into the candidate list
|
||
DllExport BOOL CheckPotentialHit(int ptindex, Point2 cursor);
|
||
//Note: the following version uses a remote matrix of points
|
||
DllExport BOOL CheckPotentialHit(Point3 *p, int ptindex, Point2 cursor);
|
||
int m_baseindex;//an index into the tool array
|
||
|
||
public:
|
||
|
||
DllExport Osnap();//constructor
|
||
DllExport virtual ~Osnap();
|
||
DllExport void Init();
|
||
|
||
virtual int numsubs(){return 1;}; //the number of subsnaps this guy has
|
||
virtual DllExport TCHAR *Category();//JH 01/04/98 {return NULL;}
|
||
virtual Class_ID ClassID() { return Class_ID( 0, 0); }
|
||
virtual BOOL UseCallbacks(){return FALSE;}
|
||
virtual int NumCallbacks(){return 0;}
|
||
virtual DllExport BOOL GetSupportedObject(INode *iNode, TimeValue t, ObjectState *os);
|
||
|
||
virtual TSTR *snapname(int index)=0; // the snap<61>s name to be displayed in the UI
|
||
virtual TSTR *tooltip(int index){return NULL;} // the snap<61>s name to be displayed in the UI
|
||
virtual boolean ValidInput(SClass_ID scid, Class_ID cid)=0;//the objects it supports
|
||
virtual OsnapMarker *GetMarker(int index)=0; // single object might contain subsnaps
|
||
virtual WORD HiliteMode(){return HILITE_NORMAL;}
|
||
// UI methods
|
||
virtual boolean BeginUI(HWND hwnd){return TRUE;}
|
||
virtual void EndUI(HWND hwnd){};
|
||
virtual HBITMAP getTools()=0;
|
||
virtual HBITMAP getMasks()=0;
|
||
virtual void Snap(Object* pobj, IPoint2 *p, TimeValue t){};
|
||
virtual BOOL HitTest(Object* pobj, IPoint2 *p, TimeValue t){return TRUE;}
|
||
virtual SnapCallback GetSnapCallback( int sub){ return NULL;}
|
||
virtual WORD AccelKey(int index)=0;
|
||
|
||
|
||
protected://data
|
||
IOsnapManager *theman;
|
||
// Point3Tab point_candidates; //this will hold the point candidates
|
||
CandidateTab point_candidates; //this will hold the point candidates
|
||
|
||
public://data
|
||
// INode *m_inode;
|
||
// ViewExp *m_vpt;
|
||
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
|
||
#endif // _OSNAP_H_
|