Index: trunk/src_plugins/export_stl/exp_fmt_amf.c =================================================================== --- trunk/src_plugins/export_stl/exp_fmt_amf.c (revision 35970) +++ trunk/src_plugins/export_stl/exp_fmt_amf.c (revision 35971) @@ -26,27 +26,82 @@ static void amf_print_horiz_tri(FILE *f, fp2t_triangle_t *t, int up, rnd_coord_t z) { + if (up) { + verthash_add_triangle_coord(&verthash, + t->Points[0]->X, t->Points[0]->Y, z, + t->Points[1]->X, t->Points[1]->Y, z, + t->Points[2]->X, t->Points[2]->Y, z + ); + } + else { + verthash_add_triangle_coord(&verthash, + t->Points[2]->X, (rnd_coord_t)t->Points[2]->Y, z, + t->Points[1]->X, (rnd_coord_t)t->Points[1]->Y, z, + t->Points[0]->X, (rnd_coord_t)t->Points[0]->Y, z + ); + } } static void amf_print_vert_tri(FILE *f, rnd_coord_t x1, rnd_coord_t y1, rnd_coord_t x2, rnd_coord_t y2, rnd_coord_t z0, rnd_coord_t z1) { + verthash_add_triangle_coord(&verthash, + x2, y2, z1, + x1, y1, z1, + x1, y1, z0 + ); + + verthash_add_triangle_coord(&verthash, + x2, y2, z1, + x1, y1, z0, + x2, y2, z0 + ); } + static void amf_print_facet(FILE *f, stl_facet_t *head, double mx[16], double mxn[16]) { double v[3], p[3]; + long vert[3]; int n; for(n = 0; n < 3; n++) { p[0] = head->vx[n]; p[1] = head->vy[n]; p[2] = head->vz[n]; v_transform(v, p, mx); + vert[n] = verthash_add_vertex(&verthash, p[0], p[1], p[2]); } + + verthash_add_triangle(&verthash, vert[0], vert[1], vert[2]); } static void amf_print_header(FILE *f) { + fprintf(f, "\n"); + fprintf(f, "\n"); + fprintf(f, " pcb-rnd export_stl\n"); + fprintf(f, " \n"); + fprintf(f, " \n"); + + verthash_init(&verthash); } static void amf_print_footer(FILE *f) { + long n, *vx; + rnd_coord_t *c; + + fprintf(f, " \n"); + for(n = 0, c = verthash.vxcoords.array; n < verthash.next_id; n++, c += 3) + rnd_fprintf(f, " %.09mm\t%.09mm\t%.09mm \n", c[0], c[1], c[2]); + fprintf(f, " \n"); + + fprintf(f, " \n"); + for(n = 0, vx = verthash.triangles.array; n < verthash.triangles.used; n += 3, vx += 3) + rnd_fprintf(f, " %ld\t%ld\t%ld \n", vx[0], vx[1], vx[2]); + fprintf(f, " \n"); + + fprintf(f, " \n"); + fprintf(f, " \n"); + fprintf(f, "\n"); + + verthash_uninit(&verthash); }