List of interface IDs to be used with void* Animatable::GetInterface(ULONG id) Checking whether an animatable implements a certain interface is the recommended way for determining if that animatable can be used as the type represented by that interface.
For example, given an Animatable* anim, one can find out whether it can be used as a controller by simply asking for the I_CONTROL interface. In order to simplify the task of querying for the most common interfaces, use one of the predefined macros, such as 
Example of using the predefined macros:
| Macros | |
| #define | I_CONTROL 0x00001010 | 
| An Animatable supporting this interface is a Control.  More... | |
| #define | I_IKCONTROL 0x00001020 | 
| An Animatable supporting this interface is an IIKControl.  More... | |
| #define | I_IKCHAINCONTROL 0x00001030 | 
| An Animatable supporting this interface is an IIKChainControl.  More... | |
| #define | I_WIRECONTROL 0x00001040 | 
| An Animatable supporting this interface is an IBaseWireControl.  More... | |
| #define | I_SCRIPTCONTROL 0x00001050 | 
| An Animatable supporting this interface is an IBaseScriptControl.  More... | |
| #define | I_MASTER 0x00001060 | 
| An Animatable supporting this interface is a ReferenceTarget.  More... | |
| #define | I_EASELIST 0x00001070 | 
| An Animatable supporting this interface is an EaseCurveList.  More... | |
| #define | I_MULTLIST 0x00001080 | 
| An Animatable supporting this interface is a MultCurveList.  More... | |
| #define | I_BASEOBJECT 0x00001090 | 
| An Animatable supporting this interface is a BaseObject.  More... | |
| #define | I_WSMOBJECT 0x000010a0 | 
| An Animatable supporting this interface is a WSMObject.  More... | |
| #define | I_DERIVEDOBJECT 0x000010b0 | 
| An Animatable supporting this interface is an IDerivedObject.  More... | |
| #define | I_OBJECT 0x000010c0 | 
| An Animatable supporting this interface is an Object.  More... | |
| #define | I_PARTICLEOBJ 0x000010d0 | 
| An Animatable supporting this interface is a ParticleObject.  More... | |
| #define | I_LIGHTOBJ 0x000010e0 | 
| An Animatable supporting this interface is a LightObject.  More... | |
| #define | I_SIMPLEPARTICLEOBJ 0x000010f0 | 
| An Animatable supporting this interface is a SimpleParticle.  More... | |
| #define | I_KEYCONTROL 0x00001100 | 
| An Animatable supporting this interface is an IKeyControl.  More... | |
| #define | I_KEYCONTROL2 0x00001110 | 
| An Animatable supporting this interface is an IKeyControl2.  More... | |
| #define | I_SETKEYCONTROL 0x00001120 | 
| An Animatable supporting this interface is an ISetKey.  More... | |
| #define | I_SYSTEM_XREF 0x00001130 | 
| An Animatable supporting this interface is an ISystemXRef.  More... | |
| #define | I_TEXTOBJECT 0x00001140 | 
| An Animatable supporting this interface is an ITextObject.  More... | |
| #define | I_WAVESOUND 0x00001150 | 
| An Animatable supporting this interface is an IWaveSound.  More... | |
| #define | I_SUBMTLAPI 0x00001160 | 
| An Animatable supporting this interface is an ISubMtlAPI.  More... | |
| #define | I_NEWPARTPOD 0x00001170 | 
| An Animatable supporting this interface is a ParticlePodObj.  More... | |
| #define | I_NEWPARTSOURCE 0x00001180 | 
| An Animatable supporting this interface is a BasicSourceObj.  More... | |
| #define | I_NEWPARTOPERATOR 0x00001190 | 
| An Animatable supporting this interface is an IOperatorInterface.  More... | |
| #define | I_NEWPARTTEST 0x000011a0 | 
| An Animatable supporting this interface is an ITestInterface.  More... | |
| #define | I_MESHSELECT 0x000011b0 | 
| An Animatable supporting this interface is an IMeshSelect.  More... | |
| #define | I_MESHSELECTDATA 0x000011c0 | 
| An Animatable supporting this interface is an IMeshSelectData.  More... | |
| #define | I_MAXSCRIPTPLUGIN 0x000011d0 | 
| An Animatable supporting this interface is a MSPlugin.  More... | |
| #define | I_MESHDELTAUSER 0x000011e0 | 
| An Animatable supporting this interface is a MeshDeltaUser.  More... | |
| #define | I_MESHDELTAUSERDATA 0x000011f0 | 
| An Animatable supporting this interface is a MeshDeltaUserData.  More... | |
| #define | I_SPLINESELECT 0x00001200 | 
| An Animatable supporting this interface is an ISplineSelect.  More... | |
| #define | I_SPLINESELECTDATA 0x00001210 | 
| An Animatable supporting this interface is an ISplineSelectData.  More... | |
| #define | I_SPLINEOPS 0x00001220 | 
| An Animatable supporting this interface is an ISplineOps.  More... | |
| #define | I_PATCHSELECT 0x00001230 | 
| An Animatable supporting this interface is an IPatchSelect.  More... | |
| #define | I_PATCHSELECTDATA 0x00001240 | 
| An Animatable supporting this interface is an IPatchSelectData.  More... | |
| #define | I_PATCHOPS 0x00001250 | 
| An Animatable supporting this interface is an IPatchOps.  More... | |
| #define | I_SUBMAP 0x00001260 | 
| An Animatable supporting this interface is an ISubMap.  More... | |
| #define | I_MITRANSLATOR 0x00001270 | 
| unused - interface to max connection to mental ray  More... | |
| #define | I_MENTALRAY 0x00001280 | 
| An Animatable supporting this interface is a mrItem*.  More... | |
| #define | I_NEWMTLINTERFACE 0x00001290 | 
| An Animatable supporting this interface is an IChkMtlAPI.  More... | |
| #define | I_COMPONENT 0x000012a0 | 
| An Animatable supporting this interface is an IComponent.  More... | |
| #define | I_REFARRAY 0x000012b0 | 
| An Animatable supporting this interface is an IRefArray.  More... | |
| #define | I_LINKTMCTRL 0x000012c0 | 
| An Animatable supporting this interface is an Link Transform Control.  More... | |
| #define | I_SUBTARGETCTRL 0x000012d0 | 
| An Animatable supporting this interface is an Sub Target Control.  More... | |
| #define | I_REAGENT 0x000012e0 | 
| An Animatable supporting this interface is an IReagent.  More... | |
| #define | I_GEOMIMP 0x000012f0 | 
| An Animatable supporting this interface is an IGeomImp - implementaion neutral interface to geometry caches - REQUIRES RELEASE.  More... | |
| #define | I_AGGREGATION 0x00001300 | 
| An Animatable supporting this interface is an IAggregation.  More... | |
| #define | I_VALENCE 0x00001310 | 
| An Animatable supporting this interface is an IValence.  More... | |
| #define | I_GUEST 0x00001320 | 
| An Animatable supporting this interface is an IGuest.  More... | |
| #define | I_HOST 0x00001330 | 
| An Animatable supporting this interface is an IHost.  More... | |
| #define | I_SCENEOBJECT 0x00001340 | 
| An Animatable supporting this interface is an Object.  More... | |
| #define | I_MULTITANGENT 0x00001350 | 
| An Animatable supporting this interface is an IAdjustMultipleTangents.  More... | |
| #define | I_SOFTSELECT 0x00001360 | 
| An Animatable supporting this interface is an ISoftSelect.  More... | |
| #define | I_UNREPLACEABLECTL 0x00001370 | 
| An Animatable supporting this interface is an IUnReplaceableControl – used for the exposetransform controllers.  More... | |
| #define | I_EULERCTRL 0x00001380 | 
| An Animatable supporting this interface is an IEulerControl – used for euler controllers in order to get/set the xyz ordering.  More... | |
| #define | I_LOCKED 0x00001390 | 
| An Animatable supporting this interface is an ILockedTrack.  More... | |
| #define | I_LOCKED_CLIENT 0x000013a0 | 
| An Animatable supporting this interface is an ILockedTrackClient.  More... | |
| #define | I_OBJECTSUPERCLASS_NOT_OBJECTCLASS 0x000013b0 | 
| An Animatable supporting this interface reports a superclassid corresponding to an Object (for example, GEOMOBJECT_CLASS_ID), but creating an instance doesn't create an Object-derived object.  More... | |
| #define | I_COMPOSITESUBMTLAPI 0x000013c0 | 
| An Animatable supporting this interface is an ICompositeSubMtlAPI.  More... | |
| #define | I_MTLIDSET 0x000013d0 | 
| An Animatable supporting this interface is an IMtlIdSet.  More... | |
| #define | I_BUFFERABLE 0x000013e0 | 
| An Animatable supporting this interface is an IBufferable.  More... | |
| #define | I_TANGENT 0x000013f0 | 
| An Animatable supporting this interface is an IAdjustTangents.  More... | |
| #define | I_USERINTERFACE 0x0000ffff | 
| Plug-in defined interfaces should be greater than this value.  More... | |
| #define | GetControlInterface(anim) ((Control*)(anim)->GetInterface(I_CONTROL)) | 
| #define | GetObjectInterface(anim) ((BaseObject*)(anim)->GetInterface(I_BASEOBJECT)) | 
| #define | GetParticleInterface(anim) ((ParticleObject*)(anim)->GetInterface(I_PARTICLEOBJ)) | 
| #define | GetKeyControlInterface(anim) ((IKeyControl*)(anim)->GetInterface(I_KEYCONTROL)) | 
| #define | GetSetKeyControlInterface(anim) ((ISetKey*)(anim)->GetInterface(I_SETKEYCONTROL)) | 
| #define | GetMasterController(anim) ((ReferenceTarget*)(anim)->GetInterface(I_MASTER)) | 
| #define | GetTextObjectInterface(anim) ((ITextObject*)(anim)->GetInterface(I_TEXTOBJECT)) | 
| #define | GetWaveSoundInterface(anim) ((IWaveSound*)(anim)->GetInterface(I_WAVESOUND)) | 
| #define | GetMeshSelectInterface(anim) ((IMeshSelect*)(anim)->GetInterface(I_MESHSELECT)) | 
| #define | GetMeshSelectDataInterface(anim) ((IMeshSelectData*)(anim)->GetInterface(I_MESHSELECTDATA)) | 
| #define | GetMeshDeltaUserInterface(anim) ((MeshDeltaUser*)(anim)->GetInterface(I_MESHDELTAUSER)) | 
| #define | GetMeshDeltaUserDataInterface(anim) ((MeshDeltaUserData*)(anim)->GetInterface(I_MESHDELTAUSERDATA)) | 
| #define | GetTangentInterface(anim) ((IAdjustTangents*)(anim)->GetInterface(I_TANGENT)) | 
| #define | GetMultiTangentInterface(anim) ((IAdjustMultipleTangents*)(anim)->GetInterface(I_MULTITANGENT)) | 
| #define | GetSoftSelectInterface(anim) ((ISoftSelect*)(anim)->GetInterface(I_SOFTSELECT)) | 
| #define | GetLockedTrackInterface(anim) ((ILockedTrack*)(anim)->GetInterface(I_LOCKED)) | 
| #define | GetLockedTrackClientInterface(client) ((ILockedTrackClient*)(client)->GetInterface(I_LOCKED_CLIENT)) | 
| #define I_CONTROL 0x00001010 | 
An Animatable supporting this interface is a Control.
| #define I_IKCONTROL 0x00001020 | 
An Animatable supporting this interface is an IIKControl.
| #define I_IKCHAINCONTROL 0x00001030 | 
An Animatable supporting this interface is an IIKChainControl.
| #define I_WIRECONTROL 0x00001040 | 
An Animatable supporting this interface is an IBaseWireControl.
| #define I_SCRIPTCONTROL 0x00001050 | 
An Animatable supporting this interface is an IBaseScriptControl.
| #define I_MASTER 0x00001060 | 
An Animatable supporting this interface is a ReferenceTarget.
| #define I_EASELIST 0x00001070 | 
An Animatable supporting this interface is an EaseCurveList.
| #define I_MULTLIST 0x00001080 | 
An Animatable supporting this interface is a MultCurveList.
| #define I_BASEOBJECT 0x00001090 | 
An Animatable supporting this interface is a BaseObject.
| #define I_WSMOBJECT 0x000010a0 | 
An Animatable supporting this interface is a WSMObject.
| #define I_DERIVEDOBJECT 0x000010b0 | 
An Animatable supporting this interface is an IDerivedObject.
| #define I_OBJECT 0x000010c0 | 
An Animatable supporting this interface is an Object.
| #define I_PARTICLEOBJ 0x000010d0 | 
An Animatable supporting this interface is a ParticleObject.
| #define I_LIGHTOBJ 0x000010e0 | 
An Animatable supporting this interface is a LightObject.
| #define I_SIMPLEPARTICLEOBJ 0x000010f0 | 
An Animatable supporting this interface is a SimpleParticle.
| #define I_KEYCONTROL 0x00001100 | 
An Animatable supporting this interface is an IKeyControl.
| #define I_KEYCONTROL2 0x00001110 | 
An Animatable supporting this interface is an IKeyControl2.
| #define I_SETKEYCONTROL 0x00001120 | 
An Animatable supporting this interface is an ISetKey.
| #define I_SYSTEM_XREF 0x00001130 | 
An Animatable supporting this interface is an ISystemXRef.
| #define I_TEXTOBJECT 0x00001140 | 
An Animatable supporting this interface is an ITextObject.
| #define I_WAVESOUND 0x00001150 | 
An Animatable supporting this interface is an IWaveSound.
| #define I_SUBMTLAPI 0x00001160 | 
An Animatable supporting this interface is an ISubMtlAPI.
| #define I_NEWPARTPOD 0x00001170 | 
An Animatable supporting this interface is a ParticlePodObj.
| #define I_NEWPARTSOURCE 0x00001180 | 
An Animatable supporting this interface is a BasicSourceObj.
| #define I_NEWPARTOPERATOR 0x00001190 | 
An Animatable supporting this interface is an IOperatorInterface.
| #define I_NEWPARTTEST 0x000011a0 | 
An Animatable supporting this interface is an ITestInterface.
This is an obsolete interface.
| #define I_MESHSELECT 0x000011b0 | 
An Animatable supporting this interface is an IMeshSelect.
| #define I_MESHSELECTDATA 0x000011c0 | 
An Animatable supporting this interface is an IMeshSelectData.
| #define I_MAXSCRIPTPLUGIN 0x000011d0 | 
An Animatable supporting this interface is a MSPlugin.
| #define I_MESHDELTAUSER 0x000011e0 | 
An Animatable supporting this interface is a MeshDeltaUser.
| #define I_MESHDELTAUSERDATA 0x000011f0 | 
An Animatable supporting this interface is a MeshDeltaUserData.
| #define I_SPLINESELECT 0x00001200 | 
An Animatable supporting this interface is an ISplineSelect.
| #define I_SPLINESELECTDATA 0x00001210 | 
An Animatable supporting this interface is an ISplineSelectData.
| #define I_SPLINEOPS 0x00001220 | 
An Animatable supporting this interface is an ISplineOps.
| #define I_PATCHSELECT 0x00001230 | 
An Animatable supporting this interface is an IPatchSelect.
| #define I_PATCHSELECTDATA 0x00001240 | 
An Animatable supporting this interface is an IPatchSelectData.
| #define I_PATCHOPS 0x00001250 | 
An Animatable supporting this interface is an IPatchOps.
| #define I_SUBMAP 0x00001260 | 
An Animatable supporting this interface is an ISubMap.
| #define I_MITRANSLATOR 0x00001270 | 
unused - interface to max connection to mental ray
| #define I_MENTALRAY 0x00001280 | 
An Animatable supporting this interface is a mrItem*.
| #define I_NEWMTLINTERFACE 0x00001290 | 
An Animatable supporting this interface is an IChkMtlAPI.
| #define I_COMPONENT 0x000012a0 | 
An Animatable supporting this interface is an IComponent.
| #define I_REFARRAY 0x000012b0 | 
An Animatable supporting this interface is an IRefArray.
| #define I_LINKTMCTRL 0x000012c0 | 
An Animatable supporting this interface is an Link Transform Control.
| #define I_SUBTARGETCTRL 0x000012d0 | 
An Animatable supporting this interface is an Sub Target Control.
| #define I_REAGENT 0x000012e0 | 
An Animatable supporting this interface is an IReagent.
| #define I_GEOMIMP 0x000012f0 | 
An Animatable supporting this interface is an IGeomImp - implementaion neutral interface to geometry caches - REQUIRES RELEASE.
| #define I_AGGREGATION 0x00001300 | 
An Animatable supporting this interface is an IAggregation.
| #define I_VALENCE 0x00001310 | 
An Animatable supporting this interface is an IValence.
| #define I_GUEST 0x00001320 | 
An Animatable supporting this interface is an IGuest.
| #define I_HOST 0x00001330 | 
An Animatable supporting this interface is an IHost.
| #define I_SCENEOBJECT 0x00001340 | 
An Animatable supporting this interface is an Object.
| #define I_MULTITANGENT 0x00001350 | 
An Animatable supporting this interface is an IAdjustMultipleTangents.
| #define I_SOFTSELECT 0x00001360 | 
An Animatable supporting this interface is an ISoftSelect.
| #define I_UNREPLACEABLECTL 0x00001370 | 
An Animatable supporting this interface is an IUnReplaceableControl – used for the exposetransform controllers.
| #define I_EULERCTRL 0x00001380 | 
An Animatable supporting this interface is an IEulerControl – used for euler controllers in order to get/set the xyz ordering.
| #define I_LOCKED 0x00001390 | 
An Animatable supporting this interface is an ILockedTrack.
| #define I_LOCKED_CLIENT 0x000013a0 | 
An Animatable supporting this interface is an ILockedTrackClient.
| #define I_OBJECTSUPERCLASS_NOT_OBJECTCLASS 0x000013b0 | 
An Animatable supporting this interface reports a superclassid corresponding to an Object (for example, GEOMOBJECT_CLASS_ID), but creating an instance doesn't create an Object-derived object.
Instead it derives just from ReferenceTarget. Examples of this are the NURBS classes RmModel and EmExternalObject.
| #define I_COMPOSITESUBMTLAPI 0x000013c0 | 
An Animatable supporting this interface is an ICompositeSubMtlAPI.
| #define I_MTLIDSET 0x000013d0 | 
An Animatable supporting this interface is an IMtlIdSet.
| #define I_BUFFERABLE 0x000013e0 | 
An Animatable supporting this interface is an IBufferable.
| #define I_TANGENT 0x000013f0 | 
An Animatable supporting this interface is an IAdjustTangents.
| #define I_USERINTERFACE 0x0000ffff | 
Plug-in defined interfaces should be greater than this value.
| #define GetControlInterface | ( | anim | ) | ((Control*)(anim)->GetInterface(I_CONTROL)) | 
| #define GetObjectInterface | ( | anim | ) | ((BaseObject*)(anim)->GetInterface(I_BASEOBJECT)) | 
| #define GetParticleInterface | ( | anim | ) | ((ParticleObject*)(anim)->GetInterface(I_PARTICLEOBJ)) | 
| #define GetKeyControlInterface | ( | anim | ) | ((IKeyControl*)(anim)->GetInterface(I_KEYCONTROL)) | 
| #define GetSetKeyControlInterface | ( | anim | ) | ((ISetKey*)(anim)->GetInterface(I_SETKEYCONTROL)) | 
| #define GetMasterController | ( | anim | ) | ((ReferenceTarget*)(anim)->GetInterface(I_MASTER)) | 
| #define GetTextObjectInterface | ( | anim | ) | ((ITextObject*)(anim)->GetInterface(I_TEXTOBJECT)) | 
| #define GetWaveSoundInterface | ( | anim | ) | ((IWaveSound*)(anim)->GetInterface(I_WAVESOUND)) | 
| #define GetMeshSelectInterface | ( | anim | ) | ((IMeshSelect*)(anim)->GetInterface(I_MESHSELECT)) | 
| #define GetMeshSelectDataInterface | ( | anim | ) | ((IMeshSelectData*)(anim)->GetInterface(I_MESHSELECTDATA)) | 
| #define GetMeshDeltaUserInterface | ( | anim | ) | ((MeshDeltaUser*)(anim)->GetInterface(I_MESHDELTAUSER)) | 
| #define GetMeshDeltaUserDataInterface | ( | anim | ) | ((MeshDeltaUserData*)(anim)->GetInterface(I_MESHDELTAUSERDATA)) | 
| #define GetTangentInterface | ( | anim | ) | ((IAdjustTangents*)(anim)->GetInterface(I_TANGENT)) | 
| #define GetMultiTangentInterface | ( | anim | ) | ((IAdjustMultipleTangents*)(anim)->GetInterface(I_MULTITANGENT)) | 
| #define GetSoftSelectInterface | ( | anim | ) | ((ISoftSelect*)(anim)->GetInterface(I_SOFTSELECT)) | 
| #define GetLockedTrackInterface | ( | anim | ) | ((ILockedTrack*)(anim)->GetInterface(I_LOCKED)) | 
| #define GetLockedTrackClientInterface | ( | client | ) | ((ILockedTrackClient*)(client)->GetInterface(I_LOCKED_CLIENT)) |