diff options
author | Alessandro Ranellucci <aar@cpan.org> | 2013-11-12 18:23:48 +0400 |
---|---|---|
committer | Alessandro Ranellucci <aar@cpan.org> | 2013-11-12 18:23:48 +0400 |
commit | d0d842e24ae31d5522a65a3a6f20232af886bdfd (patch) | |
tree | ddbda5fae8781cb43a98736eee272d9e87eb3a3b | |
parent | 85232bb6fdf8e2c0bf9af99b02b0968284b6836b (diff) |
Use fread() to read binary STL files
-rw-r--r-- | xs/src/admesh/stl.h | 1 | ||||
-rw-r--r-- | 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 */ |