X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=antikythera;a=blobdiff_plain;f=src%2Fgear.h;h=45a3d13f551f3b8cf0fb73feb3b8eef813e3249e;hp=12d9ba2fe1e4c71b34a4b9da3fb2b94284fb5048;hb=014fccdee30291407985658e8cefd9be7dc9e9fa;hpb=a88a9ac53952e1bb3768b147a043c19392e3d5d1 diff --git a/src/gear.h b/src/gear.h index 12d9ba2..45a3d13 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,13 +74,25 @@ 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 + + Vec3 get_planar_position() const; // 2D pos of gear on its plane + + 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; void draw() const; + void draw_wire(float line_width = 1.0f) const; bool gen_mesh(); };