45 lines
1.3 KiB
C
45 lines
1.3 KiB
C
|
#include <stdio.h>
|
||
|
#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;
|
||
|
}
|
||
|
|