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; }
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"; }