static void TraverseNode(node *n, gen *igens) { if (n->type == TNUM) return; if (n->type == TGEN) { if (WordGen(n->cont.g) == (void *)0) igens[ n->cont.g - NumberOfAbstractGens() ] = 1; return; } TraverseNode(n->cont.op.l, igens); TraverseNode(n->cont.op.r, igens); }
// Traverse the node counting polygons. static void TraverseNode(INode* node, TimeValue t) { const ObjectState& os = node->EvalWorldState(t); Object* ob = os.obj; if (ob!=NULL) { int numFaces, numVerts; GetPolygonCount(t, ob, numFaces, numVerts); faceCount += numFaces; if (node->Selected()) selFaceCount += numFaces; } int i, numChildren = node->NumberOfChildren(); for(i=0; i<numChildren; i++) TraverseNode(node->GetChildNode(i), t); }
int NumberOfIdenticalGensNode(node *n) { gen g, nr; if (IdenticalGenNumberNode != (gen *)0) Free(IdenticalGenNumberNode); IdenticalGenNumberNode = (gen *)Allocate((NumberOfIdenticalGens() + 1) * sizeof(gen)); TraverseNode(n, IdenticalGenNumberNode); for (nr = 0, g = 1; g <= NumberOfIdenticalGens(); g++) if (IdenticalGenNumberNode[ g ] == 1) IdenticalGenNumberNode[ g ] = ++nr; NrIdenticalGensNode = nr; return nr; }
// Traverse all the nodes in the scene graph. static void CountFaces(Interface* ip) { TraverseNode(ip->GetRootNode(), ip->GetTime()); }