Metropoli BBS
VIEWER: modelsup.h MODE: TEXT (ASCII)
/* ***********************************************************************
   *									 *
   *                         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];
[ RETURN TO DIRECTORY ]