00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef __PLY_H__
00034 #define __PLY_H__
00035
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039
00040 #include <stdio.h>
00041 #include <stddef.h>
00042
00043 #define PLY_ASCII 1
00044 #define PLY_BINARY_BE 2
00045 #define PLY_BINARY_LE 3
00046
00047 #define PLY_OKAY 0
00048 #define PLY_ERROR -1
00049
00050
00051
00052 #define PLY_START_TYPE 0
00053 #define PLY_CHAR 1
00054 #define PLY_SHORT 2
00055 #define PLY_INT 3
00056 #define PLY_UCHAR 4
00057 #define PLY_USHORT 5
00058 #define PLY_UINT 6
00059 #define PLY_FLOAT 7
00060 #define PLY_DOUBLE 8
00061 #define PLY_END_TYPE 9
00062
00063 #define PLY_SCALAR 0
00064 #define PLY_LIST 1
00065
00066
00067 typedef struct PlyProperty {
00068
00069 char *name;
00070 int external_type;
00071 int internal_type;
00072 int offset;
00073
00074 int is_list;
00075 int count_external;
00076 int count_internal;
00077 int count_offset;
00078
00079 } PlyProperty;
00080
00081 typedef struct PlyElement {
00082 char *name;
00083 int num;
00084 int size;
00085 int nprops;
00086 PlyProperty **props;
00087 char *store_prop;
00088 int other_offset;
00089 int other_size;
00090 } PlyElement;
00091
00092 typedef struct PlyOtherProp {
00093 char *name;
00094 int size;
00095 int nprops;
00096 PlyProperty **props;
00097 } PlyOtherProp;
00098
00099 typedef struct OtherData {
00100 void *other_props;
00101 } OtherData;
00102
00103 typedef struct OtherElem {
00104 char *elem_name;
00105 int elem_count;
00106 OtherData **other_data;
00107 PlyOtherProp *other_props;
00108 } OtherElem;
00109
00110 typedef struct PlyOtherElems {
00111 int num_elems;
00112 OtherElem *other_list;
00113 } PlyOtherElems;
00114
00115 typedef struct PlyFile {
00116 FILE *fp;
00117 int file_type;
00118 float version;
00119 int nelems;
00120 PlyElement **elems;
00121 int num_comments;
00122 char **comments;
00123 int num_obj_info;
00124 char **obj_info;
00125 PlyElement *which_elem;
00126 PlyOtherElems *other_elems;
00127 } PlyFile;
00128
00129
00130 extern char *my_alloc();
00131 #define myalloc(mem_size) my_alloc((mem_size), __LINE__, __FILE__)
00132
00133
00134
00135
00136 extern PlyFile *ply_write(FILE *, int, char **, int);
00137 extern PlyFile *ply_open_for_writing(char *, int, char **, int, float *);
00138 extern void ply_describe_element(PlyFile *, char *, int, int, PlyProperty *);
00139 extern void ply_describe_property(PlyFile *, char *, PlyProperty *);
00140 extern void ply_element_count(PlyFile *, char *, int);
00141 extern void ply_header_complete(PlyFile *);
00142 extern void ply_put_element_setup(PlyFile *, char *);
00143 extern void ply_put_element(PlyFile *, void *);
00144 extern void ply_put_comment(PlyFile *, char *);
00145 extern void ply_put_obj_info(PlyFile *, char *);
00146 extern PlyFile *ply_read(FILE *, int *, char ***);
00147 extern PlyFile *ply_open_for_reading( char *, int *, char ***, int *, float *);
00148 extern PlyProperty **ply_get_element_description(PlyFile *, char *, int*, int*);
00149 extern void ply_get_element_setup( PlyFile *, char *, int, PlyProperty *);
00150 extern void ply_get_property(PlyFile *, char *, PlyProperty *);
00151 extern PlyOtherProp *ply_get_other_properties(PlyFile *, char *, int);
00152 extern void ply_get_element(PlyFile *, void *);
00153 extern char **ply_get_comments(PlyFile *, int *);
00154 extern char **ply_get_obj_info(PlyFile *, int *);
00155 extern void ply_close(PlyFile *);
00156 extern void ply_get_info(PlyFile *, float *, int *);
00157 extern PlyOtherElems *ply_get_other_element (PlyFile *, char *, int);
00158 extern void ply_describe_other_elements ( PlyFile *, PlyOtherElems *);
00159 extern void ply_put_other_elements (PlyFile *);
00160 extern void ply_free_other_elements (PlyOtherElems *);
00161
00162 extern int equal_strings(char *, char *);
00163
00164
00165 #ifdef __cplusplus
00166 }
00167 #endif
00168 #endif
00169