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