#ifndef PLY_H #define PLY_H #include typedef enum { PLY_FORMAT_INVALID = -1, PLY_FORMAT_ASCII, PLY_FORMAT_LE, PLY_FORMAT_BE, } PlyFormatType; typedef enum { PLY_HEADER_INVALID = -1, PLY_HEADER_COMMENT, PLY_HEADER_END, PLY_HEADER_ELEMENT, PLY_HEADER_PROPERTY, } PlyHeaderType; typedef enum { PLY_TYPE_INVALID = -1, PLY_TYPE_CHAR, PLY_TYPE_UCHAR, PLY_TYPE_SHORT, PLY_TYPE_USHORT, PLY_TYPE_INT, PLY_TYPE_UINT, PLY_TYPE_FLOAT, PLY_TYPE_DOUBLE, } PlyPropertyType; typedef struct PlyPropertyStruct { char* name; PlyPropertyType count; PlyPropertyType element; void* elements; void* counts; struct PlyPropertyStruct* next; } PlyProperty; typedef struct PlyElementStruct { char* name; int count; PlyProperty* properties; struct PlyElementStruct* next; } PlyElement; const char* const ply_formats[] = { "ascii", "binary_little_endian", "binary_big_endian" }; const char* const ply_header_items[] = { "comment", "end_header", "element", "property", }; const char* const ply_type_strings[] = { "char", "uchar", "short", "ushort", "int", "uint", "float", "double", }; size_t ply_type_sizes[] = { 1, 1, 2, 2, 4, 4, 4, 8, }; PlyElement* ply_load_mesh(char* filename); void ply_free_mesh(PlyElement* elements_head); #endif