1 #include <stdio.h>
2 #include "rply.h"
3 
vertex_cb(p_ply_argument argument)4 static int vertex_cb(p_ply_argument argument) {
5     long eol;
6     ply_get_argument_user_data(argument, NULL, &eol);
7     printf("%g", ply_get_argument_value(argument));
8     if (eol) printf("\n");
9     else printf(" ");
10     return 1;
11 }
12 
face_cb(p_ply_argument argument)13 static int face_cb(p_ply_argument argument) {
14     long length, value_index;
15     ply_get_argument_property(argument, NULL, &length, &value_index);
16     switch (value_index) {
17         case 0:
18         case 1:
19             printf("%g ", ply_get_argument_value(argument));
20             break;
21         case 2:
22             printf("%g\n", ply_get_argument_value(argument));
23             break;
24         default:
25             break;
26     }
27     return 1;
28 }
29 
main(void)30 int main(void) {
31     long nvertices, ntriangles;
32     p_ply ply = ply_open("input.ply", NULL);
33     if (!ply) return 1;
34     if (!ply_read_header(ply)) return 1;
35     nvertices = ply_set_read_cb(ply, "vertex", "x", vertex_cb, NULL, 0);
36     ply_set_read_cb(ply, "vertex", "y", vertex_cb, NULL, 0);
37     ply_set_read_cb(ply, "vertex", "z", vertex_cb, NULL, 1);
38     ntriangles = ply_set_read_cb(ply, "face", "vertex_indices", face_cb, NULL, 0);
39     printf("%ld\n%ld\n", nvertices, ntriangles);
40     if (!ply_read(ply)) return 1;
41     ply_close(ply);
42     return 0;
43 }
44 
45