/*
================
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] );
	}
}
Beispiel #2
0
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();
}