Closest Point Find the Closest Point on a mesh

- Main Page
- Classes
- Files

- File List

include/ply.h

    00001 /*
    00002
    00003 Header for PLY polygon files.
    00004
    00005 - Greg Turk
    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) 1998 Georgia Institute of Technology.  All rights reserved.
    00020
    00021 Permission to use, copy, modify and distribute this software and its
    00022 documentation for any purpose is hereby granted without fee, provided
    00023 that the above copyright notice and this permission notice appear in
    00024 all copies of this software and that you do not sell the software.
    00025
    00026 THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND,
    00027 EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
    00028 WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
    00029
    00030 */
    00031
    00032 #ifndef __PLY_H__
    00033 #define __PLY_H__
    00034
    00035 #ifdef __cplusplus
    00036 extern "C" {
    00037 #endif
    00038
    00039 #include <stdio.h>
    00040 #include <stddef.h>
    00041
    00042 #define PLY_ASCII      1        /* ascii PLY file */
    00043 #define PLY_BINARY_BE  2        /* binary PLY file, big endian */
    00044 #define PLY_BINARY_LE  3        /* binary PLY file, little endian */
    00045
    00046 #define PLY_OKAY    0           /* ply routine worked okay */
    00047 #define PLY_ERROR  -1           /* error in ply routine */
    00048
    00049 /* scalar data types supported by PLY format */
    00050
    00051 #define StartType  0
    00052 #define Int8       1
    00053 #define Int16      2
    00054 #define Int32      3
    00055 #define Uint8      4
    00056 #define Uint16     5
    00057 #define Uint32     6
    00058 #define Float32    7
    00059 #define Float64    8
    00060 #define EndType    9
    00061
    00062 #define  PLY_SCALAR  0
    00063 #define  PLY_LIST    1
    00064 #define  PLY_STRING  2
    00065
    00066
    00067 typedef struct PlyProperty {    /* description of a property */
    00068
    00069   char *name;                   /* property name */
    00070   int external_type;            /* file's data type */
    00071   int internal_type;            /* program's data type */
    00072   int offset;                   /* offset bytes of prop in a struct */
    00073
    00074   int is_list;                  /* 0 = scalar, 1 = list, 2 = char string */
    00075   int count_external;           /* file's count type */
    00076   int count_internal;           /* program's count type */
    00077   int count_offset;             /* offset byte for list count */
    00078
    00079 } PlyProperty;
    00080
    00081 typedef struct PlyElement {     /* description of an element */
    00082   char *name;                   /* element name */
    00083   int num;                      /* number of elements in this object */
    00084   int size;                     /* size of element (bytes) or -1 if variable */
    00085   int nprops;                   /* number of properties for this element */
    00086   PlyProperty **props;          /* list of properties in the file */
    00087   char *store_prop;             /* flags: property wanted by user? */
    00088   int other_offset;             /* offset to un-asked-for props, or -1 if none*/
    00089   int other_size;               /* size of other_props structure */
    00090 } PlyElement;
    00091
    00092 typedef struct PlyOtherProp {   /* describes other properties in an element */
    00093   char *name;                   /* element name */
    00094   int size;                     /* size of other_props */
    00095   int nprops;                   /* number of properties in other_props */
    00096   PlyProperty **props;          /* list of properties in other_props */
    00097 } PlyOtherProp;
    00098
    00099 typedef struct OtherData { /* for storing other_props for an other element */
    00100   void *other_props;
    00101 } OtherData;
    00102
    00103 typedef struct OtherElem {     /* data for one "other" element */
    00104   char *elem_name;             /* names of other elements */
    00105   int elem_count;              /* count of instances of each element */
    00106   OtherData **other_data;      /* actual property data for the elements */
    00107   PlyOtherProp *other_props;   /* description of the property data */
    00108 } OtherElem;
    00109
    00110 typedef struct PlyOtherElems {  /* "other" elements, not interpreted by user */
    00111   int num_elems;                /* number of other elements */
    00112   OtherElem *other_list;        /* list of data for other elements */
    00113 } PlyOtherElems;
    00114
    00115 #define AVERAGE_RULE  1
    00116 #define MAJORITY_RULE 2
    00117 #define MINIMUM_RULE  3
    00118 #define MAXIMUM_RULE  4
    00119 #define SAME_RULE     5
    00120 #define RANDOM_RULE   6
    00121
    00122 typedef struct PlyPropRules {   /* rules for combining "other" properties */
    00123   PlyElement *elem;      /* element whose rules we are making */
    00124   int *rule_list;        /* types of rules (AVERAGE_PLY, MAJORITY_PLY, etc.) */
    00125   int nprops;            /* number of properties we're combining so far */
    00126   int max_props;         /* maximum number of properties we have room for now */
    00127   void **props;          /* list of properties we're combining */
    00128   float *weights;        /* list of weights of the properties */
    00129 } PlyPropRules;
    00130
    00131 typedef struct PlyRuleList {
    00132   char *name;                  /* name of the rule */
    00133   char *element;               /* name of element that rule applies to */
    00134   char *property;              /* name of property that rule applies to */
    00135   struct PlyRuleList *next;    /* pointer for linked list of rules */
    00136 } PlyRuleList;
    00137
    00138 typedef struct PlyFile {        /* description of PLY file */
    00139   FILE *fp;                     /* file pointer */
    00140   int file_type;                /* ascii or binary */
    00141   float version;                /* version number of file */
    00142   int num_elem_types;           /* number of element types of object */
    00143   PlyElement **elems;           /* list of elements */
    00144   int num_comments;             /* number of comments */
    00145   char **comments;              /* list of comments */
    00146   int num_obj_info;             /* number of items of object information */
    00147   char **obj_info;              /* list of object info items */
    00148   PlyElement *which_elem;       /* element we're currently reading or writing */
    00149   PlyOtherElems *other_elems;   /* "other" elements from a PLY file */
    00150   PlyPropRules *current_rules;  /* current propagation rules */
    00151   PlyRuleList *rule_list;       /* rule list from user */
    00152 } PlyFile;
    00153
    00154 /* memory allocation */
    00155 /*
    00156 extern char *my_alloc();
    00157 */
    00158 #define myalloc(mem_size) my_alloc((mem_size), __LINE__, __FILE__)
    00159
    00160
    00161 /* old routines */
    00162
    00163 #if 0
    00164 extern PlyFile *ply_write(FILE *, int, char **, int);
    00165 extern PlyFile *ply_read(FILE *, int *, char ***);
    00166 extern PlyFile *ply_open_for_reading( char *, int *, char ***, int *, float *);
    00167 extern void ply_close(PlyFile *);
    00168 extern PlyOtherProp *ply_get_other_properties(PlyFile *, char *, int);
    00169 #endif
    00170
    00171 extern void ply_describe_property(PlyFile *, char *, PlyProperty *);
    00172 extern void ply_get_property(PlyFile *, char *, PlyProperty *);
    00173 extern void ply_get_element(PlyFile *, void *);
    00174
    00175
    00176 /*** delcaration of routines ***/
    00177
    00178 PlyOtherElems *get_other_element_ply (PlyFile *);
    00179
    00180 PlyFile *read_ply(FILE *);
    00181 PlyFile *write_ply(FILE *, int, char **, int);
    00182 extern PlyFile *open_for_writing_ply(char *, int, char **, int);
    00183 void close_ply(PlyFile *);
    00184 void free_ply(PlyFile *);
    00185
    00186 void get_info_ply(PlyFile *, float *, int *);
    00187 void free_other_elements_ply (PlyOtherElems *);
    00188
    00189 void append_comment_ply(PlyFile *, char *);
    00190 void append_obj_info_ply(PlyFile *, char *);
    00191 void copy_comments_ply(PlyFile *, PlyFile *);
    00192 void copy_obj_info_ply(PlyFile *, PlyFile *);
    00193 char **get_comments_ply(PlyFile *, int *);
    00194 char **get_obj_info_ply(PlyFile *, int *);
    00195
    00196 char **get_element_list_ply(PlyFile *, int *);
    00197 void setup_property_ply(PlyFile *, PlyProperty *);
    00198 void get_element_ply (PlyFile *, void *);
    00199 char *setup_element_read_ply (PlyFile *, int, int *);
    00200 PlyOtherProp *get_other_properties_ply(PlyFile *, int);
    00201
    00202 void element_count_ply(PlyFile *, char *, int);
    00203 void describe_element_ply(PlyFile *, char *, int);
    00204 void describe_property_ply(PlyFile *, PlyProperty *);
    00205 void describe_other_properties_ply(PlyFile *, PlyOtherProp *, int);
    00206 void describe_other_elements_ply ( PlyFile *, PlyOtherElems *);
    00207 void get_element_setup_ply(PlyFile *, char *, int, PlyProperty *);
    00208 PlyProperty **get_element_description_ply(PlyFile *, char *, int*, int*);
    00209 void element_layout_ply(PlyFile *, char *, int, int, PlyProperty *);
    00210
    00211 void header_complete_ply(PlyFile *);
    00212 void put_element_setup_ply(PlyFile *, char *);
    00213 void put_element_ply(PlyFile *, void *);
    00214 void put_other_elements_ply(PlyFile *);
    00215
    00216 PlyPropRules *init_rule_ply (PlyFile *, char *);
    00217 void modify_rule_ply (PlyPropRules *, char *, int);
    00218 void start_props_ply (PlyFile *, PlyPropRules *);
    00219 void weight_props_ply (PlyFile *, float, void *);
    00220 void *get_new_props_ply(PlyFile *);
    00221 void set_prop_rules_ply (PlyFile *, PlyRuleList *);
    00222 PlyRuleList *append_prop_rule (PlyRuleList *, char *, char *);
    00223 int matches_rule_name (char *);
    00224
    00225 int equal_strings(char *, char *);
    00226 char *recreate_command_line (int, char *argv[]);
    00227
    00228
    00229 #ifdef __cplusplus
    00230 }
    00231 #endif
    00232 #endif /* !__PLY_H__ */
    00233

All Classes