6 #include <gmath/gmath.h>
9 /* distance unit: millimeters
22 /* position in polar coordinates on the parent gear */
23 float pos_dist, pos_angle;
25 GearSlot *conn_slot; /* slot connection */
32 /* position in polar coordinates on the parent gear */
33 float pos_dist_min, pos_dist_max, pos_angle;
35 GearPin *conn_pin; /* pin connection */
42 mutable Mat4 xform, dir_xform;
43 mutable bool xform_valid;
44 void calc_matrix() const;
46 float contour(float u);
50 /* TODO hide most of this shit, especially the stuff which invalidate
51 * the transformation matrices
54 Vec3 pos, axis; // implicitly defines a plane eqn.
55 float pdist; // derived: distance of plane from origin
57 float init_angle; // initial starting angle
58 float angle; // current angle of the gear
60 int nteeth; // number of teeth
62 float radius; // total radius of the gear, including teeth
63 float teeth_length; // how far teeth extend past the radius
64 float thickness; // thickness of the gear along the Z axis
66 float bevel; // bevel size
68 std::vector<GearPin> pins;
69 std::vector<GearSlot> slots;
74 void set_angular_offset(float offs);
75 float get_angular_offset() const;
77 // sets the supplied number of teeth, and calculates the radius
78 // of the gear, to achieve the required tooth pitch
79 void set_teeth(int nt, float tooth_pitch);
80 void set_axis(const Vec3 &axis);
81 void set_position(const Vec3 &pos);
82 const Vec3 &get_position() const;
83 Vec3 get_global_position() const; // taking parent gear into account
85 Vec3 get_planar_position() const; // 2D pos of gear on its plane
87 void set_angle(float angle);
88 float get_angle() const;
90 float get_vis_rotation() const;
91 const Mat4 &get_matrix() const;
92 const Mat4 &get_dir_matrix() const;
94 // returns the angle (in radians) from one tooth to the next
95 float get_angular_pitch() const;
98 void draw_wire(float line_width = 1.0f) const;