Equalizer 1.0
|
00001 /* 00002 00003 Header for PLY polygon files. 00004 00005 - Greg Turk, March 1994 00006 00007 A PLY file contains a single polygonal _object_. 00008 00009 An object is composed of lists of _elements_. Typical elements are 00010 vertices, faces, edges and materials. 00011 00012 Each type of element for a given object has one or more _properties_ 00013 associated with the element type. For instance, a vertex element may 00014 have as properties three floating-point values x,y,z and three unsigned 00015 chars for red, green and blue. 00016 00017 --------------------------------------------------------------- 00018 00019 Copyright (c) 1994 The Board of Trustees of The Leland Stanford 00020 Junior University. All rights reserved. 00021 00022 Permission to use, copy, modify and distribute this software and its 00023 documentation for any purpose is hereby granted without fee, provided 00024 that the above copyright notice and this permission notice appear in 00025 all copies of this software and that you do not sell the software. 00026 00027 THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, 00028 EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 00029 WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 00030 00031 */ 00032 00033 #ifndef __PLY_H__ 00034 #define __PLY_H__ 00035 00036 #include <eq/eq.h> 00037 00038 #ifdef __cplusplus 00039 extern "C" { 00040 #endif 00041 00042 #include <stdio.h> 00043 #include <stddef.h> 00044 00045 #define PLY_ASCII 1 /* ascii PLY file */ 00046 #define PLY_BINARY_BE 2 /* binary PLY file, big endian */ 00047 #define PLY_BINARY_LE 3 /* binary PLY file, little endian */ 00048 00049 #define PLY_OKAY 0 /* ply routine worked okay */ 00050 #define PLY_ERROR -1 /* error in ply routine */ 00051 00052 /* scalar data types supported by PLY format */ 00053 00054 #define PLY_START_TYPE 0 00055 #define PLY_CHAR 1 00056 #define PLY_SHORT 2 00057 #define PLY_INT 3 00058 #define PLY_UCHAR 4 00059 #define PLY_USHORT 5 00060 #define PLY_UINT 6 00061 #define PLY_FLOAT 7 00062 #define PLY_DOUBLE 8 00063 #define PLY_FLOAT32 9 00064 #define PLY_UINT8 10 00065 #define PLY_INT32 11 00066 #define PLY_END_TYPE 12 00067 00068 #define PLY_SCALAR 0 00069 #define PLY_LIST 1 00070 00071 00072 typedef struct PlyProperty { /* description of a property */ 00073 00074 const char *name; /* property name */ 00075 int external_type; /* file's data type */ 00076 int internal_type; /* program's data type */ 00077 int offset; /* offset bytes of prop in a struct */ 00078 00079 int is_list; /* 1 = list, 0 = scalar */ 00080 int count_external; /* file's count type */ 00081 int count_internal; /* program's count type */ 00082 int count_offset; /* offset byte for list count */ 00083 00084 } PlyProperty; 00085 00086 typedef struct PlyElement { /* description of an element */ 00087 char *name; /* element name */ 00088 int num; /* number of elements in this object */ 00089 int size; /* size of element (bytes) or -1 if variable */ 00090 int nprops; /* number of properties for this element */ 00091 PlyProperty **props; /* list of properties in the file */ 00092 char *store_prop; /* flags: property wanted by user? */ 00093 int other_offset; /* offset to un-asked-for props, or -1 if none*/ 00094 int other_size; /* size of other_props structure */ 00095 } PlyElement; 00096 00097 typedef struct PlyOtherProp { /* describes other properties in an element */ 00098 char *name; /* element name */ 00099 int size; /* size of other_props */ 00100 int nprops; /* number of properties in other_props */ 00101 PlyProperty **props; /* list of properties in other_props */ 00102 } PlyOtherProp; 00103 00104 typedef struct OtherData { /* for storing other_props for an other element */ 00105 void *other_props; 00106 } OtherData; 00107 00108 typedef struct OtherElem { /* data for one "other" element */ 00109 char *elem_name; /* names of other elements */ 00110 int elem_count; /* count of instances of each element */ 00111 OtherData **other_data; /* actual property data for the elements */ 00112 PlyOtherProp *other_props; /* description of the property data */ 00113 } OtherElem; 00114 00115 typedef struct PlyOtherElems { /* "other" elements, not interpreted by user */ 00116 int num_elems; /* number of other elements */ 00117 OtherElem *other_list; /* list of data for other elements */ 00118 } PlyOtherElems; 00119 00120 typedef struct PlyFile { /* description of PLY file */ 00121 FILE *fp; /* file pointer */ 00122 int file_type; /* ascii or binary */ 00123 float version; /* version number of file */ 00124 int nelems; /* number of elements of object */ 00125 PlyElement **elems; /* list of elements */ 00126 int num_comments; /* number of comments */ 00127 char **comments; /* list of comments */ 00128 int num_obj_info; /* number of items of object information */ 00129 char **obj_info; /* list of object info items */ 00130 PlyElement *which_elem; /* which element we're currently writing */ 00131 PlyOtherElems *other_elems; /* "other" elements from a PLY file */ 00132 } PlyFile; 00133 00134 /* memory allocation */ 00135 extern char *my_alloc(); 00136 #define myalloc(mem_size) my_alloc((mem_size), __LINE__, __FILE__) 00137 00138 00139 /*** delcaration of routines ***/ 00140 00141 extern PlyFile *ply_write(FILE *, int, char **, int); 00142 extern PlyFile *ply_open_for_writing(char *, int, char **, int, float *); 00143 extern void ply_describe_element(PlyFile *, char *, int, int, PlyProperty *); 00144 extern void ply_describe_property(PlyFile *, char *, PlyProperty *); 00145 extern void ply_element_count(PlyFile *, const char *, int); 00146 extern void ply_header_complete(PlyFile *); 00147 extern void ply_put_element_setup(PlyFile *, const char *); 00148 extern void ply_put_element(PlyFile *, void *); 00149 extern void ply_put_comment(PlyFile *, const char *); 00150 extern void ply_put_obj_info(PlyFile *, const char *); 00151 extern PlyFile *ply_read(FILE *, int *, char ***); 00152 extern PlyFile *ply_open_for_reading( char *, int *, char ***, int *, float *); 00153 extern PlyProperty **ply_get_element_description(PlyFile *, char *, int*, int*); 00154 extern void ply_get_element_setup( PlyFile *, char *, int, PlyProperty *); 00155 extern void ply_get_property(PlyFile *, const char *, PlyProperty *); 00156 extern PlyOtherProp *ply_get_other_properties(PlyFile *, char *, int); 00157 extern void ply_get_element(PlyFile *, void *); 00158 extern char **ply_get_comments(PlyFile *, int *); 00159 extern char **ply_get_obj_info(PlyFile *, int *); 00160 extern void ply_close(PlyFile *); 00161 extern void ply_get_info(PlyFile *, float *, int *); 00162 extern PlyOtherElems *ply_get_other_element (PlyFile *, char *, int); 00163 extern void ply_describe_other_elements ( PlyFile *, PlyOtherElems *); 00164 extern void ply_put_other_elements (PlyFile *); 00165 extern void ply_free_other_elements (PlyOtherElems *); 00166 00167 extern int equal_strings(const char *, const char *); 00168 00169 00170 #ifdef __cplusplus 00171 } 00172 #endif 00173 #endif /* !__PLY_H__ */ 00174