* Gears DLC (free) Using the involuteCircular fn to create a variety of cylindrical gearsets * Delete public/kcl-samples/gear directory * Update main.kcl fixing gear meshing * new samples Signed-off-by: Jess Frazelle <github@jessfraz.com> * add link Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com> Co-authored-by: Jess Frazelle <jessfraz@users.noreply.github.com> Co-authored-by: Jess Frazelle <github@jessfraz.com>
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// Spur Reduction Gearset
 | 
						|
// A pair of spur gears meshed together, with an equal module and different number of teeth
 | 
						|
 | 
						|
// Set units
 | 
						|
@settings(defaultLengthUnit = mm)
 | 
						|
 | 
						|
// Define a function to create a spur gear
 | 
						|
fn spurGear(nTeeth, module, pressureAngle, gearHeight) {
 | 
						|
  // Calculate gear parameters
 | 
						|
  pitchDiameter = module * nTeeth
 | 
						|
  addendum = module
 | 
						|
  deddendum = 1.25 * module
 | 
						|
  baseDiameter = pitchDiameter * cos(pressureAngle)
 | 
						|
  tipDiameter = pitchDiameter + 2 * module
 | 
						|
 | 
						|
  // Using the gear parameters, sketch an involute tooth spanning from the base diameter to the tip diameter
 | 
						|
  gearSketch = startSketchOn(XY)
 | 
						|
    |> startProfile(at = polar(angle = 0, length = baseDiameter / 2))
 | 
						|
    |> involuteCircular(
 | 
						|
         startRadius = baseDiameter / 2,
 | 
						|
         endRadius = tipDiameter / 2,
 | 
						|
         angle = 0,
 | 
						|
         tag = $seg01,
 | 
						|
       )
 | 
						|
    |> line(endAbsolute = polar(angle = 160 / nTeeth, length = tipDiameter / 2))
 | 
						|
    |> involuteCircular(
 | 
						|
         startRadius = baseDiameter / 2,
 | 
						|
         endRadius = tipDiameter / 2,
 | 
						|
         angle = -atan(segEndY(seg01) / segEndX(seg01)) - (180 / nTeeth),
 | 
						|
         reverse = true,
 | 
						|
       )
 | 
						|
    // Position the end line of the sketch at the start of the next tooth
 | 
						|
    |> line(endAbsolute = polar(angle = 360 / nTeeth, length = baseDiameter / 2))
 | 
						|
    // Pattern the sketch about the center by the specified number of teeth, then close the sketch
 | 
						|
    |> patternCircular2d(
 | 
						|
         %,
 | 
						|
         instances = nTeeth,
 | 
						|
         center = [0, 0],
 | 
						|
         arcDegrees = 360,
 | 
						|
         rotateDuplicates = true,
 | 
						|
       )
 | 
						|
    |> close()
 | 
						|
    // Subtract a 10mm diameter center hole from the gear
 | 
						|
    |> subtract2d(tool = circle(center = [0, 0], radius = 5))
 | 
						|
    // Extrude the gear to the specified height
 | 
						|
    |> extrude(length = gearHeight)
 | 
						|
 | 
						|
  return gearSketch
 | 
						|
}
 | 
						|
 | 
						|
// Model a small gear
 | 
						|
spurGear(
 | 
						|
  nTeeth = 17,
 | 
						|
  module = 1.5,
 | 
						|
  pressureAngle = 14,
 | 
						|
  gearHeight = 9,
 | 
						|
)
 | 
						|
 | 
						|
// Model a larger gear with the same module
 | 
						|
spurGear(
 | 
						|
       nTeeth = 51,
 | 
						|
       module = 1.5,
 | 
						|
       pressureAngle = 14,
 | 
						|
       gearHeight = 7,
 | 
						|
     )
 | 
						|
  // Translate the larger gear by the combined pitch radius of both gears, plus a small gap
 | 
						|
  |> translate(x = (51 + 17) / 2 * 1.5 + 1.3)
 | 
						|
 | 
						|
  // Rotate the gear so that the teeth mesh but do not intersect
 | 
						|
  |> rotate(yaw = 3)
 |