#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "paulslib.h"
#include "povraylib.h"

/*
	Define a line in PovRay
*/
void WritePovLine(FILE *fptr,XYZ p1,XYZ p2,double r,char *texture,int ends)
{
   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
		p1.x,p1.y,p1.z,p2.x,p2.y,p2.z,r);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
	
	if (ends == 1 || ends == 3) {
   	fprintf(fptr,"sphere {\n");
   	fprintf(fptr,"   <%g,%g,%g>, %g\n",p1.x,p1.y,p1.z,r);
   	fprintf(fptr,"   texture { %s }\n",texture);
   	fprintf(fptr,"}\n");
	}
	if (ends == 2 || ends == 3) {
      fprintf(fptr,"sphere {\n");
      fprintf(fptr,"   <%g,%g,%g>, %g\n",p2.x,p2.y,p2.z,r);
      fprintf(fptr,"   texture { %s }\n",texture);
      fprintf(fptr,"}\n");
	}
}

/*
	Create a PovRay bounding box
*/
void WritePovBox(FILE *fptr,XYZ p1,XYZ p2,double radius,char *texture)
{
	/* Cylinders */

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p1.x,p1.y,p1.z,p2.x,p1.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p1.x,p1.y,p1.z,p1.x,p2.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p1.x,p1.y,p1.z,p1.x,p1.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p2.x,p2.y,p2.z,p1.x,p2.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p2.x,p2.y,p2.z,p2.x,p1.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p2.x,p2.y,p2.z,p2.x,p2.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p1.x,p2.y,p1.z,p2.x,p2.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p1.x,p2.y,p1.z,p1.x,p2.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p2.x,p1.y,p1.z,p2.x,p1.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p2.x,p1.y,p1.z,p2.x,p2.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p1.x,p1.y,p2.z,p1.x,p2.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

   fprintf(fptr,"cylinder {\n");
   fprintf(fptr,"   <%g,%g,%g>, <%g,%g,%g>, %g\n",
      p1.x,p1.y,p2.z,p2.x,p1.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");

	/* Spheres */

   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p1.x,p1.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p2.x,p1.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p2.x,p2.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p1.x,p2.y,p1.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p1.x,p1.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p2.x,p1.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p2.x,p2.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
   fprintf(fptr,"sphere {\n");
   fprintf(fptr,"   <%g,%g,%g>, %g\n",p1.x,p2.y,p2.z,radius);
   fprintf(fptr,"   texture { %s }\n",texture);
   fprintf(fptr,"}\n");
}


