#include #include #include #include "3d.h" #include "model.h" static MODEL *m; static void errf(const char *s) { fprintf(stderr,"error in model, offset %lu:\n%s\n",ftell(stdin),s); } static void read_model(void) { m = load_model(stdin,&errf); if (! m) exit(1); } static PT3 xyz_to_pt3(XYZ p) { return((PT3){.x=p.x,.y=p.y,.z=p.z}); } static void dump_stl(void) { int i; TRIANGLE *t; PT3 n; PT3 l[3]; printf("solid foo\n"); for (i=n_triangles(m)-1;i>=0;i--) { t = get_triangle(m,i); l[0] = xyz_to_pt3(get_location(m,get_point(m,t->corner[0])->loc)->l); l[1] = xyz_to_pt3(get_location(m,get_point(m,t->corner[1])->loc)->l); l[2] = xyz_to_pt3(get_location(m,get_point(m,t->corner[2])->loc)->l); n = unit3(cross(sub3(l[2],l[0]),sub3(l[1],l[0]))); printf("facet normal %g %g %g\n",n.x,n.y,n.z); printf(" outer loop\n"); printf(" vertex %g %g %g\n",l[2].x,l[2].y,l[2].z); printf(" vertex %g %g %g\n",l[1].x,l[1].y,l[1].z); printf(" vertex %g %g %g\n",l[0].x,l[0].y,l[0].z); printf(" endloop\n"); printf("endfacet\n"); } printf("endsolid foo\n"); } int main(void); int main(void) { read_model(); dump_stl(); return(0); }