The mesh strip data is accessible through the Mesh::strips member variable. This is declared as a StripTab which is a Tab<> collection of Strip pointers.
The data is maintained as an array of indexes into the main mesh data of the vertex, normals and texture coordinates each being its own DWORD tab. If you are writing hardware shaders then the graphics layer will pass this information in the form of a MeshData pointer
The following code can be used to extract the mesh strip data:
// Utility function to give us the TriObject TriObject* GetTriObjectFromNode(INode *node, TimeValue t, int &deleteIt) { deleteIt = FALSE; Object *obj = node->EvalWorldState(t).obj; if (obj->CanConvertToType(Class_ID(TRIOBJ_CLASS_ID, 0))) { TriObject *tri = (TriObject *) obj-> ConvertToType(t, Class_ID(TRIOBJ_CLASS_ID, 0)); // Note that the TriObject should only be deleted // if the pointer to it is not equal to the object // pointer that called ConvertToType() if (obj != tri) deleteIt = TRUE; return tri; } else { return NULL; } } void GetStripData() { INode *sNode = ip->GetSelNode(0); if(!sNode) return; BOOL deleteTri = FALSE; TriObject *pTri = GetTriObjectFromNode(sNode, ip->GetTime(), deleteTri); Mesh m = pTri->mesh; //Make sure the strips are there and upto date ? m.BuildStripsAndEdges(); StripTab *pStab = m.stab; int c = pStab->Count(); //How may Strips do we have ? for(int i=0; i<c; i++) { Strip *pS = (*pStab)[i]; // Access the Strip data int d= pS->v.Count(); // Access the Vertex Tab data for(int j=0; j<d; j++) { DebugPrint("Vertex Index %d\n", pS->v[j]); } } //If we own it - remember to delete it !! if(deleteTri) pTri->DeleteThis(); }
The same method would be used to access the normals and texture vertex data.