plugapi.h

Go to the documentation of this file.
00001 //**************************************************************************/
00002 // Copyright (c) 1998-2007 Autodesk, Inc.
00003 // All rights reserved.
00004 // 
00005 // These coded instructions, statements, and computer programs contain
00006 // unpublished proprietary information written by Autodesk, Inc., and are
00007 // protected by Federal copyright law. They may not be disclosed to third
00008 // parties or copied or duplicated in any form, in whole or in part, without
00009 // the prior written consent of Autodesk, Inc.
00010 //**************************************************************************/
00011 // DESCRIPTION: Plugin DLL API
00012 // AUTHOR: Dan Silva - Nov.30.1994
00013 //***************************************************************************/
00014 
00015 #pragma once
00016 
00017 #ifndef _CPPRTTI
00018 #error 3ds Max plugins and dlls must compile with run-time type information (RTTI) On.\
00019 RTTI can be turned on via the Language tab in the C++ folder of the \
00020 Visual Studio project settings of your project, or the /GR compiler flag.
00021 #endif
00022 
00023 #include "maxheap.h"
00024 #include "maxtypes.h"
00025 #include "buildver.h"   // russom - 03/08/01
00026 #include "maxversion.h"
00027 #include "iparamb2Typedefs.h"
00028 #include "coreexp.h"
00029 #include "tab.h"
00030 #include "strbasic.h"
00031 #include "box2.h" // for Rect. Cannot forward declare this.
00032 // forward declarations
00033 class INode;
00034 class ReferenceMaker;
00035 
00050 
00051 // 3DSMAX Version number to be compared against that returned by DLL's
00052 // LibVersion function to detect obsolete DLLs.
00053 //#define VERSION_3DSMAX 100      // changed  4/ 9/96 -- DB
00054 //#define VERSION_3DSMAX 110      // changed  7/17/96 -- DS
00055 //#define VERSION_3DSMAX 111      // changed  9/24/96 -- DS
00056 //#define VERSION_3DSMAX 120      // changed  9/30/96 -- DB
00057 //#define VERSION_3DSMAX 200      // changed  10/30/96 -- DS
00058 
00063 
00064 #define MAX_RELEASE_UNSUPPORTED (-1)
00065 // MAX release number X 1000
00066 //#define MAX_RELEASE               2000    // DDS 9/30/97  
00067 //#define MAX_RELEASE               2500    // JMK 2/25/98  
00068 //#define MAX_RELEASE               3000    // DDS 9/3/98  
00069 //#define MAX_RELEASE               3100    // CCJ 10/21/99  
00070 //#define MAX_RELEASE               3900    // CCJ 6/26/00
00071 //#define MAX_RELEASE               4000    // CCJ 11/29/00
00072 //#define MAX_RELEASE               4200    // 010514  --prs.
00073 //#define MAX_RELEASE               4900    // for R5 alpha, 011115  --prs.
00074 //#define MAX_RELEASE               5000    // for R5, 020604  --prs.
00075 //#define MAX_RELEASE               5100    // for R5.1, 020801  --prs.
00076 //#define MAX_RELEASE               5900    // for R6 alpha, 030403  --prs.
00077 //#define MAX_RELEASE               6000    // for R6, 030806  --prs.
00078 //#define MAX_RELEASE_R7_ALPHA      6900    // for R7 alpha
00080 #define MAX_RELEASE_R7              7000    
00081 
00082 #define MAX_RELEASE_R8_ALPHA        7800    
00083 
00084 #define MAX_RELEASE_R8              8000    
00085 
00086 #define MAX_RELEASE_R9_ALPHA        8900    
00087 
00088 #define MAX_RELEASE_R9_ALPHA2       8901    
00089 
00090 #define MAX_RELEASE_R9              9000    
00091 
00092 #define MAX_RELEASE_R10_ALPHA       9900    
00093 
00094 #define MAX_RELEASE_R10             10000   
00095 
00096 #define MAX_RELEASE_R11_ALPHA       10900   
00097 
00098 #define MAX_RELEASE_R11             11000   
00099 
00100 #define MAX_RELEASE_R12_ALPHA       11900   
00101 
00102 #define MAX_RELEASE_R12             12000   
00103 
00104 #define MAX_RELEASE_R13_ALPHA       12900   
00105 
00106 #define MAX_RELEASE_R13             13000   
00107 
00108 #define MAX_RELEASE_R14_ALPHA       13900   
00109 
00110 #define MAX_RELEASE_R14             14000   
00111 
00112 #define MAX_RELEASE                 MAX_RELEASE_R14
00113 
00114 
00119 #ifndef MAX_RELEASE_EXTERNAL
00120  #define MAX_RELEASE_EXTERNAL MAX_RELEASE
00121 #endif
00122 
00146 // Blocks of values are reserved for specific products that are meant
00147 // to have non-compatible APIs. Currently assigned:
00148 //    000-???
00149 //    255:     temporary use to prevent NOVA plugins from loading in MAX
00150 
00151 #define MAX_API_NUM_R20             4    // DDS 9/30/97 
00152 #define MAX_API_NUM_R25             5    // DDS 10/06/97
00153 #define MAX_API_NUM_R30             6    // DDS 9/3/98
00154 #define MAX_API_NUM_R31             7    // CCJ 5/14/99
00155 #define MAX_API_NUM_R40             8    // CCJ 11/29/00 - R4
00156 #define MAX_API_NUM_R42             9    // R5 011031  --prs.
00157 
00158 #define MAX_API_NUM_R50             11   // R5 FCS 020624  --prs.
00159 
00160 #define MAX_API_NUM_R60_PRE_REL     12   // R6 prerelease 030409  --prs.
00161 
00162 #define MAX_API_NUM_R60             13   // R6 FCS 030806  --prs.
00163 
00164 #define MAX_API_NUM_R70_PRE_REL     14   // R7 prerelease 05/18/04 - russom
00165 
00166 #define MAX_API_NUM_R70             15   // R7 FCS -- 2004-09-02 -- raffenn
00167 
00168 #define MAX_API_NUM_R80_PRE_REL     16   // R8 pre-release Vesper -- 2005-01-18 -- raffenn
00169 
00170 #define MAX_API_NUM_R80             17   // R8 FCS max 8 -- 2005-09-01 -- raffenn
00171 
00172 #define MAX_API_NUM_R90_ALPHA       18   // R9 alpha -- 2005-09-21 -- aszabo
00173 
00174 #define MAX_API_NUM_R90_BETA1       19   
00175 
00176 #define MAX_API_NUM_R90_BETA3       20   
00177 
00178 #define MAX_API_NUM_R90             21   
00179 
00180 #define MAX_API_NUM_R100_BETA5      22   
00181 
00182 #define MAX_API_NUM_R100            23   
00183 
00184 #define MAX_API_NUM_R110_ALPHA      24   
00185 
00186 #define MAX_API_NUM_R110            25   
00187 
00188 #define MAX_API_NUM_R120_ALPHA2     26   
00189 
00190 #define MAX_API_NUM_R120_ALPHA3     27   
00191 
00192 #define MAX_API_NUM_R120_ALPHA4     28   
00193 
00194 #define MAX_API_NUM_R120_BETA1      29   
00195 
00196 #define MAX_API_NUM_R120_BETA3      30   
00197 
00198 #define MAX_API_NUM_R120_BETA4      31   
00199 
00200 #define MAX_API_NUM_R120_BETA5      32   
00201 
00202 #define MAX_API_NUM_R120            33   
00203 
00204 #define MAX_API_NUM_R130_BETA1      34   
00205 
00206 #define MAX_API_NUM_R130            35   
00207 
00208 #define MAX_API_NUM_R140_ALPHA1     36   
00209 
00210 #define MAX_API_NUM_R140_BETA2      37 
00211 
00212 #define MAX_API_NUM_R140            38 
00213 
00218 #define MAX_API_NUM MAX_API_NUM_R140
00219 
00224 #define MAX_SDK_REV     0     // DDS 9/20/97
00225 
00227 #define VERSION_3DSMAX ((MAX_RELEASE<<16)+(MAX_API_NUM<<8)+MAX_SDK_REV)
00228 
00229 // update jagapi.cpp product_app_id if new enums are added
00230 enum APPLICATION_ID {kAPP_NONE, kAPP_MAX, kAPP_VIZ, kAPP_GMAX, kAPP_PLASMA, kAPP_VIZR};
00231 
00235 CoreExport APPLICATION_ID GetAppID();
00236 
00239 
00240 #define GET_MAX_RELEASE(x)  (((x)>>16)&0xffff)
00241 #define GET_MAX_API_NUM(x)  (((x)>>8)&0xff)
00242 #define GET_MAX_SDK_REV(x)  ((x)&0xff)
00243 #define GET_MAX_SDK_NUMREV(x)  ((x)&0xffff) 
00244 
00245 
00247 
00249 
00255 #define GEN_MODAPP_CLASS_ID         0x00000b
00256 #define MODAPP_CLASS_ID             0x00000c
00257 #define OBREF_MODAPP_CLASS_ID       0x00000d
00258 #define BASENODE_CLASS_ID           0x000001
00259 #define GEN_DERIVOB_CLASS_ID        0x000002
00260 #define DERIVOB_CLASS_ID            0x000003
00261 #define WSM_DERIVOB_CLASS_ID        0x000004
00262 #define PARAMETER_BLOCK_CLASS_ID    0x000008    
00263 #define PARAMETER_BLOCK2_CLASS_ID   0x000082    
00264 #define EASE_LIST_CLASS_ID          0x000009
00265 #define AXIS_DISPLAY_CLASS_ID       0x00000e
00266 #define MULT_LIST_CLASS_ID          0x00000f
00267 #define NOTETRACK_CLASS_ID          0x0000ff
00268 #define TREE_VIEW_CLASS_ID          0xffffff00
00269 #define SCENE_CLASS_ID              0xfffffd00
00270 #define THE_GRIDREF_CLASS_ID        0xfffffe00
00271 #define VIEWREF_CLASS_ID            0xffffff01
00272 #define BITMAPDAD_CLASS_ID          0xffffff02 // For drag and drop of bitmaps
00273 #define PARTICLE_SYS_CLASS_ID       0xffffff03 // NOTE: this is for internal use only. Particle systems return GEOMOBJECT_CLASS_ID -- use IsParticleObject() to determine if an object is a particle system.
00274 #define AGGMAN_CLASS_ID             0xffffff05 // Object aggregation, VIZ
00275 #define MAXSCRIPT_WRAPPER_CLASS_ID  0xffffff06 // MAX object wrappers within MAXScript
00276 #define TRACKBAR_CLASS_ID           0xffffff07  // Trackbar 
00277 #define MAKEREF_REST_CLASS_ID       0x9876544   // MakeRefRestore
00278 #define DELREF_REST_CLASS_ID        0x9876543   // DeleteRefRestore
00279 #define ASSIGNREF_REST_CLASS_ID     0x121242    // AssignMtlRestore
00280 #define LAYER_CLASS_ID              0x0010f0    
00281 
00282 
00286 
00287 #define GEOMOBJECT_CLASS_ID         0x000010    //!< Geometric object super-class ID.
00288 #define CAMERA_CLASS_ID             0x000020    //!< Camera object super-class ID.
00289 #define LIGHT_CLASS_ID              0x000030    //!< Light object super-class ID.  
00290 #define SHAPE_CLASS_ID              0x000040    //!< Shape object super-class ID.  
00291 #define HELPER_CLASS_ID             0x000050    //!< Helper object super-class ID.  
00292 #define SYSTEM_CLASS_ID             0x000060    //!< System plug-in super-class ID.   
00293 #define REF_MAKER_CLASS_ID          0x000100    //!< ReferenceMaker super-class ID.     
00294 #define REF_TARGET_CLASS_ID         0x000200    //!< ReferenceTarget super-class ID.  
00295 #define OSM_CLASS_ID                0x000810    //!< Object-space modifier (Modifier) super-class ID.  
00296 #define WSM_CLASS_ID                0x000820    //!< World-space modifier (WSModifier) super-class ID.  
00297 #define WSM_OBJECT_CLASS_ID         0x000830    //!< World-space modifier object (WSMObject) super-class ID.  
00298 #define SCENE_IMPORT_CLASS_ID       0x000A10    //!< Scene importer (SceneImport) super-class ID.  
00299 #define SCENE_EXPORT_CLASS_ID       0x000A20    //!< Scene exporter (SceneExport) super-class ID.  
00300 #define BMM_STORAGE_CLASS_ID        0x000B10    //!< Bitmap storage super-class ID.  
00301 #define BMM_FILTER_CLASS_ID         0x000B20    //!< Image filter super-class ID.  
00302 #define BMM_IO_CLASS_ID             0x000B30    //!< Image loading/saving super-class ID.  
00303 #define BMM_DITHER_CLASS_ID         0x000B40    //!< Bitmap dithering super-class ID.  
00304 #define BMM_COLORCUT_CLASS_ID       0x000B50    //!< Shape object super-class ID.  
00305 #define USERDATATYPE_CLASS_ID       0x000B60    //!< \deprecated
00306 #define MATERIAL_CLASS_ID           0x000C00    //!< Materials super-class ID.
00307 #define TEXMAP_CLASS_ID             0x000C10    //!< Texture maps super-class ID.
00308 #define UVGEN_CLASS_ID              0x0000C20   //!< UV Generator super-class ID.
00309 #define XYZGEN_CLASS_ID             0x0000C30   //!< XYZ Generator super-class ID.
00310 #define TEXOUTPUT_CLASS_ID          0x0000C40   //!< Texture output filter super-class ID.
00311 #define SOUNDOBJ_CLASS_ID           0x000D00    //!< Sound object super-class ID.
00312 #define FLT_CLASS_ID                0x000E00    //!< Image processing filter super-class ID. 
00313 #define RENDERER_CLASS_ID           0x000F00    //!< Renderer super-class ID.
00314 #define BEZFONT_LOADER_CLASS_ID     0x001000    //!< Bezier font loader super-class ID.
00315 #define ATMOSPHERIC_CLASS_ID        0x001010    //!< Atmospheric effect super-class ID.
00316 #define UTILITY_CLASS_ID            0x001020    //!< Utility object super-class ID.
00317 #define TRACKVIEW_UTILITY_CLASS_ID  0x001030    //!< Trackview utility super-class ID.
00318 #define FRONTEND_CONTROL_CLASS_ID   0x001040    //!< Front-end control super-class ID.
00319 #define MOT_CAP_DEV_CLASS_ID        0x001060    //!< Motion capture device super-class ID.
00320 #define MOT_CAP_DEVBINDING_CLASS_ID 0x001050    //!< Motion capture device binding super-class ID.
00321 #define OSNAP_CLASS_ID              0x001070    //!< Object snap super-class ID.
00322 #define TEXMAP_CONTAINER_CLASS_ID   0x001080    //!< Texture map container super-class ID.
00323 #define RENDER_EFFECT_CLASS_ID      0x001090    //!< Render post-effects super-class ID.
00324 #define FILTER_KERNEL_CLASS_ID      0x0010a0    //!< Anti-aliasing filter kernel super-class ID.
00325 #define SHADER_CLASS_ID             0x0010b0    //!< Standard material shader super-class ID.
00326 #define COLPICK_CLASS_ID            0x0010c0    //!< Color picker super-class ID.
00327 #define SHADOW_TYPE_CLASS_ID        0x0010d0    //!< Shadow generator super-class ID.
00328 #define GUP_CLASS_ID                0x0010e0    //!< Global utility plug-in super-class ID.
00329 #define SCHEMATICVIEW_UTILITY_CLASS_ID  0x001100 //!< Schematic view utility super-class ID.
00330 #define SAMPLER_CLASS_ID            0x001110    //!< Sampler super-class ID.
00331 #define IK_SOLVER_CLASS_ID          0x001140    //!< IK solver super-class ID.
00332 #define RENDER_ELEMENT_CLASS_ID     0x001150    //!< Render output element super-class ID.
00333 #define BAKE_ELEMENT_CLASS_ID       0x001151    //!< Texture bake output element super-class ID.
00334 #define CUST_ATTRIB_CLASS_ID        0x001160    //!< Custom attributes super-class ID.
00335 #define RADIOSITY_CLASS_ID          0x001170    //!< Global illumination plugin super-class ID.
00336 #define TONE_OPERATOR_CLASS_ID      0x001180    //!< Tone operator super-class ID.
00337 #define MPASS_CAM_EFFECT_CLASS_ID   0x001190    //!< Multi-pass camera effect super-class ID.
00338 #define MR_SHADER_CLASS_ID_DEFUNCT  0x0011a0    //!< Mental ray shader super-class ID. \note No longer used, kept for file compatibility.
00339 
00340 
00343 
00344 #define CTRL_SHORT_CLASS_ID         0x9001  //!< \deprecated
00345 #define CTRL_INTEGER_CLASS_ID       0x9002  //!< \deprecated
00346 #define CTRL_FLOAT_CLASS_ID         0x9003  //!< Float controller super-class ID.
00347 #define CTRL_POINT2_CLASS_ID        0x9004  //!< \deprecated
00348 #define CTRL_POINT3_CLASS_ID        0x9005  //!< Point3 controller super-class ID.
00349 #define CTRL_POS_CLASS_ID           0x9006  //!< \deprecated Use CTRL_POSITION_CLASS_ID instead.
00350 #define CTRL_QUAT_CLASS_ID          0x9007  //!< \deprecated
00351 #define CTRL_MATRIX3_CLASS_ID       0x9008  //!< Matrix3 controller super-class ID.
00352 #define CTRL_COLOR_CLASS_ID         0x9009  //!< \deprecated
00353 #define CTRL_COLOR24_CLASS_ID       0x900A  //!< \deprecated
00354 #define CTRL_POSITION_CLASS_ID      0x900B  //!< Position controller super-class ID.
00355 #define CTRL_ROTATION_CLASS_ID      0x900C  //!< Rotation controller super-class ID.
00356 #define CTRL_SCALE_CLASS_ID         0x900D  //!< Scale controller super-class ID.
00357 #define CTRL_MORPH_CLASS_ID         0x900E  //!< Morph controller super-class ID.
00358 #define CTRL_USERTYPE_CLASS_ID      0x900F  //!< \deprecated
00359 #define CTRL_MASTERPOINT_CLASS_ID   0x9010  
00360 #define MASTERBLOCK_SUPER_CLASS_ID  0x9011
00361 #define CTRL_POINT4_CLASS_ID        0x9012  
00362 #define CTRL_FRGBA_CLASS_ID         0x9013  
00363 
00364 
00365 /* \name Pseudo super-class IDs 
00366     Psuedo super-class IDs are used to identify categories of objects. */
00368 #define DEFORM_OBJ_CLASS_ID         0x000005 //!< Deformable object pseudo super-class ID
00369 #define MAPPABLE_OBJ_CLASS_ID       0x000006 //!< Mappable object pseudo super-class ID
00370 #define GENERIC_SHAPE_CLASS_ID      0x0000ab //!< Shape pseudo super-class ID
00371 
00372 
00374 
00376 
00382 #define PATH_CONTROL_CLASS_ID               0x2011 
00383 #define EULER_CONTROL_CLASS_ID              0x2012
00384 #define EXPR_POS_CONTROL_CLASS_ID           0x2013
00385 #define EXPR_P3_CONTROL_CLASS_ID            0x2014
00386 #define EXPR_FLOAT_CONTROL_CLASS_ID         0x2015
00387 #define EXPR_SCALE_CONTROL_CLASS_ID         0x2016
00388 #define EXPR_ROT_CONTROL_CLASS_ID           0x2017
00389 #define LOCAL_EULER_CONTROL_CLASS_ID        0x2018
00390 #define POSITION_CONSTRAINT_CLASS_ID        0x2019  // AG added for Position Constraint 4/21/2000
00391 #define ORIENTATION_CONSTRAINT_CLASS_ID     0x2020  // AG added for Position Constraint 5/04/2000
00392 #define LOOKAT_CONSTRAINT_CLASS_ID          0x2021  // AG added for new LookAt Constraint 5/24/2000
00393 #define ADDITIVE_EULER_CONTROL_CLASS_ID     0x2022  // 000830  --prs.
00394 #define BOOLCNTRL_CLASS_ID                  Class_ID(0x5ed56fc5, 0x6af0e521) // AG added for the new Boolean Controller 11/08/2001
00395 #define FLOATNOISE_CONTROL_CLASS_ID     0x87a6df24
00396 #define POSITIONNOISE_CONTROL_CLASS_ID  0x87a6df25
00397 #define POINT3NOISE_CONTROL_CLASS_ID    0x87a6df26
00398 #define ROTATIONNOISE_CONTROL_CLASS_ID  0x87a6df27
00399 #define SCALENOISE_CONTROL_CLASS_ID     0x87a6df28
00400 #define SURF_CONTROL_CLASSID            Class_ID(0xe8334011,0xaeb330c8)
00401 #define LINKCTRL_CLASSID                Class_ID(0x873fe764,0xaabe8601)
00402 #define ATTACH_CONTROL_CLASS_ID         Class_ID(0xbb27e611,0xa72f43e7)
00403 #define FLOATLIMITCTRL_CLASS_ID         0x17127e3e
00404 #define DUMMYCHANNEL_CLASS_ID               0xefffffff // used by PB and PB2 - superclass is CTRL_USERTYPE_CLASS_ID
00405 #define RINGARRAY_CLASS_ID          0x9120 
00406 #define SUNLIGHT_CLASS_ID           Class_ID(0x5897670e, 0x61b5008d)
00407 #define DAYLIGHT_CLASS_ID           Class_ID(0x18147db5, 0x20f17194)
00408 #define CUSTATTRIB_CONTAINER_CLASS_ID Class_ID(0x5ddb3626, 0x23b708db) // CustAttribContainer class id
00409 
00410 
00411 
00415 #define TRIOBJ_CLASS_ID         0x0009      //!< TriObject class ID
00416 #define EDITTRIOBJ_CLASS_ID 0xe44f10b3      //!< Base triangle mesh (Edit class ID
00417 #define POLYOBJ_CLASS_ID        0x5d21369a  //!< Polygon mesh (PolyObject) class ID
00418 #define PATCHOBJ_CLASS_ID       0x1030      //!< Patch object
00419 #define NURBSOBJ_CLASS_ID       0x4135      //!< Nurbs object 
00420 #define EPOLYOBJ_CLASS_ID Class_ID(0x1bf8338d,0x192f6098) //!< Editable poly.
00421 
00422 
00423 // Primitives
00424 // xavier robitaille | 03.02.15 
00425 // Prevents the user from creating box/cylinder/sphere objects without
00426 // removing them completely (we need them for the material editor).
00428 
00429 #ifndef NO_OBJECT_STANDARD_PRIMITIVES
00430 #define BOXOBJ_CLASS_ID         0x0010
00431 #define SPHERE_CLASS_ID         0x0011 
00432 #define CYLINDER_CLASS_ID       0x0012
00433 #define PLANE_CLASS_ID          Class_ID(0x81f1dfc, 0x77566f65)
00434 #define PYRAMID_CLASS_ID        Class_ID(0x76bf318a, 0x4bf37b10)
00435 #define GSPHERE_CLASS_ID        Class_ID(0, 32670)
00436 
00437 #else
00438 #define BOXOBJ_CLASS_ID         0x108f1589
00439 #define SPHERE_CLASS_ID         0x72ce5ad6 
00440 #define CYLINDER_CLASS_ID       0x759e40e1
00441 #endif
00442 #define CONE_CLASS_ID           0xa86c23dd
00443 #define TORUS_CLASS_ID          0x0020
00444 #define TUBE_CLASS_ID           0x7B21
00445 #define HEDRA_CLASS_ID          0xf21c5e23
00446 #define BOOLOBJ_CLASS_ID        0x387BB2BB //!< \deprecated use NEWBOOL_CLASS_ID
00447 #define NEWBOOL_CLASS_ID Class_ID(0x51db4f2f,0x1c596b1a) //!< Boolean object Class ID (replaces BOOLOBJ_CLASS_ID)
00448 
00449 
00451 
00452 #define XREFOBJ_CLASS_ID        Class_ID(0x92aab38c, 0) //!< XRef object class ID
00453 #define XREFATMOS_CLASS_ID  Class_ID(0x4869d60f, 0x21af2ae4) //!< XRef atmospheric effect class ID
00454 #define XREFMATERIAL_CLASS_ID Class_ID(0x272c0d4b, 0x432a414b) //!< XRef material class ID
00455 #define XREFCTRL_CLASS_ID Class_ID(0x32fb4637, 0x65fd482b) //!< XRef control class ID 
00456 
00457 
00459 
00460 #define GRID_OSNAP_CLASS_ID Class_ID(0x62f565d6, 0x110a1f97) 
00461 
00462 
00463 #define TEAPOT_CLASS_ID1        0xACAD13D3 //!< Teapot upper class ID
00464 #define TEAPOT_CLASS_ID2        0xACAD26D9 //!< Teapot lower class ID
00465 
00466 #define PATCHGRID_CLASS_ID      0x1070
00467 
00468 #define BONE_OBJ_CLASSID        Class_ID(0x28bf6e8d, 0x2ecca840) //!< Procedural bone object, subclass of GeomObject
00469 // block IDs
00470 enum BoneObj_Block { boneobj_params, };
00471 
00472 // boneobj_params IDs
00473 enum BoneObj_Params { 
00474     boneobj_width, boneobj_height, boneobj_taper, boneobj_length,
00475     boneobj_sidefins, boneobj_sidefins_size, boneobj_sidefins_starttaper, boneobj_sidefins_endtaper,
00476     boneobj_frontfin, boneobj_frontfin_size, boneobj_frontfin_starttaper, boneobj_frontfin_endtaper,
00477     boneobj_backfin,  boneobj_backfin_size,  boneobj_backfin_starttaper,  boneobj_backfin_endtaper,
00478     boneobj_genmap };
00479 
00481 
00482 #define RAIN_CLASS_ID           0x9bd61aa0
00483 #define SNOW_CLASS_ID           0x9bd61aa1
00484 
00485 
00487 
00488 #define WAVEOBJ_CLASS_ID        0x0013
00489 
00490 
00492 
00493 #define LOFTOBJ_CLASS_ID        0x1035
00494 #define LOFT_DEFCURVE_CLASS_ID  0x1036
00495 #define LOFT_GENERIC_CLASS_ID   0x10B0
00496 
00497 
00499 
00500 #define TARGET_CLASS_ID         0x1020  //!< Camera target class ID
00501 #define MORPHOBJ_CLASS_ID       0x1021  //!< Morph object class ID
00502 
00503 
00505 
00506 #define SPLINESHAPE_CLASS_ID    0x00000a
00507 #define LINEARSHAPE_CLASS_ID    0x0000aa
00508 #define SPLINE3D_CLASS_ID       0x1040
00509 #define NGON_CLASS_ID           0x1050
00510 #define DONUT_CLASS_ID          0x1060
00511 #define STAR_CLASS_ID           0x1995
00512 #define RECTANGLE_CLASS_ID      0x1065
00513 #define HELIX_CLASS_ID          0x1994
00514 #define ELLIPSE_CLASS_ID        0x1097
00515 #define CIRCLE_CLASS_ID         0x1999
00516 #define TEXT_CLASS_ID           0x1993
00517 #define ARC_CLASS_ID            0x1996
00518 #define HALF_ROUND_CLASS_ID     0x1997
00519 #define QUARTER_ROUND_CLASS_ID  0x1998
00520 #define PIPE_CLASS_ID           0x199A
00521 #define WALLED_RECTANGLE_CLASS_ID 0xd8bff66c
00522 #define CHANNEL_CLASS_ID        0x7dbc0e96
00523 #define ANGLE_CLASS_ID          0x93257030
00524 #define TEE_CLASS_ID            0xfaead70c
00525 #define WIDE_FLANGE_CLASS_ID    0xa2b72ef6
00526 
00527 
00529 
00530 #define SIMPLE_CAM_CLASS_ID     0x1001
00531 #define LOOKAT_CAM_CLASS_ID     0x1002
00532 
00533 
00535 
00536 #define OMNI_LIGHT_CLASS_ID         0x1011
00537 #define SPOT_LIGHT_CLASS_ID         0x1012
00538 #define DIR_LIGHT_CLASS_ID          0x1013
00539 #define FSPOT_LIGHT_CLASS_ID        0x1014
00540 #define TDIR_LIGHT_CLASS_ID         0x1015
00541 
00542 
00544 
00545 #define DUMMY_CLASS_ID          0x876234
00546 #define BONE_CLASS_ID           0x8a63c0
00547 #define TAPEHELP_CLASS_ID       0x02011
00548 #define GRIDHELP_CLASS_ID       0x02010
00549 #define POINTHELP_CLASS_ID      0x02013
00550 #define PROTHELP_CLASS_ID       0x02014
00551 
00552 
00554 
00555 #define STDUV_CLASS_ID          0x0000100
00556 
00557 
00559 
00560 #define STDXYZ_CLASS_ID         0x0000100
00561 
00562 
00564 
00565 #define STDTEXOUT_CLASS_ID      0x0000100
00566 
00567 
00569 
00570 #define DMTL_CLASS_ID           0x00000002  //!< StdMtl2: standard material.
00571 #define DMTL2_CLASS_ID          0x00000003  //!< \deprecated Was used when migrating from StdMtl to StdMtl2
00572 
00573 #ifndef NO_MTL_TOPBOTTOM // orb 01-07-2001
00574 #define CMTL_CLASS_ID           0x0000100  //!< Top-bottom material 
00575 #endif // NO_MTL_TOPBOTTOM
00576 
00577 #define MULTI_CLASS_ID          0x0000200  //!< Super class ID multi material
00578 #define MULTI_MATERIAL_CLASS_ID     Class_ID(MULTI_CLASS_ID, 0) //! Multi-sub-object material class ID
00579 
00580 #define DOUBLESIDED_CLASS_ID    0x0000210  //!< Double-sided material
00581 #define MIXMAT_CLASS_ID         0x0000250  //!< Blend material
00582 #define BAKE_SHELL_CLASS_ID     0x0000255  //!< Two material shell for baking
00583 
00584 #ifndef NO_MTL_MATTESHADOW // orb 01-07-2001
00585 #define MATTE_CLASS_ID          0x0000260  //!< Matte material class ID.
00586 #endif // NO_MTL_MATTESHADOW
00587 
00588 #define LOCKMAT_CLASS_ID    Class_ID(0x5c92647b, 0x35a5272a) //!< Locked material class ID
00589 
00590 
00592 
00593 #define CHECKER_CLASS_ID        0x0000200
00594 #define MARBLE_CLASS_ID         0x0000210
00595 #define MASK_CLASS_ID           0x0000220  //!< Mask texture
00596 #define MIX_CLASS_ID            0x0000230
00597 #define NOISE_CLASS_ID          0x0000234
00598 
00599 #ifndef NO_MAPTYPE_GRADIENT // orb 01-07-2001
00600 #define GRADIENT_CLASS_ID       0x0000270
00601 #endif // NO_MAPTYPE_GRADIENT
00602 
00603 #ifndef NO_MAPTYPE_RGBTINT // orb 01-07-2001
00604 #define TINT_CLASS_ID           0x0000224  //!< Tint texture
00605 #endif // NO_MAPTYPE_RGBTINT
00606 
00607 #define BMTEX_CLASS_ID          0x0000240  //!< Bitmap texture
00608 
00609 #ifndef NO_MAPTYPE_REFLECTREFRACT // orb 01-07-2001
00610 #define ACUBIC_CLASS_ID         0x0000250  //!< Reflect/refract
00611 #endif // NO_MAPTYPE_REFLECTREFRACT
00612 
00613 #ifndef NO_MAPTYPE_FLATMIRROR // orb 01-07-2001
00614 #define MIRROR_CLASS_ID         0x0000260  //!< Flat mirror
00615 #endif // NO_MAPTYPE_FLATMIRROR
00616 
00617 #define COMPOSITE_CLASS_ID      0x0000280   //!< Composite texture
00618 #define COMPOSITE_MATERIAL_CLASS_ID Class_ID(0x61dc0cd7, 0x13640af6)  //!< Composite Material
00619 
00620 #ifndef NO_MAPTYPE_RGBMULT // orb 01-07-2001
00621 #define RGBMULT_CLASS_ID        0x0000290   //!< RGB Multiply texture
00622 #endif //NO_MAPTYPE_RGBMULT
00623 
00624 #define FALLOFF_CLASS_ID        0x00002A0   //!< Falloff texture
00625 
00626 #ifndef NO_MAPTYPE_OUTPUT // orb 01-07-2001
00627 #define OUTPUT_CLASS_ID         0x00002B0   //!< Output texture
00628 #endif // NO_MAPTYPE_OUTPUT
00629 
00630 #define PLATET_CLASS_ID         0x00002C0   //!< Plate glass texture
00631 
00632 #define COLORCORRECTION_CLASS_ID    0x00002D0   //!< Color Correction texture
00633 
00634 #ifndef NO_MAPTYPE_VERTCOLOR // orb 01-07-2001
00635 #define VCOL_CLASS_ID           0x0934851   //!< Vertex color map
00636 // JBW: IDs for ParamBlock2 blocks and parameters
00637 // Parameter and ParamBlock IDs
00638 enum TextureMap_Vertex_Color_BlockID
00639 {
00640     vertexcolor_params
00641 };
00642 enum TextureMap_Vertex_Color_ParamIDs
00643 { 
00644     vertexcolor_map,
00645     vertexcolor_subid
00646 };
00647 #endif // NO_MAPTYPE_VERTCOLOR
00648 
00649 #define MULTIOUTPUTTOTEXMAP_CLASS_ID    Class_ID(0x896EF2FC, 0x44BD743F) //!< MultiOutputToTexmap texture
00650 
00651 
00653 
00654 #define STDSHADERS_CLASS_ID     0x00000035  // to 39 
00655 
00656 
00658 
00659 #define STD_SHADOW_MAP_CLASS_ID       0x0000100 
00660 #define STD_RAYTRACE_SHADOW_CLASS_ID  0x0000200
00661 
00662         
00664 
00665 #define SREND_CLASS_ID          0x000001 //!< Default scan-line renderer.
00666 
00668 
00669 
00670 #define COMPLETE_BAKE_ELEMENT_CLASS_ID          0x00010001
00671 #define SPECULAR_BAKE_ELEMENT_CLASS_ID          0x00010002
00672 #define DIFFUSE_BAKE_ELEMENT_CLASS_ID           0x00010003
00673 #define REFLECT_REFRACT_BAKE_ELEMENT_CLASS_ID   0x00010004
00674 #define SHADOW_BAKE_ELEMENT_CLASS_ID            0x00010005
00675 #define LIGHT_BAKE_ELEMENT_CLASS_ID             0x00010006
00676 #define NORMALS_ELEMENT_CLASS_ID                0x00010007
00677 #define BLEND_BAKE_ELEMENT_CLASS_ID             0x00010008
00678 #define ALPHA_BAKE_ELEMENT_CLASS_ID             0x00010009
00679 #define HEIGHT_BAKE_ELEMENT_CLASS_ID            0x0001000A
00680 #define AMBIENTOCCLUSION_BAKE_ELEMENT_CLASS_ID  0x0001000B
00681 
00682 
00684 
00685 #define MTL_LIB_CLASS_ID        0x001111
00686 #define MTLBASE_LIB_CLASS_ID    0x003333
00687 #define THE_SCENE_CLASS_ID      0x002222
00688 #define MEDIT_CLASS_ID          0x000C80
00689 #define MTL_CATEGORY_CLASS_ID   Class_ID(0xb8e3b2d, 0x19854ad2)
00690 
00691 
00693 #define STANDIN_CLASS_ID        0xffffffff  
00694 
00696 #define DEF_SOUNDOBJ_CLASS_ID   0x0000001
00697 
00699 #define FOG_CLASS_ID 0x10000001
00700 
00702 
00703 #define SKEWOSM_CLASS_ID            0x6f3cc2aa
00704 #define BENDOSM_CLASS_ID            0x00010
00705 #define TAPEROSM_CLASS_ID           0x00020
00706 #define TWISTOSM_CLASS_ID           0x00090
00707 #define SPLINEIKCONTROL_CLASS_ID    Class_ID(0x5f43ba4, 0x55fe9305) //AG added : 01/08/02
00708 
00709 #define UVWMAPOSM_CLASS_ID          0xf72b1
00710 #define SELECTOSM_CLASS_ID          0xf8611
00711 #define MATERIALOSM_CLASS_ID        0xf8612
00712 #define SMOOTHOSM_CLASS_ID          0xf8613
00713 #define NORMALOSM_CLASS_ID          0xf8614
00714 #define OPTIMIZEOSM_CLASS_ID        0xc4d31
00715 #define AFFECTREGION_CLASS_ID       0xc4e32
00716 #define SUB_EXTRUDE_CLASS_ID        0xc3a32
00717 #define TESSELLATE_CLASS_ID         0xa3b26ff2
00718 #define DELETE_CLASS_ID             0xf826ee01
00719 #define MESHSELECT_CLASS_ID         0x73d8ff93
00720 #define UVW_XFORM_CLASS_ID          0x5f32de12
00721 #define UVW_XFORM2_CLASS_ID         0x5f32de13 //SS 11/20/2002: added
00722 #define EDIT_POLY_MODIFIER_CLASS_ID Class_ID(0x79aa6e1d, 0x71a075b7)
00723 
00724 #define EXTRUDEOSM_CLASS_ID         0x000A0
00725 #define SURFREVOSM_CLASS_ID         0x000B0
00726 
00727 #define DISPLACEOSM_CLASS_ID        0xc4d32
00728 #define DISPLACE_OBJECT_CLASS_ID    0xe5240
00729 #define DISPLACE_WSM_CLASS_ID       0xe5241
00730 
00731 #define SINEWAVE_OBJECT_CLASS_ID    0x00030
00732 #define SINEWAVE_CLASS_ID           0x00040
00733 #define SINEWAVE_OMOD_CLASS_ID      0x00045
00734 #define LINWAVE_OBJECT_CLASS_ID     0x00035
00735 #define LINWAVE_CLASS_ID            0x00042
00736 #define LINWAVE_OMOD_CLASS_ID       0x00047
00737 
00738 #define GRAVITYOBJECT_CLASS_ID      0xe523c
00739 #define GRAVITYMOD_CLASS_ID         0xe523d
00740 #define WINDOBJECT_CLASS_ID         0xe523e
00741 #define WINDMOD_CLASS_ID            0xe523f
00742 
00743 #define DEFLECTOBJECT_CLASS_ID      0xe5242
00744 #define DEFLECTMOD_CLASS_ID         0xe5243
00745 
00746 #define BOMB_OBJECT_CLASS_ID        0xf2e32
00747 #define BOMB_CLASS_ID               0xf2e42
00748 
00749 
00751 
00752 #define FFDNMOSSQUARE_CLASS_ID      Class_ID(0x8ab36cc5,0x82d7fe74)
00753 #define FFDNMWSSQUARE_CLASS_ID      Class_ID(0x67ea40b3,0xfe7a30c4)
00754 #define FFDNMWSSQUARE_MOD_CLASS_ID  Class_ID(0xd6636ea2,0x9aa42bf3)
00755 
00756 #define FFDNMOSCYL_CLASS_ID         Class_ID(0x98f37a63,0x3ffe9bca)
00757 #define FFDNMWSCYL_CLASS_ID         Class_ID(0xfa4700be,0xbbe85051)
00758 #define FFDNMWSCYL_MOD_CLASS_ID     Class_ID(0xf1c630a3,0xaa8ff601)
00759 
00760 #define FFD44_CLASS_ID              Class_ID(0x21325596, 0x2cd10bd8)
00761 #define FFD33_CLASS_ID              Class_ID(0x21325596, 0x2cd10bd9)
00762 #define FFD22_CLASS_ID              Class_ID(0x21325596, 0x2cd10bd0)
00763 
00764 
00766 
00767 #define ACMOD_GEOM_GEOM_BOOLADD_CID 0x4e0f483a
00768 #define ACMOD_GEOM_GEOM_BOOLSUB_CID 0x61661a5c
00769 #define ACMOD_GEOM_GEOM_BOOLINT_CID 0x2a4f3945
00770 #define ACMOD_GEOM_GEOM_SIMPAGG_CID 0x40cb05ab
00771 
00772 #define ACMOD_SHAPE_GEOM_HOLE_CID   0x366307b0
00773 #define ACMOD_SHAPE_GEOM_INT_CID    0x782d8d50
00774 #define ACMOD_SHAPE_GEOM_EMBOSS_CID 0x7a13397c
00775 #define ACMOD_SHAPE_GEOM_REVEAL_CID 0x55ed658c
00776 
00777 
00778 #define GENERIC_AMSOLID_CLASS_ID    Class_ID(0x5bb661e8, 0xa2c27f02)
00779 
00781 
00782 #define LININTERP_FLOAT_CLASS_ID            0x2001
00783 #define LININTERP_POSITION_CLASS_ID         0x2002
00784 #define LININTERP_ROTATION_CLASS_ID         0x2003
00785 #define LININTERP_SCALE_CLASS_ID            0x2004
00786 #define PRS_CONTROL_CLASS_ID                0x2005
00787 #define LOOKAT_CONTROL_CLASS_ID             0x2006              
00788 
00789 #define HYBRIDINTERP_FLOAT_CLASS_ID         0x2007
00790 #define HYBRIDINTERP_POSITION_CLASS_ID      0x2008
00791 #define HYBRIDINTERP_ROTATION_CLASS_ID      0x2009
00792 #define HYBRIDINTERP_POINT3_CLASS_ID        0x200A
00793 #define HYBRIDINTERP_SCALE_CLASS_ID         0x2010
00794 #define HYBRIDINTERP_COLOR_CLASS_ID         0x2011
00795 #define HYBRIDINTERP_POINT4_CLASS_ID        0x2012
00796 #define HYBRIDINTERP_FRGBA_CLASS_ID         0x2013
00797 #define HYBRIDINTERP_POINT2_CLASS_ID        Class_ID(0x15205122, 0x1690125b)
00798 
00799 #define TCBINTERP_FLOAT_CLASS_ID            0x442311
00800 #define TCBINTERP_POSITION_CLASS_ID         0x442312
00801 #define TCBINTERP_ROTATION_CLASS_ID         0x442313
00802 #define TCBINTERP_POINT3_CLASS_ID           0x442314
00803 #define TCBINTERP_SCALE_CLASS_ID            0x442315
00804 #define TCBINTERP_POINT4_CLASS_ID           0x442316
00805 
00806 #define MASTERPOINTCONT_CLASS_ID            0xd9c20ff
00807 
00808 
00810 
00811 #define PF_SUBCLASS_ID_PARTB        0x1eb34000
00812 #define PF_OPERATOR_SUBCLASS_ID     0x74f93a02
00813 #define PF_OPERATOR3D_SUBCLASS_ID   0x74f93a03
00814 #define PF_TEST_SUBCLASS_ID         0x74f93a04
00815 #define PF_TEST3D_SUBCLASS_ID       0x74f93a05
00816 #define PF_ITEM_SUBCLASS_ID         0x74f93a06
00817 #define PF_OBJECT_SUBCLASS_ID       0x74f93a07
00818 
00819 
00821 
00822 class ISave;
00823 class ILoad;
00824 class Interface;
00825 class ActionTable;
00826 class ParamBlockDesc2;
00827 class IParamBlock2;
00828 class IObjParam;
00829 class Animatable;
00830 class ParamMap2UserDlgProc;
00831 class IParamMap2;
00832 class FPInterface;
00833 class Manipulator;
00834 class ReferenceTarget;
00835 
00841 #pragma warning(push)
00842 #pragma warning(disable:4100)
00843 class ClassDesc: public MaxHeapOperators {
00844     private:
00845         Tab<FPInterface*>       interfaces;     // the FnPub interfaces published by this plugin
00846     public:
00847         virtual                 ~ClassDesc() {}
00853         virtual int             IsPublic()=0;  
00854         
00886         virtual void *          Create(BOOL loading=FALSE)=0;   // return a pointer to an instance of the class.
00887         
00905         virtual int             BeginCreate(Interface *i) {return 0;}
00906         
00916         virtual int             EndCreate(Interface *i) {return 0;};
00917         
00921         virtual const MCHAR*    ClassName()=0;
00922         
00929         virtual SClass_ID       SuperClassID()=0;
00930         
00939         virtual Class_ID        ClassID()=0;
00940         
00969         virtual const MCHAR*    Category()=0;   // primitive/spline/loft/ etc
00970         
01002         virtual BOOL            OkToCreate(Interface *i) { return TRUE; }   // return FALSE to disable create button        
01003         
01008         virtual BOOL            HasClassParams() {return FALSE;}
01009         
01015         virtual void            EditClassParams(HWND hParent) {}
01016         
01025         virtual void            ResetClassParams(BOOL fileReset=FALSE) {}
01026         
01039         virtual int NumActionTables() { return 0; }
01040         
01044         virtual ActionTable* GetActionTable(int i) { return NULL; }
01046 
01048 
01049 
01051         virtual BOOL IsManipulator() { return FALSE; }
01052 
01060         virtual BOOL CanManipulate(ReferenceTarget* hTarget) { return FALSE; }
01061 
01067         virtual BOOL CanManipulateNode(INode* pNode) { return FALSE; }
01068 
01083         virtual Manipulator* CreateManipulator(
01084             ReferenceTarget* hTarget,
01085             INode* pNode) { return NULL; }
01086 
01093         virtual Manipulator* CreateManipulator(INode* pNode) {return NULL;}
01095 
01097 
01098 
01102         virtual BOOL            NeedsToSave() { return FALSE; }
01103         
01108         virtual IOResult        Save(ISave *isave) { return IO_OK; }
01109         
01115         virtual IOResult        Load(ILoad *iload) { return IO_OK; }
01117 
01130         virtual DWORD           InitialRollupPageState() { return 0x7fffffff; }
01131 
01134         virtual const MCHAR*    InternalName() { return NULL; }
01135         
01138         virtual HINSTANCE       HInstance() { return NULL; }
01139         
01141 
01142 
01143         virtual int             NumParamBlockDescs() { return 0; }
01144         
01147         virtual ParamBlockDesc2* GetParamBlockDesc(int i) { return NULL; }
01148         
01152         virtual ParamBlockDesc2* GetParamBlockDescByID(BlockID id) { return NULL; }
01153         
01158         virtual void            AddParamBlockDesc(ParamBlockDesc2* pbd) { }
01160         
01162 
01163 
01173         virtual void            BeginEditParams(IObjParam *ip, ReferenceMaker* obj, ULONG flags, Animatable *prev) { }
01174         
01184         virtual void            EndEditParams(IObjParam *ip, ReferenceMaker* obj, ULONG flags, Animatable *prev) { }
01185         
01190         virtual void            InvalidateUI(ParamBlockDesc2* pbd) { }
01192 
01194         CoreExport virtual MCHAR* GetRsrcString(INT_PTR id);
01195 
01199         virtual void            MakeAutoParamBlocks(ReferenceMaker* owner) { }
01200 
01202 
01203 
01204         virtual int             NumParamMaps() { return 0; }
01205 
01208         virtual IParamMap2*     GetParamMap(int i) { return NULL; }
01209 
01212         virtual IParamMap2*     GetParamMap(ParamBlockDesc2* pbd) { return NULL; }
01213         
01219         virtual void            SetUserDlgProc(ParamBlockDesc2* pbd, ParamMap2UserDlgProc* proc=NULL) { }
01220 
01225         virtual ParamMap2UserDlgProc* GetUserDlgProc(ParamBlockDesc2* pbd) { return NULL; }
01227 
01235         virtual bool DrawRepresentation(COLORREF bkColor, HDC hDC, Rect& rect) { return FALSE; }
01236 
01238 
01239 
01240         virtual int             NumInterfaces() { return interfaces.Count(); }
01241 
01243         virtual FPInterface*    GetInterfaceAt(int i) { return interfaces[i]; }
01244 
01247         CoreExport virtual FPInterface* GetInterface(Interface_ID id);
01248 
01252         CoreExport virtual FPInterface* GetInterface(MCHAR* name);
01253         
01257         CoreExport virtual void AddInterface(FPInterface* fpi);
01258         
01260         virtual void            ClearInterfaces() { interfaces.ZeroCount(); }
01262         
01269         virtual Class_ID        SubClassID() { return Class_ID(); }
01270 
01281         virtual INT_PTR Execute(int cmd, ULONG_PTR arg1=0, ULONG_PTR arg2=0, ULONG_PTR arg3=0) { return 0; } 
01282     };
01283 
01284 
01285 #pragma warning(pop)
01286 
01289 
01290 #define I_EXEC_CTRL_BYPASS_TREE_VIEW 1001 
01291 #define I_EXEC_GET_SOA_STATE 1002 
01292 #define I_EXEC_EVAL_SOA_TIME 1003
01293 
01294 
01296 CoreExport void* CreateInstance(SClass_ID superID, Class_ID classID);
01297 
01303 struct ClassDescReplaced: public MaxHeapOperators {  
01305     const ClassDesc* oldClassDesc;
01307     const ClassDesc* newClassDesc;
01308 }; 
01309