+void Gear::set_axis(const Vec3 &axis)
+{
+ this->axis = normalize(axis);
+ xform_valid = false;
+}
+
+const Vec3 &Gear::get_axis() const
+{
+ return axis;
+}
+
+void Gear::set_position(const Vec3 &pos)
+{
+ this->pos = pos;
+ xform_valid = false;
+}
+
+const Vec3 &Gear::get_position() const
+{
+ return pos;
+}
+
+Vec3 Gear::get_global_position() const
+{
+ return pos; // TODO
+}
+
+Vec3 Gear::get_planar_position() const
+{
+ Mat4 inv_xform = transpose(get_dir_matrix());
+ return inv_xform * pos;
+}
+
+void Gear::set_angle(float angle)