istdplug.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. /**********************************************************************
  2. *<
  3. FILE: istdplug.h
  4. DESCRIPTION: Interfaces into some of the standard plug-ins
  5. that ship with MAX
  6. CREATED BY: Rolf Berteig
  7. HISTORY: created 20 January 1996
  8. *> Copyright (c) 1994, All Rights Reserved.
  9. **********************************************************************/
  10. #ifndef __ISTDPLUG__
  11. #define __ISTDPLUG__
  12. //----------------------------------------------------------------
  13. // The following are parameter block IDs for procedural objects
  14. // Arc
  15. #define ARC_RADIUS 0
  16. #define ARC_FROM 1
  17. #define ARC_TO 2
  18. #define ARC_PIE 3
  19. // Box object
  20. #define BOXOBJ_LENGTH 0
  21. #define BOXOBJ_WIDTH 1
  22. #define BOXOBJ_HEIGHT 2
  23. #define BOXOBJ_WSEGS 3
  24. #define BOXOBJ_LSEGS 4
  25. #define BOXOBJ_HSEGS 5
  26. #define BOXOBJ_GENUVS 6
  27. // Circle
  28. #define CIRCLE_RADIUS 0
  29. // Cone
  30. #define CONE_RADIUS1 0
  31. #define CONE_RADIUS2 1
  32. #define CONE_HEIGHT 2
  33. #define CONE_SEGMENTS 3
  34. #define CONE_CAPSEGMENTS 4
  35. #define CONE_SIDES 5
  36. #define CONE_SMOOTH 6
  37. #define CONE_SLICEON 7
  38. #define CONE_PIESLICE1 8
  39. #define CONE_PIESLICE2 9
  40. #define CONE_GENUVS 10
  41. // Cylinder
  42. #define CYLINDER_RADIUS 0
  43. #define CYLINDER_HEIGHT 1
  44. #define CYLINDER_SEGMENTS 2
  45. #define CYLINDER_CAPSEGMENTS 3
  46. #define CYLINDER_SIDES 4
  47. #define CYLINDER_SMOOTH 5
  48. #define CYLINDER_SLICEON 6
  49. #define CYLINDER_PIESLICE1 7
  50. #define CYLINDER_PIESLICE2 8
  51. #define CYLINDER_GENUVS 9
  52. // Donut
  53. #define DONUT_RADIUS1 0
  54. #define DONUT_RADIUS2 1
  55. // Ellipse
  56. #define ELLIPSE_LENGTH 0
  57. #define ELLIPSE_WIDTH 1
  58. // Hedra
  59. #define HEDRA_RADIUS 0
  60. #define HEDRA_FAMILY 1
  61. #define HEDRA_P 2
  62. #define HEDRA_Q 3
  63. #define HEDRA_SCALEP 4
  64. #define HEDRA_SCALEQ 5
  65. #define HEDRA_SCALER 6
  66. #define HEDRA_VERTS 7
  67. #define HEDRA_GENUVS 8
  68. // Helix
  69. #define HELIX_RADIUS1 0
  70. #define HELIX_RADIUS2 1
  71. #define HELIX_HEIGHT 2
  72. #define HELIX_TURNS 3
  73. #define HELIX_BIAS 4
  74. #define HELIX_DIRECTION 5
  75. // NGon
  76. #define NGON_RADIUS 0
  77. #define NGON_SIDES 1
  78. #define NGON_CIRCULAR 2
  79. // PatchGrid
  80. #define PATCHGRID_LENGTH 0
  81. #define PATCHGRID_WIDTH 1
  82. #define PATCHGRID_WSEGS 2
  83. #define PATCHGRID_LSEGS 3
  84. // Rain/snow
  85. #define RSPART_VPTPARTICLES 0
  86. #define RSPART_DROPSIZE 1
  87. #define RSPART_SPEED 2
  88. #define RSPART_VARIATION 3
  89. #define RSPART_TUMBLE 4
  90. #define RSPART_SCALE 5
  91. #define RSPART_DISPTYPE 6
  92. #define RSPART_STARTTIME 7
  93. #define RSPART_LIFETIME 8
  94. #define RSPART_EMITTERWIDTH 9
  95. #define RSPART_EMITTERHEIGHT 10
  96. #define RSPART_HIDEEMITTER 11
  97. #define RSPART_BIRTHRATE 12
  98. #define RSPART_CONSTANT 13
  99. #define RSPART_RENDER 14
  100. // Rectangle
  101. #define RECTANGLE_LENGTH 0
  102. #define RECTANGLE_WIDTH 1
  103. // Sphere
  104. #define SPHERE_RADIUS 0
  105. #define SPHERE_SEGS 1
  106. #define SPHERE_SMOOTH 2
  107. #define SPHERE_HEMI 3
  108. #define SPHERE_SQUASH 4
  109. #define SPHERE_RECENTER 5
  110. #define SPHERE_GENUVS 6
  111. // Star
  112. #define START_RADIUS1 0
  113. #define START_RADIUS2 1
  114. #define START_POINTS 2
  115. #define START_DISTORT 3
  116. // Tea Pot
  117. #define TEAPOT_RADIUS 0
  118. #define TEAPOT_SEGS 1
  119. #define TEAPOT_SMOOTH 2
  120. #define TEAPOT_TEAPART 3
  121. // Text
  122. #define TEXT_SIZE 0
  123. // torus
  124. #define TORUS_RADIUS 0
  125. #define TORUS_RADIUS2 1
  126. #define TORUS_ROTATION 2
  127. #define TORUS_TWIST 3
  128. #define TORUS_SEGMENTS 4
  129. #define TORUS_SIDES 5
  130. #define TORUS_SMOOTH 6
  131. #define TORUS_SLICEON 7
  132. #define TORUS_PIESLICE1 8
  133. #define TORUS_PIESLICE2 9
  134. #define TORUS_GENUVS 10
  135. // Tube
  136. #define TUBE_RADIUS 0
  137. #define TUBE_RADIUS2 1
  138. #define TUBE_HEIGHT 2
  139. #define TUBE_SEGMENTS 3
  140. #define TUBE_CAPSEGMENTS 4
  141. #define TUBE_SIDES 5
  142. #define TUBE_SMOOTH 6
  143. #define TUBE_SLICEON 7
  144. #define TUBE_PIESLICE1 8
  145. #define TUBE_PIESLICE2 9
  146. #define TUBE_GENUVS 10
  147. // Grid
  148. #define GRIDHELP_LENGTH 0
  149. #define GRIDHELP_WIDTH 1
  150. #define GRIDHELP_GRID 2
  151. //----------------------------------------------------------------
  152. // The following are parameter block IDs for modifiers
  153. // Bend
  154. #define BEND_ANGLE 0
  155. #define BEND_DIR 1
  156. #define BEND_AXIS 2
  157. #define BEND_DOREGION 3
  158. #define BEND_FROM 4
  159. #define BEND_TO 5
  160. // Bomb
  161. #define BOMB_STRENGTH 0
  162. #define BOMB_GRAVITY 1
  163. #define BOMB_CHAOS 2
  164. #define BOMB_DETONATION 3
  165. // Deflector
  166. #define DEFLECTOR_BOUNCE 0
  167. #define DEFLECTOR_WIDTH 1
  168. #define DEFLECTOR_HEIGHT 2
  169. // Displace (modifier and space warp object)
  170. #define DISPLACE_MAPTYPE 0
  171. #define DISPLACE_UTILE 1
  172. #define DISPLACE_VTILE 2
  173. #define DISPLACE_WTILE 3
  174. #define DISPLACE_BLUR 4
  175. #define DISPLACE_USEMAP 5
  176. #define DISPLACE_APPLYMAP 6
  177. #define DISPLACE_STRENGTH 7
  178. #define DISPLACE_DECAY 8
  179. #define DISPLACE_CENTERLUM 9
  180. #define DISPLACE_UFLIP 10
  181. #define DISPLACE_VFLIP 11
  182. #define DISPLACE_WFLIP 12
  183. // Extrude
  184. #define EXTRUDE_AMOUNT 0
  185. #define EXTRUDE_SEGS 1
  186. #define EXTRUDE_CAPSTART 2
  187. #define EXTRUDE_CAPEND 3
  188. #define EXTRUDE_CAPTYPE 4
  189. #define EXTRUDE_OUTPUT 5
  190. #define EXTRUDE_MAPPING 6
  191. // Gravity
  192. #define GRAVITY_STRENGTH 0
  193. #define GRAVITY_DECAY 1
  194. #define GRAVITY_TYPE 2
  195. #define GRAVITY_DISPLENGTH 3
  196. // Wind
  197. #define WIND_STRENGTH 0
  198. #define WIND_DECAY 1
  199. #define WIND_TYPE 2
  200. #define WIND_DISPLENGTH 3
  201. #define WIND_TURBULENCE 4
  202. #define WIND_FREQUENCY 5
  203. #define WIND_SCALE 6
  204. // UVW map
  205. #define UVWMAP_MAPTYPE 0
  206. #define UVWMAP_UTILE 1
  207. #define UVWMAP_VTILE 2
  208. #define UVWMAP_WTILE 3
  209. #define UVWMAP_UFLIP 4
  210. #define UVWMAP_VFLIP 5
  211. #define UVWMAP_WFLIP 6
  212. #define UVWMAP_CAP 7
  213. // Noise mod
  214. #define NOISEMOD_SEED 0
  215. #define NOISEMOD_SCALE 1
  216. #define NOISEMOD_FRACTAL 2
  217. #define NOISEMOD_ROUGH 3
  218. #define NOISEMOD_ITERATIONS 4
  219. #define NOISEMOD_ANIMATE 5
  220. #define NOISEMOD_FREQ 6
  221. #define NOISEMOD_PHASE 7
  222. #define NOISEMOD_STRENGTH 8
  223. // Optimize
  224. #define OPTMOD_RENDER 0
  225. #define OPTMOD_VIEWS 1
  226. #define OPTMOD_FACETHRESH1 2
  227. #define OPTMOD_EDGETHRESH1 3
  228. #define OPTMOD_BIAS1 4
  229. #define OPTMOD_PRESERVEMAT1 5
  230. #define OPTMOD_PRESERVESMOOTH1 6
  231. #define OPTMOD_FACETHRESH2 7
  232. #define OPTMOD_EDGETHRESH2 8
  233. #define OPTMOD_BIAS2 9
  234. #define OPTMOD_PRESERVEMAT2 10
  235. #define OPTMOD_PRESERVESMOOTH2 11
  236. #define OPTMOD_AUTOEDGE 12
  237. // Volume selection modifier
  238. #define VOLSEL_LEVEL 0
  239. #define VOLSEL_METHOD 1
  240. #define VOLSEL_TYPE 2
  241. #define VOLSEL_VOLUME 3
  242. #define VOLSEL_INVERT 4
  243. // Ripple/Wave space warp object and object space modifier
  244. #define RWAVE_AMPLITUDE 0
  245. #define RWAVE_AMPLITUDE2 1
  246. #define RWAVE_WAVELEN 2
  247. #define RWAVE_PHASE 3
  248. #define RWAVE_DECAY 4
  249. #define RWAVE_CIRCLES 5 // These last three are only valid for space warp objects
  250. #define RWAVE_SEGMENTS 6
  251. #define RWAVE_DIVISIONS 7
  252. // Ripple/Wave binding (modifier)
  253. #define RWAVE_FLEX 0
  254. // Skew
  255. #define SKEW_AMOUNT 0
  256. #define SKEW_DIR 1
  257. #define SKEW_AXIS 2
  258. #define SKEW_DOREGION 3
  259. #define SKEW_FROM 4
  260. #define SKEW_TO 5
  261. // Material modifier
  262. #define MATMOD_MATID 0
  263. // Smoothing group modifier
  264. #define SMOOTHMOD_AUTOSMOOTH 0
  265. #define SMOOTHMOD_THRESHOLD 1
  266. #define SMOOTHMOD_SMOOTHBITS 2
  267. // Normal modifier
  268. #define NORMMOD_UNIFY 0
  269. #define NORMMOD_FLIP 1
  270. // SurfRev (Lathe) modifier
  271. #define SURFREV_DEGREES 0
  272. #define SURFREV_SEGS 1
  273. #define SURFREV_CAPSTART 2
  274. #define SURFREV_CAPEND 3
  275. #define SURFREV_CAPTYPE 4
  276. #define SURFREV_WELDCORE 5
  277. #define SURFREV_OUTPUT 6
  278. #define SURFREV_MAPPING 7
  279. // Taper
  280. #define TAPER_AMT 0
  281. #define TAPER_CRV 1
  282. #define TAPER_AXIS 2
  283. #define TAPER_EFFECTAXIS 3
  284. #define TAPER_SYMMETRY 4
  285. #define TAPER_DOREGION 5
  286. #define TAPER_FROM 6
  287. #define TAPER_TO 7
  288. // Twist
  289. #define TWIST_ANGLE 0
  290. #define TWIST_BIAS 1
  291. #define TWIST_AXIS 2
  292. #define TWIST_DOREGION 3
  293. #define TWIST_FROM 4
  294. #define TWIST_TO 5
  295. //-- Text shape object interface -------------------------
  296. // Use GetTextObjectInterface() to get a pointer to an
  297. // ITextObject given a pointer to an Object.
  298. // Flags passed to ChangeFont()
  299. #define TEXTOBJ_ITALIC (1<<1)
  300. #define TEXTOBJ_UNDERLINE (1<<2)
  301. class ITextObject {
  302. public:
  303. // Returns TRUE if string is changed. Can't change string if current font is not installed
  304. virtual BOOL ChangeText(TSTR string)=0;
  305. // Returns TRUE if font is successfully changed.
  306. virtual BOOL ChangeFont(TSTR name, DWORD flags)=0;
  307. // Get fount and string
  308. virtual TSTR GetFont()=0;
  309. virtual TSTR GetString()=0;
  310. // Get/Set styles
  311. virtual BOOL GetItalic()=0;
  312. virtual BOOL GetUnderline()=0;
  313. virtual void SetItalic(BOOL sw)=0;
  314. virtual void SetUnderline(BOOL sw)=0;
  315. };
  316. //-- Controller interfaces -------------------------------
  317. // Base key class
  318. class IKey {
  319. public:
  320. TimeValue time;
  321. DWORD flags;
  322. IKey() {time=0;flags=0;}
  323. };
  324. //--- TCB keys -------------
  325. class ITCBKey : public IKey {
  326. public:
  327. float tens, cont, bias, easeIn, easeOut;
  328. };
  329. class ITCBFloatKey : public ITCBKey {
  330. public:
  331. float val;
  332. };
  333. class ITCBPoint3Key : public ITCBKey {
  334. public:
  335. Point3 val;
  336. };
  337. class ITCBRotKey : public ITCBKey {
  338. public:
  339. AngAxis val;
  340. };
  341. class ITCBScaleKey : public ITCBKey {
  342. public:
  343. ScaleValue val;
  344. };
  345. //--- Bezier keys -------------
  346. class IBezFloatKey : public IKey {
  347. public:
  348. float intan, outtan;
  349. float val;
  350. };
  351. class IBezPoint3Key : public IKey {
  352. public:
  353. Point3 intan, outtan;
  354. Point3 val;
  355. };
  356. class IBezQuatKey : public IKey {
  357. public:
  358. Quat val;
  359. };
  360. class IBezScaleKey : public IKey {
  361. public:
  362. Point3 intan, outtan;
  363. ScaleValue val;
  364. };
  365. //--- Linear Keys --------------
  366. class ILinFloatKey : public IKey {
  367. public:
  368. float val;
  369. };
  370. class ILinPoint3Key : public IKey {
  371. public:
  372. Point3 val;
  373. };
  374. class ILinRotKey : public IKey {
  375. public:
  376. Quat val;
  377. };
  378. class ILinScaleKey : public IKey {
  379. public:
  380. ScaleValue val;
  381. };
  382. // --- Flag bits for keys -------------------------------
  383. // General flags
  384. #define IKEY_SELECTED (1<<0)
  385. #define IKEY_XSEL (1<<1)
  386. #define IKEY_YSEL (1<<2)
  387. #define IKEY_ZSEL (1<<3)
  388. #define IKEY_FLAGGED (1<<13)
  389. #define IKEY_TIME_LOCK (1<<14)
  390. // TCB specific key flags
  391. #define TCBKEY_QUATVALID (1<<4) // When this bit is set the angle/axis is derived from the quat instead of vice/versa
  392. // Bezier specific key flags
  393. #define BEZKEY_XBROKEN (1<<4) // Broken means not locked
  394. #define BEZKEY_YBROKEN (1<<5)
  395. #define BEZKEY_ZBROKEN (1<<6)
  396. // The in and out types are stored in bits 7-13
  397. #define BEZKEY_NUMTYPEBITS 3
  398. #define BEZKEY_INTYPESHIFT 7
  399. #define BEZKEY_OUTTYPESHIFT (BEZKEY_INTYPESHIFT+BEZKEY_NUMTYPEBITS)
  400. #define BEZKEY_TYPEMASK 7
  401. // Bezier tangent types
  402. #define BEZKEY_SMOOTH 0
  403. #define BEZKEY_LINEAR 1
  404. #define BEZKEY_STEP 2
  405. #define BEZKEY_FAST 3
  406. #define BEZKEY_SLOW 4
  407. #define BEZKEY_USER 5
  408. #define NUM_TANGENTTYPES 6
  409. // This key is interpolated using arclength as the interpolation parameter
  410. #define BEZKEY_CONSTVELOCITY (1<<15)
  411. #define TangentsLocked(f,j) (!(f&(BEZKEY_XBROKEN<<j)))
  412. #define SetTangentLock(f,j,l) {if (l) (f)=(f)&(~(BEZKEY_XBROKEN<<j)); else (f)|=(BEZKEY_XBROKEN<<j);}
  413. // Macros to access hybrid tangent types
  414. #define GetInTanType(f) int(((f)>>BEZKEY_INTYPESHIFT)&BEZKEY_TYPEMASK)
  415. #define GetOutTanType(f) int(((f)>>BEZKEY_OUTTYPESHIFT)&BEZKEY_TYPEMASK)
  416. #define SetInTanType(f,t) {(f) = ((f)&(~(BEZKEY_TYPEMASK<<BEZKEY_INTYPESHIFT)))|(t<<BEZKEY_INTYPESHIFT);}
  417. #define SetOutTanType(f,t) {(f) = ((f)&(~(BEZKEY_TYPEMASK<<BEZKEY_OUTTYPESHIFT)))|(t<<BEZKEY_OUTTYPESHIFT);}
  418. // Track flags
  419. #define TFLAG_CURVESEL (1<<0)
  420. #define TFLAG_RANGE_UNLOCKED (1<<1)
  421. #define TFLAG_LOOPEDIN (1<<3)
  422. #define TFLAG_LOOPEDOUT (1<<4)
  423. #define TFLAG_COLOR (1<<5) // Set for Bezier Point3 controlers that are color controllers
  424. #define TFLAG_HSV (1<<6) // Set for color controls that interpolate in HSV
  425. //-------------------------------------------------------
  426. // This is an interface into either a TCB or Bezier key
  427. // frame controller. It is up to the client to make sure
  428. // that the IKey* point to a key of the approriate derived
  429. // class based on the ClassID() of the controller.
  430. class IKeyControl {
  431. public:
  432. // Total number of keys.
  433. virtual int GetNumKeys()=0;
  434. // Sets the number of keys allocated.
  435. // May add blank keys or delete existing keys
  436. virtual void SetNumKeys(int n)=0;
  437. // Fill in 'key' with the ith key
  438. virtual void GetKey(int i,IKey *key)=0;
  439. // Set the ith key
  440. virtual void SetKey(int i,IKey *key)=0;
  441. // Append a new key onto the end. Note that the
  442. // key list will ultimately be sorted by time. Returns
  443. // the key's index.
  444. virtual int AppendKey(IKey *key)=0;
  445. // If any changes are made that would require the keys to be sorted
  446. // this method should be called.
  447. virtual void SortKeys()=0;
  448. // Access track flags
  449. virtual DWORD &GetTrackFlags()=0;
  450. };
  451. // To get a pointer to the above interface given a pointer to a controller
  452. // use the macro defined in animtbl.h: GetKeyControlInterface()
  453. //-----------------------------------------------------------
  454. // A plug-in can register itself to read a particular APP_DATA
  455. // chunk when a 3DS file is loaded. If a chunk is encountered
  456. // that matches a registered plug-in, that plug-in will be
  457. // asked to create an instance of itself based on the contents
  458. // of the APP_DATA chunk.
  459. class TriObject;
  460. class ObjectDataReaderCallback {
  461. public:
  462. // Chunk name
  463. virtual char *DataName()=0;
  464. // Create an instance of an object based on the data and the original mesh object
  465. virtual Object *ReadData(TriObject *obj, void *data, DWORD len)=0;
  466. virtual void DeleteThis()=0;
  467. };
  468. CoreExport void RegisterObjectAppDataReader(ObjectDataReaderCallback *cb);
  469. CoreExport Object *ObjectFromAppData(TriObject *obj, char *name, void *data, DWORD len);
  470. // Note about 3DS App Data:
  471. // If app data is encountered and no plug-in has registered to
  472. // convert it, then it is just hung off the object (or INode in
  473. // the case of KXP app data).
  474. // For object app data, TriObject's super class and class ID are used
  475. // to identify the chunk and the sub ID is set to 0.
  476. // For node app data, INode's super class and class ID are used
  477. // to identify the chunk and the sub ID is set to 0.
  478. //
  479. // This single MAX app data chunk will contain the entire
  480. // 3DS app data chunk, which may have sub chunks (see IPAS SDK).
  481. // The following routines will aid in parsing 3DS app data.
  482. // Get the ID string out of an XDATA_ENTRY chunk and null terminates it
  483. CoreExport void GetIDStr(char *chunk, char *idstring);
  484. // Returns the offset into 'appd' of the specified chunk
  485. // or -1 if it is not found
  486. CoreExport int FindAppDataChunk(void *appd, DWORD len, char *idstring);
  487. // Similar to Find, but actually returns a pointer to the chunk
  488. // or NULL if it is not found
  489. CoreExport void *GetAppDataChunk(void *appd, DWORD len, char *idstring);
  490. // Adds the chunk to the appdata chunk, preserving existing chunks.
  491. // 'chunk' should point to the new chunk header followed by its data.
  492. CoreExport int SetAppDataChunk(void **pappd, DWORD &len, void *chunk);
  493. // Deletes a chunk from the appdata while preserving other chunks.
  494. CoreExport int DeleteAppDataChunk(void **pappd, DWORD &len, char *idstring);
  495. // Known sub chunks inside an appdata chunk
  496. #define XDATA_ENTRY 0x8001
  497. #define XDATA_APPNAME 0x8002
  498. //---------------------------------------------------------
  499. // Interface into MAX's default WAV sound object
  500. // use the Interface method GetSoundObject() to get a pointer
  501. // to the current sound object and then use the
  502. // GetWaveSoundInterface() on the result to see if it supports
  503. // this interface.
  504. class IWaveSound {
  505. public:
  506. // Retreives the name of the current sound file
  507. virtual TSTR GetSoundFileName()=0;
  508. // Sets the sound file. This will cause the WAV to
  509. // be loaded into the tack view. Returns FALSE if
  510. // the file can't be opened or no wave track exist.
  511. virtual BOOL SetSoundFileName(TSTR name)=0;
  512. // Set the time offset for the wave
  513. virtual void SetStartTime(TimeValue t)=0;
  514. // Get the time offset for the wave
  515. virtual TimeValue GetStartTime()=0;
  516. virtual TimeValue GetEndTime()=0;
  517. };
  518. #endif //__ISTDPLUG__