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, axel_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
63 float radius; // total radius of the gear, including teeth
64 float teeth_length; // how far teeth extend past the radius
65 float thickness; // thickness of the gear along the Z axis
67 float bevel; // bevel size
69 // visual surface properties
75 std::vector<Gear*> subgears;
76 std::vector<GearPin> pins;
77 std::vector<GearSlot> slots;
84 Gear *get_super() const;
86 void set_angular_offset(float offs);
87 float get_angular_offset() const;
89 // sets the supplied number of teeth, and calculates the radius
90 // of the gear, to achieve the required tooth pitch
91 void set_teeth(int nt, float tooth_pitch = 0.0f);
92 void set_axis(const Vec3 &axis);
93 const Vec3 &get_axis() const;
94 void set_position(const Vec3 &pos);
95 const Vec3 &get_position() const;
96 Vec3 get_global_position() const; // taking parent gear into account
98 Vec3 get_planar_position() const; // 2D pos of gear on its plane
100 void set_angle(float angle);
101 float get_angle() const;
103 float get_vis_rotation() const;
104 const Mat4 &get_matrix() const;
105 const Mat4 &get_dir_matrix() const;
107 // returns the angle (in radians) from one tooth to the next
108 float get_angular_pitch() const;
111 void draw_wire(float line_width = 1.0f) const;