📄 patchobj.h
字号:
/**********************************************************************
*<
FILE: patchobj.h
DESCRIPTION: Defines Patch Mesh Object
CREATED BY: Tom Hudson
HISTORY: created 21 June 1995
*> Copyright (c) 1995, All Rights Reserved.
**********************************************************************/
#ifndef __PATCHOBJ__
#define __PATCHOBJ__
#include "Max.h"
#include "namesel.h"
#include "meshlib.h"
#include "patchlib.h"
#include "snap.h"
#include "istdplug.h"
#include "sbmtlapi.h"
extern CoreExport Class_ID patchObjectClassID;
extern HINSTANCE hInstance;
// Named selection set list types for PatchObject
#define NS_PO_VERT 0
#define NS_PO_EDGE 1
#define NS_PO_PATCH 2
// These are values for selLevel.
#define PO_OBJECT 0
#define PO_VERTEX 1
#define PO_EDGE 2
#define PO_PATCH 3
#define CID_EP_BIND CID_USER + 203
#define CID_EP_EXTRUDE CID_USER + 204
#define CID_EP_BEVEL CID_USER + 205
// References
#define EP_MASTER_CONTROL_REF 0
#define EP_VERT_BASE_REF 1
class PatchObject;
class EP_BindMouseProc : public MouseCallBack {
private:
PatchObject *pobj;
IObjParam *ip;
IPoint2 om;
BitArray knotList;
protected:
HCURSOR GetTransformCursor();
BOOL HitAKnot(ViewExp *vpt, IPoint2 *p, int *vert);
BOOL HitASegment(ViewExp *vpt, IPoint2 *p, int *Seg);
BOOL HitTest( ViewExp *vpt, IPoint2 *p, int type, int flags, int subType );
BOOL AnyHits( ViewExp *vpt ) { return vpt->NumSubObjHits(); }
public:
EP_BindMouseProc(PatchObject* spl, IObjParam *i) { pobj=spl; ip=i; }
int proc(
HWND hwnd,
int msg,
int point,
int flags,
IPoint2 m );
};
class EP_BindCMode : public CommandMode {
private:
ChangeFGObject fgProc;
EP_BindMouseProc eproc;
PatchObject* pobj;
// int type; // See above
public:
EP_BindCMode(PatchObject* spl, IObjParam *i) :
fgProc((ReferenceTarget*)spl), eproc(spl,i) {pobj=spl;}
int Class() { return MODIFY_COMMAND; }
int ID() { return CID_EP_BIND; }
MouseCallBack *MouseProc(int *numPoints) { *numPoints=2; return &eproc; }
ChangeForegroundCallback *ChangeFGProc() { return &fgProc; }
BOOL ChangeFG( CommandMode *oldMode ) { return oldMode->ChangeFGProc() != &fgProc; }
void EnterMode();
void ExitMode();
// void SetType(int type) { this->type = type; eproc.SetType(type); }
};
class EP_ExtrudeMouseProc : public MouseCallBack {
private:
MoveTransformer moveTrans;
PatchObject *po;
Interface *ip;
IPoint2 om;
Point3 ndir;
public:
EP_ExtrudeMouseProc(PatchObject* o, IObjParam *i) : moveTrans(i) {po=o;ip=i;}
int proc(HWND hwnd, int msg, int point, int flags, IPoint2 m);
};
class EP_ExtrudeSelectionProcessor : public GenModSelectionProcessor {
protected:
HCURSOR GetTransformCursor();
public:
EP_ExtrudeSelectionProcessor(EP_ExtrudeMouseProc *mc, PatchObject *o, IObjParam *i)
: GenModSelectionProcessor(mc,(BaseObject*) o,i) {}
};
class EP_ExtrudeCMode : public CommandMode {
private:
ChangeFGObject fgProc;
EP_ExtrudeSelectionProcessor mouseProc;
EP_ExtrudeMouseProc eproc;
PatchObject* po;
public:
EP_ExtrudeCMode(PatchObject* o, IObjParam *i) :
fgProc((ReferenceTarget *)o), mouseProc(&eproc,o,i), eproc(o,i) {po=o;}
int Class() { return MODIFY_COMMAND; }
int ID() { return CID_EP_EXTRUDE; }
MouseCallBack *MouseProc(int *numPoints) { *numPoints=2; return &mouseProc; }
ChangeForegroundCallback *ChangeFGProc() { return &fgProc; }
BOOL ChangeFG( CommandMode *oldMode ) { return oldMode->ChangeFGProc() != &fgProc; }
void EnterMode();
void ExitMode();
};
class EP_BevelMouseProc : public MouseCallBack {
private:
MoveTransformer moveTrans;
PatchObject *po;
Interface *ip;
IPoint2 om;
public:
EP_BevelMouseProc(PatchObject* o, IObjParam *i) : moveTrans(i) {po=o;ip=i;}
int proc(HWND hwnd, int msg, int point, int flags, IPoint2 m);
};
class EP_BevelSelectionProcessor : public GenModSelectionProcessor {
protected:
HCURSOR GetTransformCursor();
public:
EP_BevelSelectionProcessor(EP_BevelMouseProc *mc, PatchObject *o, IObjParam *i)
: GenModSelectionProcessor(mc,(BaseObject*) o,i) {}
};
class EP_BevelCMode : public CommandMode {
private:
ChangeFGObject fgProc;
EP_BevelSelectionProcessor mouseProc;
EP_BevelMouseProc eproc;
PatchObject* po;
public:
EP_BevelCMode(PatchObject* o, IObjParam *i) :
fgProc((ReferenceTarget *)o), mouseProc(&eproc,o,i), eproc(o,i) {po=o;}
int Class() { return MODIFY_COMMAND; }
int ID() { return CID_EP_BEVEL; }
MouseCallBack *MouseProc(int *numPoints) { *numPoints=3; return &mouseProc; }
ChangeForegroundCallback *ChangeFGProc() { return &fgProc; }
BOOL ChangeFG( CommandMode *oldMode ) { return oldMode->ChangeFGProc() != &fgProc; }
void EnterMode();
void ExitMode();
};
class POPickPatchAttach :
public PickModeCallback,
public PickNodeCallback {
public:
PatchObject *po;
POPickPatchAttach() {po=NULL;}
BOOL HitTest(IObjParam *ip,HWND hWnd,ViewExp *vpt,IPoint2 m,int flags);
BOOL Pick(IObjParam *ip,ViewExp *vpt);
void EnterMode(IObjParam *ip);
void ExitMode(IObjParam *ip);
HCURSOR GetHitCursor(IObjParam *ip);
BOOL Filter(INode *node);
PickNodeCallback *GetFilter() {return this;}
BOOL RightClick(IObjParam *ip,ViewExp *vpt) {return TRUE;}
};
// The Base Patch class
class PatchObject: public GeomObject, IPatchOps, IPatchSelect, IPatchSelectData, ISubMtlAPI, AttachMatDlgUser {
friend class PatchObjectRestore;
friend class POXFormProc;
friend class POPickPatchAttach;
public:
static HWND hSelectPanel, hOpsPanel, hSurfPanel;
static BOOL rsSel, rsOps, rsSurf; // rollup states (FALSE = rolled up)
static MoveModBoxCMode *moveMode;
static RotateModBoxCMode *rotMode;
static UScaleModBoxCMode *uscaleMode;
static NUScaleModBoxCMode *nuscaleMode;
static SquashModBoxCMode *squashMode;
static SelectModBoxCMode *selectMode;
//watje command mode for the bind
static EP_BindCMode *bindMode;
//watje command mode for the extrude
static EP_ExtrudeCMode *extrudeMode;
static EP_BevelCMode *bevelMode;
// for the tessellation controls
static BOOL settingViewportTess; // are we doing viewport or renderer
static BOOL settingDisp; // are we doing viewport or renderer
static ISpinnerControl *uSpin;
static ISpinnerControl *vSpin;
static ISpinnerControl *edgeSpin;
static ISpinnerControl *angSpin;
static ISpinnerControl *distSpin;
static ISpinnerControl *mergeSpin;
static ISpinnerControl *matSpin;
// General rollup controls
static ISpinnerControl *weldSpin;
static ISpinnerControl *stepsSpin;
//3-18-99 watje to support render steps
static ISpinnerControl *stepsRenderSpin;
static POPickPatchAttach pickCB;
static BOOL patchUIValid;
static BOOL opsUIValid;
static int attachMat;
static BOOL condenseMat;
// Load reference version
int loadRefVersion;
Interval geomValid;
Interval topoValid;
Interval texmapValid;
Interval selectValid;
DWORD validBits; // for the remaining constant channels
void CopyValidity(PatchObject *fromOb, ChannelMask channels);
// inherited virtual methods for Reference-management
RefResult NotifyRefChanged(Interval changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message );
static IObjParam *ip;
PatchMesh patch;
MasterPointControl *masterCont; // Master track controller
Tab<Control*> vertCont;
Tab<Control*> vecCont;
// Remembered info
PatchMesh *rememberedPatch; // NULL if using all selected patches
int rememberedIndex;
int rememberedData;
// Editing stuff:
BOOL doingHandles;
BOOL showMesh;
BOOL lockedHandles;
BOOL propagate;
BOOL inExtrude,inBevel;
// Named selection sets:
GenericNamedSelSetList vselSet; // Vertex
GenericNamedSelSetList eselSet; // Edge
GenericNamedSelSetList pselSet; // Patch
CoreExport PatchObject();
CoreExport PatchObject(PatchObject &from);
CoreExport PatchObjectInit(); // Constructor helper
CoreExport ~PatchObject();
CoreExport PatchObject &operator=(PatchObject &from);
// inherited virtual methods:
// From BaseObject
CoreExport int HitTest(TimeValue t, INode* inode, int type, int crossing, int flags, IPoint2 *p, ViewExp *vpt);
CoreExport int HitTest(TimeValue t, INode* inode, int type, int crossing, int flags, IPoint2 *p, ViewExp *vpt, ModContext* mc);
CoreExport int Display(TimeValue t, INode* inode, ViewExp *vpt, int flags);
CoreExport void Snap(TimeValue t, INode* inode, SnapInfo *snap, IPoint2 *p, ViewExp *vpt);
CoreExport CreateMouseCallBack* GetCreateMouseCallBack();
CoreExport RefTargetHandle Clone(RemapDir& remap = NoRemap());
// From Object
CoreExport Interval ObjectValidity(TimeValue t);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -