/********************************************************************** *< FILE: istdplug.h DESCRIPTION: Interfaces into some of the standard plug-ins that ship with MAX CREATED BY: Rolf Berteig HISTORY: created 20 January 1996 *> Copyright (c) 1994, All Rights Reserved. **********************************************************************/ #ifndef __ISTDPLUG__ #define __ISTDPLUG__ //---------------------------------------------------------------- // The following are parameter block IDs for procedural objects // Arc #define ARC_RADIUS 0 #define ARC_FROM 1 #define ARC_TO 2 #define ARC_PIE 3 // Box object #define BOXOBJ_LENGTH 0 #define BOXOBJ_WIDTH 1 #define BOXOBJ_HEIGHT 2 #define BOXOBJ_WSEGS 3 #define BOXOBJ_LSEGS 4 #define BOXOBJ_HSEGS 5 #define BOXOBJ_GENUVS 6 // Circle #define CIRCLE_RADIUS 0 // Cone #define CONE_RADIUS1 0 #define CONE_RADIUS2 1 #define CONE_HEIGHT 2 #define CONE_SEGMENTS 3 #define CONE_CAPSEGMENTS 4 #define CONE_SIDES 5 #define CONE_SMOOTH 6 #define CONE_SLICEON 7 #define CONE_PIESLICE1 8 #define CONE_PIESLICE2 9 #define CONE_GENUVS 10 // Cylinder #define CYLINDER_RADIUS 0 #define CYLINDER_HEIGHT 1 #define CYLINDER_SEGMENTS 2 #define CYLINDER_CAPSEGMENTS 3 #define CYLINDER_SIDES 4 #define CYLINDER_SMOOTH 5 #define CYLINDER_SLICEON 6 #define CYLINDER_PIESLICE1 7 #define CYLINDER_PIESLICE2 8 #define CYLINDER_GENUVS 9 // Donut #define DONUT_RADIUS1 0 #define DONUT_RADIUS2 1 // Ellipse #define ELLIPSE_LENGTH 0 #define ELLIPSE_WIDTH 1 // Hedra #define HEDRA_RADIUS 0 #define HEDRA_FAMILY 1 #define HEDRA_P 2 #define HEDRA_Q 3 #define HEDRA_SCALEP 4 #define HEDRA_SCALEQ 5 #define HEDRA_SCALER 6 #define HEDRA_VERTS 7 #define HEDRA_GENUVS 8 // Helix #define HELIX_RADIUS1 0 #define HELIX_RADIUS2 1 #define HELIX_HEIGHT 2 #define HELIX_TURNS 3 #define HELIX_BIAS 4 #define HELIX_DIRECTION 5 // NGon #define NGON_RADIUS 0 #define NGON_SIDES 1 #define NGON_CIRCULAR 2 // PatchGrid #define PATCHGRID_LENGTH 0 #define PATCHGRID_WIDTH 1 #define PATCHGRID_WSEGS 2 #define PATCHGRID_LSEGS 3 // Rain/snow #define RSPART_VPTPARTICLES 0 #define RSPART_DROPSIZE 1 #define RSPART_SPEED 2 #define RSPART_VARIATION 3 #define RSPART_TUMBLE 4 #define RSPART_SCALE 5 #define RSPART_DISPTYPE 6 #define RSPART_STARTTIME 7 #define RSPART_LIFETIME 8 #define RSPART_EMITTERWIDTH 9 #define RSPART_EMITTERHEIGHT 10 #define RSPART_HIDEEMITTER 11 #define RSPART_BIRTHRATE 12 #define RSPART_CONSTANT 13 #define RSPART_RENDER 14 // Rectangle #define RECTANGLE_LENGTH 0 #define RECTANGLE_WIDTH 1 // Sphere #define SPHERE_RADIUS 0 #define SPHERE_SEGS 1 #define SPHERE_SMOOTH 2 #define SPHERE_HEMI 3 #define SPHERE_SQUASH 4 #define SPHERE_RECENTER 5 #define SPHERE_GENUVS 6 // Star #define START_RADIUS1 0 #define START_RADIUS2 1 #define START_POINTS 2 #define START_DISTORT 3 // Tea Pot #define TEAPOT_RADIUS 0 #define TEAPOT_SEGS 1 #define TEAPOT_SMOOTH 2 #define TEAPOT_TEAPART 3 // Text #define TEXT_SIZE 0 // torus #define TORUS_RADIUS 0 #define TORUS_RADIUS2 1 #define TORUS_ROTATION 2 #define TORUS_TWIST 3 #define TORUS_SEGMENTS 4 #define TORUS_SIDES 5 #define TORUS_SMOOTH 6 #define TORUS_SLICEON 7 #define TORUS_PIESLICE1 8 #define TORUS_PIESLICE2 9 #define TORUS_GENUVS 10 // Tube #define TUBE_RADIUS 0 #define TUBE_RADIUS2 1 #define TUBE_HEIGHT 2 #define TUBE_SEGMENTS 3 #define TUBE_CAPSEGMENTS 4 #define TUBE_SIDES 5 #define TUBE_SMOOTH 6 #define TUBE_SLICEON 7 #define TUBE_PIESLICE1 8 #define TUBE_PIESLICE2 9 #define TUBE_GENUVS 10 // Grid #define GRIDHELP_LENGTH 0 #define GRIDHELP_WIDTH 1 #define GRIDHELP_GRID 2 //---------------------------------------------------------------- // The following are parameter block IDs for modifiers // Bend #define BEND_ANGLE 0 #define BEND_DIR 1 #define BEND_AXIS 2 #define BEND_DOREGION 3 #define BEND_FROM 4 #define BEND_TO 5 // Bomb #define BOMB_STRENGTH 0 #define BOMB_GRAVITY 1 #define BOMB_CHAOS 2 #define BOMB_DETONATION 3 // Deflector #define DEFLECTOR_BOUNCE 0 #define DEFLECTOR_WIDTH 1 #define DEFLECTOR_HEIGHT 2 // Displace (modifier and space warp object) #define DISPLACE_MAPTYPE 0 #define DISPLACE_UTILE 1 #define DISPLACE_VTILE 2 #define DISPLACE_WTILE 3 #define DISPLACE_BLUR 4 #define DISPLACE_USEMAP 5 #define DISPLACE_APPLYMAP 6 #define DISPLACE_STRENGTH 7 #define DISPLACE_DECAY 8 #define DISPLACE_CENTERLUM 9 #define DISPLACE_UFLIP 10 #define DISPLACE_VFLIP 11 #define DISPLACE_WFLIP 12 // Extrude #define EXTRUDE_AMOUNT 0 #define EXTRUDE_SEGS 1 #define EXTRUDE_CAPSTART 2 #define EXTRUDE_CAPEND 3 #define EXTRUDE_CAPTYPE 4 #define EXTRUDE_OUTPUT 5 #define EXTRUDE_MAPPING 6 // Gravity #define GRAVITY_STRENGTH 0 #define GRAVITY_DECAY 1 #define GRAVITY_TYPE 2 #define GRAVITY_DISPLENGTH 3 // Wind #define WIND_STRENGTH 0 #define WIND_DECAY 1 #define WIND_TYPE 2 #define WIND_DISPLENGTH 3 #define WIND_TURBULENCE 4 #define WIND_FREQUENCY 5 #define WIND_SCALE 6 // UVW map #define UVWMAP_MAPTYPE 0 #define UVWMAP_UTILE 1 #define UVWMAP_VTILE 2 #define UVWMAP_WTILE 3 #define UVWMAP_UFLIP 4 #define UVWMAP_VFLIP 5 #define UVWMAP_WFLIP 6 #define UVWMAP_CAP 7 // Noise mod #define NOISEMOD_SEED 0 #define NOISEMOD_SCALE 1 #define NOISEMOD_FRACTAL 2 #define NOISEMOD_ROUGH 3 #define NOISEMOD_ITERATIONS 4 #define NOISEMOD_ANIMATE 5 #define NOISEMOD_FREQ 6 #define NOISEMOD_PHASE 7 #define NOISEMOD_STRENGTH 8 // Optimize #define OPTMOD_RENDER 0 #define OPTMOD_VIEWS 1 #define OPTMOD_FACETHRESH1 2 #define OPTMOD_EDGETHRESH1 3 #define OPTMOD_BIAS1 4 #define OPTMOD_PRESERVEMAT1 5 #define OPTMOD_PRESERVESMOOTH1 6 #define OPTMOD_FACETHRESH2 7 #define OPTMOD_EDGETHRESH2 8 #define OPTMOD_BIAS2 9 #define OPTMOD_PRESERVEMAT2 10 #define OPTMOD_PRESERVESMOOTH2 11 #define OPTMOD_AUTOEDGE 12 // Volume selection modifier #define VOLSEL_LEVEL 0 #define VOLSEL_METHOD 1 #define VOLSEL_TYPE 2 #define VOLSEL_VOLUME 3 #define VOLSEL_INVERT 4 // Ripple/Wave space warp object and object space modifier #define RWAVE_AMPLITUDE 0 #define RWAVE_AMPLITUDE2 1 #define RWAVE_WAVELEN 2 #define RWAVE_PHASE 3 #define RWAVE_DECAY 4 #define RWAVE_CIRCLES 5 // These last three are only valid for space warp objects #define RWAVE_SEGMENTS 6 #define RWAVE_DIVISIONS 7 // Ripple/Wave binding (modifier) #define RWAVE_FLEX 0 // Skew #define SKEW_AMOUNT 0 #define SKEW_DIR 1 #define SKEW_AXIS 2 #define SKEW_DOREGION 3 #define SKEW_FROM 4 #define SKEW_TO 5 // Material modifier #define MATMOD_MATID 0 // Smoothing group modifier #define SMOOTHMOD_AUTOSMOOTH 0 #define SMOOTHMOD_THRESHOLD 1 #define SMOOTHMOD_SMOOTHBITS 2 // Normal modifier #define NORMMOD_UNIFY 0 #define NORMMOD_FLIP 1 // SurfRev (Lathe) modifier #define SURFREV_DEGREES 0 #define SURFREV_SEGS 1 #define SURFREV_CAPSTART 2 #define SURFREV_CAPEND 3 #define SURFREV_CAPTYPE 4 #define SURFREV_WELDCORE 5 #define SURFREV_OUTPUT 6 #define SURFREV_MAPPING 7 // Taper #define TAPER_AMT 0 #define TAPER_CRV 1 #define TAPER_AXIS 2 #define TAPER_EFFECTAXIS 3 #define TAPER_SYMMETRY 4 #define TAPER_DOREGION 5 #define TAPER_FROM 6 #define TAPER_TO 7 // Twist #define TWIST_ANGLE 0 #define TWIST_BIAS 1 #define TWIST_AXIS 2 #define TWIST_DOREGION 3 #define TWIST_FROM 4 #define TWIST_TO 5 //-- Text shape object interface ------------------------- // Use GetTextObjectInterface() to get a pointer to an // ITextObject given a pointer to an Object. // Flags passed to ChangeFont() #define TEXTOBJ_ITALIC (1<<1) #define TEXTOBJ_UNDERLINE (1<<2) class ITextObject { public: // Returns TRUE if string is changed. Can't change string if current font is not installed virtual BOOL ChangeText(TSTR string)=0; // Returns TRUE if font is successfully changed. virtual BOOL ChangeFont(TSTR name, DWORD flags)=0; // Get fount and string virtual TSTR GetFont()=0; virtual TSTR GetString()=0; // Get/Set styles virtual BOOL GetItalic()=0; virtual BOOL GetUnderline()=0; virtual void SetItalic(BOOL sw)=0; virtual void SetUnderline(BOOL sw)=0; }; //-- Controller interfaces ------------------------------- // Base key class class IKey { public: TimeValue time; DWORD flags; IKey() {time=0;flags=0;} }; //--- TCB keys ------------- class ITCBKey : public IKey { public: float tens, cont, bias, easeIn, easeOut; }; class ITCBFloatKey : public ITCBKey { public: float val; }; class ITCBPoint3Key : public ITCBKey { public: Point3 val; }; class ITCBRotKey : public ITCBKey { public: AngAxis val; }; class ITCBScaleKey : public ITCBKey { public: ScaleValue val; }; //--- Bezier keys ------------- class IBezFloatKey : public IKey { public: float intan, outtan; float val; }; class IBezPoint3Key : public IKey { public: Point3 intan, outtan; Point3 val; }; class IBezQuatKey : public IKey { public: Quat val; }; class IBezScaleKey : public IKey { public: Point3 intan, outtan; ScaleValue val; }; //--- Linear Keys -------------- class ILinFloatKey : public IKey { public: float val; }; class ILinPoint3Key : public IKey { public: Point3 val; }; class ILinRotKey : public IKey { public: Quat val; }; class ILinScaleKey : public IKey { public: ScaleValue val; }; // --- Flag bits for keys ------------------------------- // General flags #define IKEY_SELECTED (1<<0) #define IKEY_XSEL (1<<1) #define IKEY_YSEL (1<<2) #define IKEY_ZSEL (1<<3) #define IKEY_FLAGGED (1<<13) #define IKEY_TIME_LOCK (1<<14) // TCB specific key flags #define TCBKEY_QUATVALID (1<<4) // When this bit is set the angle/axis is derived from the quat instead of vice/versa // Bezier specific key flags #define BEZKEY_XBROKEN (1<<4) // Broken means not locked #define BEZKEY_YBROKEN (1<<5) #define BEZKEY_ZBROKEN (1<<6) // The in and out types are stored in bits 7-13 #define BEZKEY_NUMTYPEBITS 3 #define BEZKEY_INTYPESHIFT 7 #define BEZKEY_OUTTYPESHIFT (BEZKEY_INTYPESHIFT+BEZKEY_NUMTYPEBITS) #define BEZKEY_TYPEMASK 7 // Bezier tangent types #define BEZKEY_SMOOTH 0 #define BEZKEY_LINEAR 1 #define BEZKEY_STEP 2 #define BEZKEY_FAST 3 #define BEZKEY_SLOW 4 #define BEZKEY_USER 5 #define NUM_TANGENTTYPES 6 // This key is interpolated using arclength as the interpolation parameter #define BEZKEY_CONSTVELOCITY (1<<15) #define TangentsLocked(f,j) (!(f&(BEZKEY_XBROKEN<>BEZKEY_INTYPESHIFT)&BEZKEY_TYPEMASK) #define GetOutTanType(f) int(((f)>>BEZKEY_OUTTYPESHIFT)&BEZKEY_TYPEMASK) #define SetInTanType(f,t) {(f) = ((f)&(~(BEZKEY_TYPEMASK<