Let us take a look at the way of generating the following:
The overall structure is the following.
Let us start with the "spokes". The "generator" is a box as follows, where Thickness is 1.
To produce all twelve of them, the above box is rotated 30, 60, 90, 120 and 150 degrees.#declare OneSpoke = box { < -0.5, -Thickness, -5 >, < 0.5, Thickness, 5 > }
Therefore, we have six boxes in different positions and due to symmetry they generate 12 "spokes" as shown in figure (a) below.#declare Spokes = union { #declare Angle = 0 #while (Angle <= 150) object { OneSpoke rotate Angle*y } #declare Angle = Angle + 30 #end }
The body of the gear is simply a cylinder with thickness a little larger than that of the boxes. The boxes have thickness 1 and therefore the body has thickness 1.1. A union is required to put the above six boxes and this body cylinder together as shown below. The result is in above figure (b). In the following, Thickness and OuterRadius are 1 and 4, respectively.
The center part of the gear should be a little thinner than the outer part. To do so, two cylinders are used to remove some part of the body surface. These two cylinders have radius InnerRadius 3.5. Then, they are translated in the y-direction to Offset = 1.6 and subtracted from the gear body. The following is the POV-Ray definition and its result is shown in figure (c) above.#declare Body_Primitive = union { object { Spokes } cylinder { -(Thickness + 0.1)*y, (Thickness + 0.1)*y, OuterRadius } }
Next, let us punch eight holes. These holes are generated from the following. It is a cylinder with center at HoleCenter = ( 2.5, 0, 0 ) and radius HoleRadius = 0.5. The height of this cylinder is the thickness of the body.#declare Remove = cylinder { -Thickness*y, Thickness*y, InnerRadius } #declare Body_Without_Holes = difference { object { Body_Primitive } object { Remove translate Offset*y } object { Remove translate -Offset*y } }
These holes are punched with a #while loop as follows. Its result is shown in figure (d) above.#declare Hole_Puncher = cylinder { HoleCenter - Thickness*y, HoleCenter + Thickness*y, HoleRadius }
Then, we should add a shaft base. It is a cylinder with radius AxisOuterRadius = 1.6:#declare Body_With_Holes = difference { object { Body_Without_Holes } #declare Angle = 0 #while (Angle < 360) object { Hole_Puncher rotate Angle*y } #declare Angle = Angle + 45 #end }
The result is shown in figure (e) above. Finally, punching a hole for the shaft completes our work. To punch this hole, a cylinder with radius AxisInnerRadius = 1 is used and the final result is shown in the beginning of this page.#declare Body_With_Axis_Base = union { object { Body_With_Holes } cylinder { -Thickness*y, Thickness*y, AxisOuterRadius } }
#declare Body = difference { object { Body_With_Axis_Base } cylinder { -2*Thickness*y, 2*Thickness*y, AxisInnerRadius } }