star-cad

Geometric operators for computer-aided design
git clone git://git.meso-star.fr/star-cad.git
Log | Files | Refs | README | LICENSE

commit d35bfdb13382a9941588a931e59348b2649fb869
parent c816b128dc62d65551118f843bc039094b516014
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri, 23 Sep 2022 15:58:57 +0200

Make ascii stl output gmsh-compatible

Diffstat:
Msrc/scad.c | 25+++++++++++++------------
1 file changed, 13 insertions(+), 12 deletions(-)

diff --git a/src/scad.c b/src/scad.c @@ -23,6 +23,7 @@ #include <rsys/cstr.h> #include <rsys/rsys.h> #include <rsys/str.h> +#include <rsys/double3.h> #include <rsys/float3.h> #include <rsys/stretchy_array.h> @@ -58,26 +59,26 @@ write_ascii_stl size_t j; for(j = 0; j < coord_n[i]; j += 9) { int k; - float n[3] = { 0,0,0 }, zero[3] = { 0,0,0 }; - float vtx[3][3]; - float tmp[3], edge1[3], edge2[3];; - f3_set_d3(vtx[0], coord[i]+j+0); - f3_set_d3(vtx[1], coord[i]+j+3); - f3_set_d3(vtx[2], coord[i]+j+6); - f3_sub(edge1, vtx[1], vtx[0]); - f3_sub(edge2, vtx[2], vtx[0]); - f3_cross(tmp, edge1, edge2); - if(f3_eq(tmp, zero)) { + double n[3] = { 0,0,0 }, zero[3] = { 0,0,0 }; + double vtx[3][3]; + double tmp[3], edge1[3], edge2[3];; + d3_set(vtx[0], coord[i]+j+0); + d3_set(vtx[1], coord[i]+j+3); + d3_set(vtx[2], coord[i]+j+6); + d3_sub(edge1, vtx[1], vtx[0]); + d3_sub(edge2, vtx[2], vtx[0]); + d3_cross(tmp, edge1, edge2); + if(d3_eq(tmp, zero)) { log_error(get_device(), "Error: nul triangle in exported geometry.\n"); res = RES_BAD_ARG; goto error; } - f3_normalize(n, tmp); + d3_normalize(n, tmp); OKP(fprintf(stl_file, " facet normal %g %g %g\n", SPLIT3(n))); OKP(fprintf(stl_file, " outer loop\n")); for(k = 0; k < 3; k++) { - OKP(fprintf(stl_file, " vertex %g %g %g\n", SPLIT3(vtx[k]))); + OKP(fprintf(stl_file, " vertex %.16g %.16g %.16g\n", SPLIT3(vtx[k]))); } OKP(fprintf(stl_file, " endloop\n")); OKP(fprintf(stl_file, " endfacet\n"));