# HG changeset patch # User John Tsiombikas # Date 1450504809 -7200 # Node ID 8bf96e11ed1f4486fc8125d7db8579704da17e0c # Parent 6e980fddbf3b962145d377cc9ce131dabc5175b6 curves file format parsing (untested) diff -r 6e980fddbf3b -r 8bf96e11ed1f src/curvefile.cc --- a/src/curvefile.cc Fri Dec 18 07:07:19 2015 +0200 +++ b/src/curvefile.cc Sat Dec 19 08:00:09 2015 +0200 @@ -1,4 +1,6 @@ #include +#include +#include #include "curvefile.h" static bool save_curve(FILE *fp, const Curve *curve); @@ -15,7 +17,7 @@ bool save_curves(FILE *fp, const Curve * const *curves, int count) { - fprintf(stderr, "GCURVES\ncount %d\n", count); + fprintf(stderr, "GCURVES\n"); for(int i=0; iset_type(CURVE_LINEAR); + } else if(tok == "hermite") { + curve->set_type(CURVE_HERMITE); + } else if(tok == "bspline") { + curve->set_type(CURVE_BSPLINE); + } else { + goto err; + } + } else { + if(!expect_str(fp, "cp")) { + goto err; + } + Vector3 cp; + for(int i=0; i<3; i++) { + if(!expect_float(fp, &cp[i])) { + goto err; + } + } + curve->add_point(Vector2(cp.x, cp.y), cp.z); + } + } + + if(curve->size() != cpcount) { + fprintf(stderr, "warning: curve cpcount was %d, but read %d control points\n", cpcount, curve->size()); + } + + return curve; +err: + fprintf(stderr, "failed to parse curve block\n"); + delete curve; + return 0; +} + Curve **load_curves(FILE *fp, int *countret) { - return 0; // TODO + if(!expect_str(fp, "GCURVES")) { + fprintf(stderr, "load_curves: failed to load, invalid file format\n"); + return 0; + } + + std::vector curves; + Curve *curve; + + while((curve = curve_block(fp))) { + curves.push_back(curve); + } + + int ncurves = (int)curves.size(); + if(!feof(fp)) { + for(int i=0; i