X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=antikythera;a=blobdiff_plain;f=src%2Fgear.h;h=5f99dd505c72bdb1c7d704960d0f1875e19bf553;hp=281e77f2d19e62800656c3f20e9d607ed13e6a9c;hb=HEAD;hpb=84484521a697fe60f63bff077b9ba7475a45e54e diff --git a/src/gear.h b/src/gear.h index 281e77f..5f99dd5 100644 --- a/src/gear.h +++ b/src/gear.h @@ -39,7 +39,7 @@ class Gear { private: Mesh *mesh; - mutable Mat4 xform, dir_xform; + mutable Mat4 xform, dir_xform, axel_xform; mutable bool xform_valid; void calc_matrix() const; @@ -52,12 +52,13 @@ public: */ std::string name; Vec3 pos, axis; // implicitly defines a plane eqn. - float pdist; // derived: distance of plane from origin + float pdist; // derived from the above: distance of plane from origin float init_angle; // initial starting angle float angle; // current angle of the gear int nteeth; // number of teeth + float tooth_pitch; float radius; // total radius of the gear, including teeth float teeth_length; // how far teeth extend past the radius @@ -65,20 +66,37 @@ public: float bevel; // bevel size + // visual surface properties + Vec3 color; + float roughness; + bool metallic; + + Gear *supergear; + std::vector subgears; std::vector pins; std::vector slots; Gear(); ~Gear(); + void attach(Gear *g); + bool detach(Gear *g); + Gear *get_super() const; + + void set_angular_offset(float offs); + float get_angular_offset() const; + // 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_teeth(int nt, float tooth_pitch = 0.0f); void set_axis(const Vec3 &axis); + const Vec3 &get_axis() const; 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; @@ -90,6 +108,7 @@ public: float get_angular_pitch() const; void draw() const; + void draw_wire(float line_width = 1.0f) const; bool gen_mesh(); };