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<GearPin> pins;
std::vector<GearSlot> slots;
// 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;