/* * face.h - Data structure and handling of one face of a part * * Written 2010 by Werner Almesberger * Copyright 2010 by Werner Almesberger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */ #ifndef FACE_H #define FACE_H #include "array.h" /* * 2D transformation: * * x' = x*a[0][0]+y*a[0][1]+b[0] * y' = x*a[1][0]+y*a[1][1]+b[1] */ struct matrix { double a[2][2]; double b[2]; }; struct face { struct array *a; int sx, sy; /* size */ int cx, cy; /* center */ int z_ref; double fx, fy; /* inclination factor */ struct matrix m; }; static inline double face_z0(const struct face *f, int x, int y) { return f->z_ref+f->fx*(x-f->sx/2)+f->fy*(y-f->sy/2); } struct face *read_face(const char *name); #endif /* FACE_H */