From d0d842e24ae31d5522a65a3a6f20232af886bdfd Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci <aar@cpan.org> Date: Tue, 12 Nov 2013 15:23:48 +0100 Subject: [PATCH] Use fread() to read binary STL files --- xs/src/admesh/stl.h | 1 - xs/src/admesh/stlinit.c | 34 ++++------------------------------ 2 files changed, 4 insertions(+), 31 deletions(-) diff --git a/xs/src/admesh/stl.h b/xs/src/admesh/stl.h index 699044866..b6e2a0bae 100644 --- a/xs/src/admesh/stl.h +++ b/xs/src/admesh/stl.h @@ -181,5 +181,4 @@ static void stl_read(stl_file *stl, int first_facet, int first); static void stl_facet_stats(stl_file *stl, stl_facet facet, int first); extern void stl_reallocate(stl_file *stl); static int stl_get_little_int(FILE *fp); -static float stl_get_little_float(FILE *fp); extern void stl_get_size(stl_file *stl); diff --git a/xs/src/admesh/stlinit.c b/xs/src/admesh/stlinit.c index a05b6de39..633ff639e 100644 --- a/xs/src/admesh/stlinit.c +++ b/xs/src/admesh/stlinit.c @@ -52,22 +52,6 @@ stl_get_little_int(FILE *fp) return(value); } -static float -stl_get_little_float(FILE *fp) -{ - union - { - int int_value; - float float_value; - } value; - - value.int_value = fgetc(fp) & 0xFF; - value.int_value |= (fgetc(fp) & 0xFF) << 0x08; - value.int_value |= (fgetc(fp) & 0xFF) << 0x10; - value.int_value |= (fgetc(fp) & 0xFF) << 0x18; - return(value.float_value); -} - void stl_initialize(stl_file *stl) @@ -251,20 +235,10 @@ stl_read(stl_file *stl, int first_facet, int first) if(stl->stats.type == binary) /* Read a single facet from a binary .STL file */ { - facet.normal.x = stl_get_little_float(stl->fp); - facet.normal.y = stl_get_little_float(stl->fp); - facet.normal.z = stl_get_little_float(stl->fp); - facet.vertex[0].x = stl_get_little_float(stl->fp); - facet.vertex[0].y = stl_get_little_float(stl->fp); - facet.vertex[0].z = stl_get_little_float(stl->fp); - facet.vertex[1].x = stl_get_little_float(stl->fp); - facet.vertex[1].y = stl_get_little_float(stl->fp); - facet.vertex[1].z = stl_get_little_float(stl->fp); - facet.vertex[2].x = stl_get_little_float(stl->fp); - facet.vertex[2].y = stl_get_little_float(stl->fp); - facet.vertex[2].z = stl_get_little_float(stl->fp); - facet.extra[0] = fgetc(stl->fp); - facet.extra[1] = fgetc(stl->fp); + // we assume little-endian architecture! + fread(&facet.normal, sizeof(stl_normal), 1, stl->fp); + fread(&facet.vertex, sizeof(stl_vertex), 3, stl->fp); + fread(&facet.extra, sizeof(char), 2, stl->fp); } else /* Read a single facet from an ASCII .STL file */