Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Ranellucci <aar@cpan.org>2013-11-12 18:23:48 +0400
committerAlessandro Ranellucci <aar@cpan.org>2013-11-12 18:23:48 +0400
commitd0d842e24ae31d5522a65a3a6f20232af886bdfd (patch)
treeddbda5fae8781cb43a98736eee272d9e87eb3a3b
parent85232bb6fdf8e2c0bf9af99b02b0968284b6836b (diff)
Use fread() to read binary STL files
-rw-r--r--xs/src/admesh/stl.h1
-rw-r--r--xs/src/admesh/stlinit.c34
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 */