123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649 |
- /**********************************************************************
- *<
- 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<<j)))
- #define SetTangentLock(f,j,l) {if (l) (f)=(f)&(~(BEZKEY_XBROKEN<<j)); else (f)|=(BEZKEY_XBROKEN<<j);}
- // Macros to access hybrid tangent types
- #define GetInTanType(f) int(((f)>>BEZKEY_INTYPESHIFT)&BEZKEY_TYPEMASK)
- #define GetOutTanType(f) int(((f)>>BEZKEY_OUTTYPESHIFT)&BEZKEY_TYPEMASK)
- #define SetInTanType(f,t) {(f) = ((f)&(~(BEZKEY_TYPEMASK<<BEZKEY_INTYPESHIFT)))|(t<<BEZKEY_INTYPESHIFT);}
- #define SetOutTanType(f,t) {(f) = ((f)&(~(BEZKEY_TYPEMASK<<BEZKEY_OUTTYPESHIFT)))|(t<<BEZKEY_OUTTYPESHIFT);}
- // Track flags
- #define TFLAG_CURVESEL (1<<0)
- #define TFLAG_RANGE_UNLOCKED (1<<1)
- #define TFLAG_LOOPEDIN (1<<3)
- #define TFLAG_LOOPEDOUT (1<<4)
- #define TFLAG_COLOR (1<<5) // Set for Bezier Point3 controlers that are color controllers
- #define TFLAG_HSV (1<<6) // Set for color controls that interpolate in HSV
- //-------------------------------------------------------
- // This is an interface into either a TCB or Bezier key
- // frame controller. It is up to the client to make sure
- // that the IKey* point to a key of the approriate derived
- // class based on the ClassID() of the controller.
- class IKeyControl {
- public:
- // Total number of keys.
- virtual int GetNumKeys()=0;
-
- // Sets the number of keys allocated.
- // May add blank keys or delete existing keys
- virtual void SetNumKeys(int n)=0;
-
- // Fill in 'key' with the ith key
- virtual void GetKey(int i,IKey *key)=0;
-
- // Set the ith key
- virtual void SetKey(int i,IKey *key)=0;
- // Append a new key onto the end. Note that the
- // key list will ultimately be sorted by time. Returns
- // the key's index.
- virtual int AppendKey(IKey *key)=0;
- // If any changes are made that would require the keys to be sorted
- // this method should be called.
- virtual void SortKeys()=0;
- // Access track flags
- virtual DWORD &GetTrackFlags()=0;
- };
- // To get a pointer to the above interface given a pointer to a controller
- // use the macro defined in animtbl.h: GetKeyControlInterface()
- //-----------------------------------------------------------
- // A plug-in can register itself to read a particular APP_DATA
- // chunk when a 3DS file is loaded. If a chunk is encountered
- // that matches a registered plug-in, that plug-in will be
- // asked to create an instance of itself based on the contents
- // of the APP_DATA chunk.
- class TriObject;
- class ObjectDataReaderCallback {
- public:
- // Chunk name
- virtual char *DataName()=0;
- // Create an instance of an object based on the data and the original mesh object
- virtual Object *ReadData(TriObject *obj, void *data, DWORD len)=0;
- virtual void DeleteThis()=0;
- };
-
- CoreExport void RegisterObjectAppDataReader(ObjectDataReaderCallback *cb);
-
- CoreExport Object *ObjectFromAppData(TriObject *obj, char *name, void *data, DWORD len);
- // Note about 3DS App Data:
- // If app data is encountered and no plug-in has registered to
- // convert it, then it is just hung off the object (or INode in
- // the case of KXP app data).
- // For object app data, TriObject's super class and class ID are used
- // to identify the chunk and the sub ID is set to 0.
- // For node app data, INode's super class and class ID are used
- // to identify the chunk and the sub ID is set to 0.
- //
- // This single MAX app data chunk will contain the entire
- // 3DS app data chunk, which may have sub chunks (see IPAS SDK).
- // The following routines will aid in parsing 3DS app data.
- // Get the ID string out of an XDATA_ENTRY chunk and null terminates it
- CoreExport void GetIDStr(char *chunk, char *idstring);
- // Returns the offset into 'appd' of the specified chunk
- // or -1 if it is not found
- CoreExport int FindAppDataChunk(void *appd, DWORD len, char *idstring);
- // Similar to Find, but actually returns a pointer to the chunk
- // or NULL if it is not found
- CoreExport void *GetAppDataChunk(void *appd, DWORD len, char *idstring);
- // Adds the chunk to the appdata chunk, preserving existing chunks.
- // 'chunk' should point to the new chunk header followed by its data.
- CoreExport int SetAppDataChunk(void **pappd, DWORD &len, void *chunk);
- // Deletes a chunk from the appdata while preserving other chunks.
- CoreExport int DeleteAppDataChunk(void **pappd, DWORD &len, char *idstring);
- // Known sub chunks inside an appdata chunk
- #define XDATA_ENTRY 0x8001
- #define XDATA_APPNAME 0x8002
- //---------------------------------------------------------
- // Interface into MAX's default WAV sound object
- // use the Interface method GetSoundObject() to get a pointer
- // to the current sound object and then use the
- // GetWaveSoundInterface() on the result to see if it supports
- // this interface.
- class IWaveSound {
- public:
- // Retreives the name of the current sound file
- virtual TSTR GetSoundFileName()=0;
-
- // Sets the sound file. This will cause the WAV to
- // be loaded into the tack view. Returns FALSE if
- // the file can't be opened or no wave track exist.
- virtual BOOL SetSoundFileName(TSTR name)=0;
- // Set the time offset for the wave
- virtual void SetStartTime(TimeValue t)=0;
- // Get the time offset for the wave
- virtual TimeValue GetStartTime()=0;
- virtual TimeValue GetEndTime()=0;
- };
- #endif //__ISTDPLUG__
|