📄 splshape.h
字号:
/**********************************************************************
*<
FILE: splshape.h
DESCRIPTION: Defines a Spline Object Class
CREATED BY: Tom Hudson
HISTORY: created 23 February 1995
*> Copyright (c) 1995, All Rights Reserved.
**********************************************************************/
#ifndef __SPLSHAPE_H__
#define __SPLSHAPE_H__
#include "Max.h"
#include "shape.h"
#include "istdplug.h"
#include "sbmtlapi.h"
extern CoreExport Class_ID splineShapeClassID;
extern HINSTANCE hInstance;
// The boolean operations
#define BOOL_UNION 0
#define BOOL_SUBTRACTION 1
#define BOOL_INTERSECTION 2
// The mirror operations
#define MIRROR_HORIZONTAL 3
#define MIRROR_VERTICAL 4
#define MIRROR_BOTH 5
// Flags used for boolean polygons
#define POLYBOOL (1 << 0)
#define POLYOUTSIDE (1 << 1)
#define POLYINSIDE (1 << 2)
// References
#define ES_MASTER_CONTROL_REF 0
#define ES_VERT_BASE_REF 1
// These are values for selLevel.
#define SS_OBJECT 0
#define SS_VERTEX 1
#define SS_SEGMENT 2
#define SS_SPLINE 3
#define CID_OUTLINE CID_USER + 201
#define CID_SEGBREAK CID_USER + 202
#define CID_SEGREFINE CID_USER + 203
#define CID_VERTCONNECT CID_USER + 204
#define CID_VERTINSERT CID_USER + 205
#define CID_BOOLEAN CID_USER + 206
#define CID_CREATELINE CID_USER + 207
#define CID_CROSSINSERT CID_USER + 208
#define CID_FILLET CID_USER + 209
#define CID_CHAMFER CID_USER + 210
#define CID_TRIM CID_USER + 211
#define CID_EXTEND CID_USER + 212
//watje
#define CID_SPLINEBIND CID_USER + 213
#define CID_REFINECONNECT CID_USER + 214
// General-purpose shape point table -- Maintains point table for each of n polygons
class SplineShapePointTab {
public:
int polys;
int *pUsed; // Tells whether polygon is affected
Point3Tab *ptab;
IntTab *ktab;
IntTab *ltab;
SplineShapePointTab();
~SplineShapePointTab();
void Empty();
void Zero();
void MakeCompatible(BezierShape& shape, BOOL clear=TRUE);
SplineShapePointTab& operator=(SplineShapePointTab& from);
BOOL IsCompatible(BezierShape &shape);
IOResult Save(ISave *isave);
IOResult Load(ILoad *iload);
};
class SplineShapeVertexDelta {
public:
SplineShapePointTab dtab;
void SetSize(BezierShape& shape, BOOL load=TRUE);
void Empty() { dtab.Empty(); }
void Zero() { dtab.Zero(); }
void SetPoint(int poly, int i, const Point3& p) { dtab.pUsed[poly] = 1; dtab.ptab[poly][i] = p; }
void SetKType(int poly, int i, int k) { dtab.pUsed[poly] = 1; dtab.ktab[poly][i] = k; }
void SetLType(int poly, int i, int l) { dtab.pUsed[poly] = 1; dtab.ltab[poly][i] = l; }
void Move(int poly, int i, const Point3& p) { dtab.pUsed[poly] = 1; dtab.ptab[poly][i] += p; }
void Apply(BezierShape& shape);
void UnApply(BezierShape& shape);
void ClearUsed(int poly) { dtab.pUsed[poly] = 0; }
void SetUsed(int poly) { dtab.pUsed[poly] = 1; }
int IsUsed(int poly) { return dtab.pUsed[poly] ? 1 : 0; }
SplineShapeVertexDelta& operator=(SplineShapeVertexDelta& from) { dtab = from.dtab; return *this; }
void ApplyHandlesAndZero(BezierShape &shape, int handlePoly, int handleVert);
BOOL IsCompatible(BezierShape &shape) { return dtab.IsCompatible(shape); }
IOResult Save(ISave *isave);
IOResult Load(ILoad *iload);
};
class NamedVertSelSetList {
public:
Tab<ShapeVSel*> sets;
Tab<TSTR*> names;
CoreExport ~NamedVertSelSetList();
ShapeVSel &operator[](int i) {return *sets[i];}
int Count() {return sets.Count();}
CoreExport void AppendSet(ShapeVSel &nset,TSTR &name);
CoreExport BOOL DeleteSet(TSTR &name);
CoreExport void DeleteSet(int i);
CoreExport IOResult Load(ILoad *iload);
CoreExport IOResult Save(ISave *isave);
CoreExport void SetSize(BezierShape& shape);
CoreExport NamedVertSelSetList& operator=(NamedVertSelSetList& from);
CoreExport void DeleteSetElements(ShapeVSel &set,int m=1);
CoreExport int FindSet(TSTR &name);
CoreExport BOOL RenameSet(TSTR &oldName, TSTR &newName);
};
class NamedSegSelSetList {
public:
Tab<ShapeSSel*> sets;
Tab<TSTR*> names;
CoreExport ~NamedSegSelSetList();
ShapeSSel &operator[](int i) {return *sets[i];}
int Count() {return sets.Count();}
CoreExport void AppendSet(ShapeSSel &nset,TSTR &name);
CoreExport BOOL DeleteSet(TSTR &name);
CoreExport void DeleteSet(int i);
CoreExport IOResult Load(ILoad *iload);
CoreExport IOResult Save(ISave *isave);
CoreExport void SetSize(BezierShape& shape);
CoreExport NamedSegSelSetList& operator=(NamedSegSelSetList& from);
CoreExport void DeleteSetElements(ShapeSSel &set,int m=1);
CoreExport int FindSet(TSTR &name);
CoreExport BOOL RenameSet(TSTR &oldName, TSTR &newName);
};
class NamedPolySelSetList {
public:
Tab<ShapePSel*> sets;
Tab<TSTR*> names;
CoreExport ~NamedPolySelSetList();
ShapePSel &operator[](int i) {return *sets[i];}
int Count() {return sets.Count();}
CoreExport void AppendSet(ShapePSel &nset,TSTR &name);
CoreExport BOOL DeleteSet(TSTR &name);
CoreExport void DeleteSet(int i);
CoreExport IOResult Load(ILoad *iload);
CoreExport IOResult Save(ISave *isave);
CoreExport void SetSize(BezierShape& shape);
CoreExport NamedPolySelSetList& operator=(NamedPolySelSetList& from);
CoreExport void DeleteSetElements(ShapePSel &set,int m=1);
CoreExport int FindSet(TSTR &name);
CoreExport BOOL RenameSet(TSTR &oldName, TSTR &newName);
};
// Named selection set list types for SplineShape
#define NS_SS_VERT 0
#define NS_SS_SEG 1
#define NS_SS_POLY 2
class SSNamedSelSetList {
public:
int type;
void *ptr;
SSNamedSelSetList(int type, void *ptr) {this->type=type; this->ptr=ptr;}
CoreExport int Count();
CoreExport TSTR* Names(int i);
};
class IntersectPt; // Internal class
class SplineShape : public ShapeObject, ISplineOps, ISplineSelect, ISplineSelectData, ISubMtlAPI, AttachMatDlgUser {
friend BOOL CALLBACK SplineGenDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
friend BOOL CALLBACK SplineSelectDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
friend BOOL CALLBACK SplineOpsDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
friend BOOL CALLBACK SplineSurfDlgProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
friend class SSXFormProc;
friend class SSOutlineCMode;
friend class SSFilletCMode;
friend class SSChamferCMode;
friend class SSSegBreakCMode;
friend class SSSegRefineCMode;
friend class SSCrossInsertCMode;
friend class SSVertConnectCMode;
friend class SSVertInsertCMode;
friend class SSCreateLineCMode;
friend class SSBooleanCMode;
friend class SSTrimCMode;
friend class SSExtendCMode;
friend class SSOutlineMouseProc;
friend class SSFilletMouseProc;
friend class SSChamferMouseProc;
friend class SSSegBreakMouseProc;
friend class SSSegRefineMouseProc;
friend class SSCrossInsertMouseProc;
friend class SSVertConnectMouseProc;
friend class SSVertInsertMouseProc;
friend class SSCreateLineMouseProc;
friend class SSBooleanMouseProc;
friend class SSTrimMouseProc;
friend class SSExtendMouseProc;
friend class SplineShapeRestore;
friend class SSRightMenu;
friend class SSMBackspaceUser;
friend class SSIBackspaceUser;
friend class SSPickSplineAttach;
friend class SSAttachHitByName;
friend class SplineShapeClassDesc;
//watje
friend class SSBindMouseProc;
friend class SSBindCMode;
friend class SSRefineConnectMouseProc;
friend class SSRefineConnectCMode;
private:
static HWND hGenPanel, hSelectPanel, hOpsPanel, hSurfPanel;
static BOOL rsGen, 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;
static SSOutlineCMode *outlineMode;
static SSFilletCMode *filletMode;
static SSChamferCMode *chamferMode;
static SSSegBreakCMode *segBreakMode;
static SSSegRefineCMode *segRefineMode;
static SSCrossInsertCMode *crossInsertMode;
static SSVertConnectCMode *vertConnectMode;
static SSVertInsertCMode *vertInsertMode;
static SSCreateLineCMode *createLineMode;
static SSBooleanCMode *booleanMode;
static SSTrimCMode *trimMode;
static SSExtendCMode *extendMode;
static ISpinnerControl *divSpin;
static ISpinnerControl *outlineSpin;
static ISpinnerControl *filletSpin;
static ISpinnerControl *chamferSpin;
static ISpinnerControl *weldSpin;
static ISpinnerControl *crossSpin;
static ISpinnerControl *stepsSpin;
static ISpinnerControl *thickSpin;
static ISpinnerControl *matSpin;
//2-1-99 watje
static ISpinnerControl *selectAreaSpin;
static ICustButton *iUnion;
static ICustButton *iSubtraction;
static ICustButton *iIntersection;
static ICustButton *iMirrorHorizontal;
static ICustButton *iMirrorVertical;
static ICustButton *iMirrorBoth;
static BOOL inOutline;
static BOOL inFillet;
static BOOL inChamfer;
static BOOL inSegBreak;
static int boolType;
static int mirrorType;
static SSPickSplineAttach pickCB;
static BOOL segUIValid;
static int attachMat;
static BOOL condenseMat;
Interval geomValid;
Interval topoValid;
Interval selectValid;
DWORD validBits; // for the remaining constant channels
void CopyValidity(SplineShape *fromOb, ChannelMask channels);
// Remembered info
BezierShape *rememberedShape; // NULL if using all selected verts
int rememberedPoly;
int rememberedIndex;
int rememberedData;
// Vertex insertion information
Spline3D *insertSpline;
BezierShape *insertShape;
int insertPoly;
int insertVert;
INode *insertNode;
Matrix3 insertTM; // Transform for the insert node
// Create line data
BezierShape *createShape;
INode *createNode;
Matrix3 createTM; // Transform for the create node
// Boolean info
int boolPoly1;
// Transform stuff
BOOL doingHandles;
int handlePoly;
int handleVert;
// Fillet and chamfer upper limit
float FCLimit;
// Load reference version
int loadRefVersion;
protected:
// inherited virtual methods for Reference-management
CoreExport RefResult NotifyRefChanged(Interval changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message );
// Special flag -- If TRUE, overrides for vertex tick display
BOOL drawTicks;
BOOL generalUIDisplayed;
public:
static IObjParam *ip;
BezierShape shape;
// Local storage of steps value -- Retains steps value when shape is adaptive
int steps;
BOOL showVertNumbers;
BOOL SVNSelectedOnly;
NamedVertSelSetList vselSet;
NamedSegSelSetList sselSet;
NamedPolySelSetList pselSet;
MasterPointControl *masterCont; // Master track controller
Tab<Control*> cont;
CoreExport SplineShape();
CoreExport SplineShape(SplineShape &from);
CoreExport SplineShapeInit(); // Constructor helper
CoreExport ~SplineShape();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -