v0.3.0
Fast, portable C library for geometry input/output
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Modules
/examples/stl_get_infos.c
/* -----------------------------------------------------------------------------
*
* Example: get informations about an STL file
*
* Informations that can be retrieved by gmio_stl_infos_get() are:
* - STL format of the input stream
* - Count of facets(triangles)
* - Size of the STL contents in bytes
* - STL ascii only: name of the solid
* - STL binary only: header(80-bytes)
*
* -------------------------------------------------------------------------- */
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
static const char* gmio_stl_format_to_str(enum gmio_stl_format format)
{
switch (format) {
case GMIO_STL_FORMAT_UNKNOWN: return "UNKNOWN";
case GMIO_STL_FORMAT_ASCII: return "STL ASCII";
case GMIO_STL_FORMAT_BINARY_LE: return "STL BINARY LITTLE-ENDIAN";
case GMIO_STL_FORMAT_BINARY_BE: return "STL BINARY BIG-ENDIAN";
}
return NULL;
}
static void print_stl_infos(const struct gmio_stl_infos* infos)
{
printf("Format: %s\n"
"Size: %uKo\n"
"Facets: %u\n",
gmio_stl_format_to_str(infos->format),
infos->size / 1024,
infos->facet_count);
printf("Solid name: %s\n", infos->stla_solidname);
printf("Header: %80.80s\n", infos->stlb_header.data);
}
int main(int argc, char** argv)
{
int error = 0;
if (argc > 1) {
const char* filepath = argv[1];
FILE* file = fopen(filepath, "rb");
if (file != NULL) {
struct gmio_stream stream = gmio_stream_stdio(file);
struct gmio_stl_infos infos = {0};
/* Retrieve STL informations, using default options(NULL) */
&infos, &stream, GMIO_STL_INFO_FLAG_ALL, NULL);
printf("File: %s\n", filepath);
if (error == GMIO_ERROR_OK)
print_stl_infos(&infos);
else
fprintf(stderr, "gmio error: 0x%X\n", error);
fclose(file);
}
}
return error;
}
Fougue © 2016