X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=antikythera;a=blobdiff_plain;f=src%2Fgear.h;h=281e77f2d19e62800656c3f20e9d607ed13e6a9c;hp=12d9ba2fe1e4c71b34a4b9da3fb2b94284fb5048;hb=84484521a697fe60f63bff077b9ba7475a45e54e;hpb=1716bebf166a5424e4a683897a78883b7733a636 diff --git a/src/gear.h b/src/gear.h index 12d9ba2..281e77f 100644 --- a/src/gear.h +++ b/src/gear.h @@ -39,26 +39,31 @@ class Gear { private: Mesh *mesh; - mutable Mat4 xform; + mutable Mat4 xform, dir_xform; + mutable bool xform_valid; void calc_matrix() const; float contour(float u); public: + + /* TODO hide most of this shit, especially the stuff which invalidate + * the transformation matrices + */ std::string name; - Vec3 pos, axis; /* implicitly defines a plane eqn. */ - float pdist; /* derived: distance of plane from origin */ + Vec3 pos, axis; // implicitly defines a plane eqn. + float pdist; // derived: distance of plane from origin - float init_angle; /* initial starting angle */ - float angle; /* current angle of the gear */ + float init_angle; // initial starting angle + float angle; // current angle of the gear - int nteeth; /* number of teeth */ + int nteeth; // number of teeth - float radius; /* total radius of the gear, including teeth */ - float teeth_length; /* how far teeth extend past the radius */ - float thickness; /* thickness of the gear along the Z axis */ + float radius; // total radius of the gear, including teeth + float teeth_length; // how far teeth extend past the radius + float thickness; // thickness of the gear along the Z axis - float bevel; /* bevel size */ + float bevel; // bevel size std::vector pins; std::vector slots; @@ -69,8 +74,17 @@ public: // sets the supplied number of teeth, and calculates the radius // of the gear, to achieve the required tooth pitch void set_teeth(int nt, float tooth_pitch); + void set_axis(const Vec3 &axis); + void set_position(const Vec3 &pos); + const Vec3 &get_position() const; + Vec3 get_global_position() const; // taking parent gear into account + + void set_angle(float angle); + float get_angle() const; - float get_rotation() const; + float get_vis_rotation() const; + const Mat4 &get_matrix() const; + const Mat4 &get_dir_matrix() const; // returns the angle (in radians) from one tooth to the next float get_angular_pitch() const;