/* ================ idCollisionModelManagerLocal::WriteNodes ================ */ void idCollisionModelManagerLocal::WriteNodes( idFile *fp, cm_node_t *node ) { fp->WriteFloatString( "\t( %d %f )\n", node->planeType, node->planeDist ); if ( node->planeType != -1 ) { WriteNodes( fp, node->children[0] ); WriteNodes( fp, node->children[1] ); } }
int main ( void ) { int edgeIndex = 0; int nodeIndex = 0; int k = 0; int nodes = 0; int edgesNumber = 0; int newNodes = 0; int edgesCount = 0; g_randomNumbersFile = fopen("randomNumbers","r"); g_graphFile = fopen("graphModel.dot","w"); srand (time (NULL)); edgesNumber = MIN_RANKS + (rand () % (MAX_RANKS - MIN_RANKS)); WriteHeader(); for ( edgeIndex = 0; edgeIndex < edgesNumber; ++edgeIndex ) { /* New nodes of 'higher' rank than all nodes generated till now. */ newNodes = MIN_PER_RANK + (rand () % (MAX_PER_RANK - MIN_PER_RANK)); /* Edges from old nodes ('nodes') to new ones ('new_nodes'). */ for ( nodeIndex = 0; nodeIndex < nodes; ++nodeIndex ) { for ( k = 0; k < newNodes; ++k ) { if ( (rand () % 100) < PERCENT ) { ++edgesCount; WriteEdges(nodeIndex, k, nodes); } } } nodes += newNodes; /* Accumulate into old node set. */ } WriteNodes(nodes); printf("Nodes: %d\n", nodes); printf("Edges: %d\n\n", edgesCount); fclose(g_randomNumbersFile); fclose(g_graphFile); return 0; }
/* ================ idCollisionModelManagerLocal::WriteCollisionModel ================ */ void idCollisionModelManagerLocal::WriteCollisionModel( idFile *fp, cm_model_t *model ) { int i, polygonMemory, brushMemory; fp->WriteFloatString( "collisionModel \"%s\" {\n", model->name.c_str() ); // vertices fp->WriteFloatString( "\tvertices { /* numVertices = */ %d\n", model->numVertices ); for( i = 0; i < model->numVertices; i++ ) { fp->WriteFloatString( "\t/* %d */ (%f %f %f)\n", i, model->vertices[i].p[0], model->vertices[i].p[1], model->vertices[i].p[2] ); } fp->WriteFloatString( "\t}\n" ); // edges fp->WriteFloatString( "\tedges { /* numEdges = */ %d\n", model->numEdges ); for( i = 0; i < model->numEdges; i++ ) { fp->WriteFloatString( "\t/* %d */ (%d %d) %d %d\n", i, model->edges[i].vertexNum[0], model->edges[i].vertexNum[1], model->edges[i].internal, model->edges[i].numUsers ); } fp->WriteFloatString( "\t}\n" ); // nodes fp->WriteFloatString( "\tnodes {\n" ); WriteNodes( fp, model->node ); fp->WriteFloatString( "\t}\n" ); // polygons checkCount++; polygonMemory = CountPolygonMemory( model->node ); fp->WriteFloatString( "\tpolygons /* polygonMemory = */ %d {\n", polygonMemory ); checkCount++; WritePolygons( fp, model->node ); fp->WriteFloatString( "\t}\n" ); // brushes checkCount++; brushMemory = CountBrushMemory( model->node ); fp->WriteFloatString( "\tbrushes /* brushMemory = */ %d {\n", brushMemory ); checkCount++; WriteBrushes( fp, model->node ); fp->WriteFloatString( "\t}\n" ); // closing brace fp->WriteFloatString( "}\n" ); }
BOOL CPackFiles::EndWrite(void) { ReturnOnFalse(WriteNodes()); return mcFile.Close(); }