curvedraw

annotate src/curvefile.cc @ 6:6e980fddbf3b

curve export
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 18 Dec 2015 07:07:19 +0200
parents
children 8bf96e11ed1f
rev   line source
nuclear@6 1 #include <stdlib.h>
nuclear@6 2 #include "curvefile.h"
nuclear@6 3
nuclear@6 4 static bool save_curve(FILE *fp, const Curve *curve);
nuclear@6 5
nuclear@6 6 bool save_curves(const char *fname, const Curve * const *curves, int count)
nuclear@6 7 {
nuclear@6 8 FILE *fp = fopen(fname, "wb");
nuclear@6 9 if(!fp) return false;
nuclear@6 10
nuclear@6 11 bool res = save_curves(fp, curves, count);
nuclear@6 12 fclose(fp);
nuclear@6 13 return res;
nuclear@6 14 }
nuclear@6 15
nuclear@6 16 bool save_curves(FILE *fp, const Curve * const *curves, int count)
nuclear@6 17 {
nuclear@6 18 fprintf(stderr, "GCURVES\ncount %d\n", count);
nuclear@6 19
nuclear@6 20 for(int i=0; i<count; i++) {
nuclear@6 21 if(!save_curve(fp, curves[i])) {
nuclear@6 22 return false;
nuclear@6 23 }
nuclear@6 24 }
nuclear@6 25 return true;
nuclear@6 26 }
nuclear@6 27
nuclear@6 28 static const char *curve_type_str(CurveType type)
nuclear@6 29 {
nuclear@6 30 switch(type) {
nuclear@6 31 case CURVE_LINEAR:
nuclear@6 32 return "polyline";
nuclear@6 33 case CURVE_HERMITE:
nuclear@6 34 return "hermite";
nuclear@6 35 case CURVE_BSPLINE:
nuclear@6 36 return "bspline";
nuclear@6 37 }
nuclear@6 38 abort();
nuclear@6 39 }
nuclear@6 40
nuclear@6 41 static bool save_curve(FILE *fp, const Curve *curve)
nuclear@6 42 {
nuclear@6 43 fprintf(fp, "curve {\n");
nuclear@6 44 fprintf(fp, " type %s\n", curve_type_str(curve->get_type()));
nuclear@6 45 fprintf(fp, " cpcount %d\n", curve->size());
nuclear@6 46 for(int i=0; i<curve->size(); i++) {
nuclear@6 47 Vector3 cp = curve->get_homo_point(i);
nuclear@6 48 fprintf(fp, " cp %g %g %g\n", cp.x, cp.y, cp.z);
nuclear@6 49 }
nuclear@6 50 fprintf(fp, "}\n");
nuclear@6 51 return true;
nuclear@6 52 }
nuclear@6 53
nuclear@6 54 Curve **load_curves(const char *fname, int *countret)
nuclear@6 55 {
nuclear@6 56 FILE *fp = fopen(fname, "rb");
nuclear@6 57 if(!fp) return false;
nuclear@6 58
nuclear@6 59 Curve **res = load_curves(fp, countret);
nuclear@6 60 fclose(fp);
nuclear@6 61 return res;
nuclear@6 62 }
nuclear@6 63
nuclear@6 64 Curve **load_curves(FILE *fp, int *countret)
nuclear@6 65 {
nuclear@6 66 return 0; // TODO
nuclear@6 67 }
nuclear@6 68