/* *********************************************************************** * * * Variable Declarations * * * * Original Material by Christopher D. Watkins * * * * 'C' conversion by * * Larry Sharp * * * *********************************************************************** */ #define NumVerticiesInFacet 4 #define MaxVertexNumInFacet 4 #define ScaleData 23000 #define ScaleImage 100 /* #define MaxFacet 1678 independant : MaxFacet = n #define MaxVertex 6712 verticies MaxVertex = 4 * n */ #define MaxFacet 3600 #define MaxVertex 3721 int LastVertex, LastFacet; int LastVertexNumInFacet; int VertexNum, FacetNum; int VertexNumInFacet; TDIA Vertex[MaxVertex+1]; static int far *Facet; /* *********************************************************************** * * * Routines to Load and Save Vertex and Facet Data * * * *********************************************************************** InitVertexBuffer - clear memory for facet and vertex data LoadData - load facet and vertex data SaveData - save facet and vertex data */ float InvScaleData, InvScaleImage; void InitVertexBuffer() { InvScaleData=1.0/ScaleData; InvScaleImage=1.0/ScaleImage; for(VertexNum=0; VertexNum<=MaxVertex; VertexNum++) VecNullInt(Vertex[VertexNum]); for(FacetNum=0; FacetNum<=MaxFacet; FacetNum++) { for(VertexNumInFacet=0; VertexNumInFacet<=MaxVertexNumInFacet; VertexNumInFacet++) Facet[(FacetNum*5)+VertexNumInFacet]=0; } } typedef char Name[20]; FILE *DiskFile; Name FileName; void LoadData(Name FileName) { TDIA temp; int x, y, z; DiskFile=fopen(FileName, "r+b"); LastVertex=getw(DiskFile); LastFacet=getw(DiskFile); LastVertexNumInFacet=getw(DiskFile); for(VertexNum=1; VertexNum<=LastVertex; VertexNum++) { x=getw(DiskFile); y=getw(DiskFile); z=getw(DiskFile); if((abs(x)>ScaleData) || (abs(y)>ScaleData) || (abs(z)>ScaleData)) { printf("Error : data out of range - Vertex #%d\n", VertexNum); exit(1); } else VecInt(x, y, z, Vertex[VertexNum]); } for(FacetNum=1; FacetNum<=LastFacet; FacetNum++) { for(VertexNumInFacet=1; VertexNumInFacet<=LastVertexNumInFacet; VertexNumInFacet++) Facet[(FacetNum*5)+VertexNumInFacet]=getw(DiskFile); } fclose(DiskFile); } void SaveData(Name FileName) { int x, y, z; DiskFile=fopen(FileName, "w+b"); putw(LastVertex, DiskFile); putw(LastFacet, DiskFile); putw(LastVertexNumInFacet, DiskFile); for(VertexNum=1; VertexNum<=LastVertex; VertexNum++) { UnVecInt(Vertex[VertexNum], &x, &y, &z); putw(x, DiskFile); putw(y, DiskFile); putw(z, DiskFile); } for(FacetNum=1; FacetNum<=LastFacet; FacetNum++) { for(VertexNumInFacet=1; VertexNumInFacet<=LastVertexNumInFacet; VertexNumInFacet++) putw(Facet[(FacetNum*5)+VertexNumInFacet], DiskFile); } fclose(DiskFile); } typedef struct{ int x; int y; } PixelVector; typedef PixelVector PixelArray[NumVerticiesInFacet+2]; typedef TDA VoxelArray[NumVerticiesInFacet+1];