#include "stl.h" #include "language.h" CHAR *gcppcSTLReservedWords[stlrwtSize] = { "solid", "ascii", "facet", "normal", "outer", "loop", "vertex", "endloop", "endfacet", "end" }; VOID WriteSTLPoint(const Point &pt) { WriteSTLPoint(gfpOutputFile, pt); } VOID WriteSTLVector(const Vector &v) { WriteSTLVector(gfpOutputFile, v); } VOID WriteSTLTriangle(const Point &pt0, const Point &pt1, const Point &pt2) { WriteSTLTriangle(gfpOutputFile, pt0, pt1, pt2); } VOID WriteSTLPoint(FILE *fpOutputFile, const Point &pt) { fprintf(fpOutputFile, "%f %f %f", pt(X), pt(Y), pt(Z)); } VOID WriteSTLVector(FILE *fpOutputFile, const Vector &v) { fprintf(fpOutputFile, "%f %f %f", v(X), v(Y), v(Z)); } VOID WriteSTLTriangle(FILE *fpOutputFile, const Point &pt0, const Point &pt1, const Point &pt2) { Vector vNormal, vU, vV; vU = pt1 - pt0; vV = pt2 - pt0; vNormal = vU * vV; if ( !vNormal.Normalize() ) { // This is a degenerate triangle so do not output it return; } fprintf(fpOutputFile, " %s ", gcppcSTLReservedWords[stlrwtFacet]); fprintf(fpOutputFile, "%s ", gcppcSTLReservedWords[stlrwtNormal]); WriteSTLVector(fpOutputFile, vNormal); fprintf(fpOutputFile, "\n"); fprintf(fpOutputFile, " %s %s\n", gcppcSTLReservedWords[stlrwtOuter], gcppcSTLReservedWords[stlrwtLoop]); // Write Vertices fprintf(fpOutputFile, " %s ", gcppcSTLReservedWords[stlrwtVertex]); WriteSTLPoint(fpOutputFile, pt0); fprintf(fpOutputFile, "\n"); fprintf(fpOutputFile, " %s ", gcppcSTLReservedWords[stlrwtVertex]); WriteSTLPoint(fpOutputFile, pt1); fprintf(fpOutputFile, "\n"); fprintf(fpOutputFile, " %s ", gcppcSTLReservedWords[stlrwtVertex]); WriteSTLPoint(fpOutputFile, pt2); fprintf(fpOutputFile, "\n"); fprintf(fpOutputFile, " %s\n", gcppcSTLReservedWords[stlrwtEndloop]); fprintf(fpOutputFile, " %s\n", gcppcSTLReservedWords[stlrwtEndfacet]); }