Exemple #1
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;
}
Exemple #2
0
void	TriMesh::Process( uint32_t inStartOffset,
										uint32_t inEndOffset )
{
	uint32_t dataLen = inEndOffset - inStartOffset;
	
	if (dataLen < 52)
	{
		throw DataLengthException( Name(), inStartOffset, inEndOffset, 52 );
	}
	
	mFaces = FetchUInt32( inStartOffset );
	uint32_t numFaceAtts = FetchUInt32( inStartOffset+4 );
	mEdges = FetchUInt32( inStartOffset+8 );
	uint32_t numEdgeAtts = FetchUInt32( inStartOffset+12 );
	mPoints = FetchUInt32( inStartOffset+16 );
	uint32_t numPointAtts = FetchUInt32( inStartOffset+20 );
	
	int bytesPointIndex, bytesPerFaceIndex;
	if (mPoints - 1 <= 0xFE)
	{
		bytesPointIndex = 1;
	}
	else if (mPoints - 1 <= 0xFFFE)
	{
		bytesPointIndex = 2;
	}
	else
	{
		bytesPointIndex = 4;
	}

	if (mFaces - 1 <= 0xFE)
	{
		bytesPerFaceIndex = 1;
	}
	else if (mFaces - 1 <= 0xFFFE)
	{
		bytesPerFaceIndex = 2;
	}
	else
	{
		bytesPerFaceIndex = 4;
	}
	
	uint32_t trianglesSize = mFaces * 3 * bytesPointIndex;
	uint32_t edgesSize = mEdges * 2 * (bytesPointIndex + bytesPerFaceIndex);
	uint32_t pointsSize = mPoints * 12;
	uint32_t expectedLength = 52 + trianglesSize + edgesSize + pointsSize;
	if (dataLen != expectedLength)
	{
		throw DataLengthException( Name(), inStartOffset, inEndOffset,
			expectedLength );
	}
	
	Out() << Indent() << Name() << " (\n" <<
	
		Indent(1) << mFaces << " " << numFaceAtts << " " <<
			mEdges << " " << numEdgeAtts << " " <<
			mPoints << " " << numPointAtts << "\t" <<
			"# faces faceAtts edges edgeAtts pts ptAtts\n";

	WriteTriangles( inStartOffset+24, mFaces, bytesPointIndex );
	WriteEdges( inStartOffset+24+trianglesSize, mEdges, bytesPointIndex,
		bytesPerFaceIndex );
	WritePoints( inStartOffset+24+trianglesSize+edgesSize, mPoints );
	WriteBoundingBox( inStartOffset+24+trianglesSize+edgesSize+pointsSize );
	
	Out() << Indent() << ")\n";
}