Below is a code example using the physique export interface (IPhysiqueExport) which uses the function FindPhysiqueModifier() from the topic Finding a Physique Modifier.
void ExportPhysiqueData(TimeValue t, ModContext &mc, ObjectState *os, INode *node) { Modifier *phyMod = FindPhysiqueModifier(node); if (!phyMod) return; // Physique Modifier does not exist for given Node // create a Physique Export Interface for the given Physique Modifier IPhysiqueExport *phyExport = ( IPhysiqueExport*)phyMod->GetInterface(I_PHYINTERFACE); if (phyExport) { // create a ModContext Export Interface for the specific node of the Physique Modifier IPhyContextExport *mcExport = ( IPhyContextExport *)phyExport->GetContextInterface(node); if (mcExport) { // we convert all vertices to Rigid in this example mcExport->ConvertToRigid(TRUE); // compute the transformed Point3 at time t for (int i = 0; i < os->obj->NumPoints(); i++) { IPhyVertexExport *vtxExport = mcExport->GetVertexInterface(i); if (vtxExport) { //need to check if vertex has blending if (vtxExport->GetVertexType() & BLENDED_TYPE) { IPhyBlendedRigidVertex *vtxBlend = ( IPhyBlendedRigidVertex *)vtxExport; Point3 BlendP(0.0f, 0.0f, 0.0f); for (int n = 0; n < vtxBlend->GetNumberNodes(); n++) { INode *Bone = vtxBlend->GetNode(n); Point3 Offset = vtxBlend->GetOffsetVector(n); float Weight = vtxBlend->GetWeight(n); BlendP += (Bone->GetNodeTM(t) * Offset) * Weight; } // set the Point of the object (to test the export is correct) os->obj->SetPoint(i, BlendP); mcExport->ReleaseVertexInterface(vtxExport); vtxExport = NULL; } else { IPhyRigidVertex *vtxNoBlend = ( IPhyRigidVertex *)vtxExport; INode *Bone = vtxNoBlend->GetNode(); Point3 Offset = vtxNoBlend->GetOffsetVector(); // set the Point of the object (to test the export is correct) os->obj->SetPoint(i, Bone->GetNodeTM(t) * Offset); mcExport->ReleaseVertexInterface(vtxExport); vtxExport = NULL; } } } phyExport->ReleaseContextInterface(mcExport); } phyMod->ReleaseInterface(I_PHYINTERFACE, phyExport); }