#include #include "rply.h" static int vertex_cb(p_ply_argument argument) { long eol; ply_get_argument_user_data(argument, NULL, &eol); printf("%g", ply_get_argument_value(argument)); if (eol) printf("\n"); else printf(" "); return 1; } static int face_cb(p_ply_argument argument) { long length, value_index; ply_get_argument_property(argument, NULL, &length, &value_index); switch (value_index) { case 0: case 1: printf("%g ", ply_get_argument_value(argument)); break; case 2: printf("%g\n", ply_get_argument_value(argument)); break; default: break; } return 1; } int main(void) { long nvertices, ntriangles; p_ply ply = ply_open("input.ply", NULL, 0, NULL); if (!ply) return 1; if (!ply_read_header(ply)) return 1; nvertices = ply_set_read_cb(ply, "vertex", "x", vertex_cb, NULL, 0); ply_set_read_cb(ply, "vertex", "y", vertex_cb, NULL, 0); ply_set_read_cb(ply, "vertex", "z", vertex_cb, NULL, 1); ntriangles = ply_set_read_cb(ply, "face", "vertex_indices", face_cb, NULL, 0); printf("%ld\n%ld\n", nvertices, ntriangles); if (!ply_read(ply)) return 1; ply_close(ply); return 0; }