* Add brake disc. * Update kcl-samples simulation test output * Update public/kcl-samples/brake-rotor/main.kcl Co-authored-by: Adam Chalmers <adam.chalmers@zoo.dev> * Update public/kcl-samples/brake-rotor/main.kcl Co-authored-by: Adam Chalmers <adam.chalmers@zoo.dev> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Adam Chalmers <adam.chalmers@zoo.dev> Co-authored-by: Jess Frazelle <jessfraz@users.noreply.github.com> Co-authored-by: Jess Frazelle <github@jessfraz.com>
		
			
				
	
	
		
			180 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
// A 320mm vented brake disc (rotor), with straight vanes, 30mm thick. The disc bell should accommodate 5 M12 wheel studs on a 114.3mm pitch circle diameter.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
@settings(defaultLengthUnit = mm)
 | 
						|
 | 
						|
// Define parameters.
 | 
						|
dDisc = 320
 | 
						|
dPitchCircle = 114.3
 | 
						|
dBore = 64
 | 
						|
nStuds = 5
 | 
						|
dStudDrilling = 12.5 // M12
 | 
						|
hFrictionSurface = 60
 | 
						|
tDiscHalf = 10
 | 
						|
 | 
						|
// Vent parameters.
 | 
						|
tVent = 10
 | 
						|
wVent = 6
 | 
						|
rVentFillet = 2
 | 
						|
nVentBosses = 36
 | 
						|
 | 
						|
// Drilling parameters.
 | 
						|
dDrillDia = 6
 | 
						|
aBase = 90
 | 
						|
aSweep = 30
 | 
						|
nArcs = 12
 | 
						|
 | 
						|
// Bell parameters.
 | 
						|
aDraftBell = 5
 | 
						|
tBell = 5 // Wall thickness.
 | 
						|
hBellAboveDiscFace = 40
 | 
						|
hBellSubflush = 4
 | 
						|
wUndercut = 8
 | 
						|
 | 
						|
fn drillHole(activeSketch, t) {
 | 
						|
  // Sketch a vent hole at line parameter value t on an arc drawn across the disc surface.
 | 
						|
  rInner = dDisc / 2 - hFrictionSurface
 | 
						|
  rOuter = dDisc / 2
 | 
						|
 | 
						|
  aStart = aBase
 | 
						|
  aEnd = aBase - aSweep
 | 
						|
 | 
						|
  // Linear interpolation of radius.
 | 
						|
  rCurrent = rInner + t * (rOuter - rInner)
 | 
						|
 | 
						|
  // Linear interpolation of angle.
 | 
						|
  aCurrent = aStart + t * (aEnd - aStart)
 | 
						|
 | 
						|
  // Calculate position.
 | 
						|
  xCenter = rCurrent * cos(aCurrent)
 | 
						|
  yCenter = rCurrent * sin(aCurrent)
 | 
						|
 | 
						|
  // Draw.
 | 
						|
  drillCircle = circle(activeSketch, center = [xCenter, yCenter], radius = dDrillDia / 2)
 | 
						|
  return drillCircle
 | 
						|
}
 | 
						|
 | 
						|
fn createDiscHalf(plane, dDiscParam, hFrictionSurfaceParam, tDiscHalfParam) {
 | 
						|
  // Create a disc half with a vent hole pattern.
 | 
						|
  sketchFace = startSketchOn(plane)
 | 
						|
  profileFace = circle(sketchFace, center = [0, 0], radius = dDiscParam / 2)
 | 
						|
    |> subtract2d(tool = circle(sketchFace, center = [0, 0], radius = dDiscParam / 2 - hFrictionSurfaceParam))
 | 
						|
 | 
						|
  // Create three circles at t = 0, 0.5, and 1
 | 
						|
  hole1 = drillHole(activeSketch = sketchFace, t = 0.2)
 | 
						|
  hole2 = drillHole(activeSketch = sketchFace, t = 0.5)
 | 
						|
  hole3 = drillHole(activeSketch = sketchFace, t = 0.8)
 | 
						|
 | 
						|
  // Pattern and cut.
 | 
						|
  holes = patternCircular2d(
 | 
						|
    [hole1, hole2, hole3],
 | 
						|
    instances = nArcs,
 | 
						|
    center = [0, 0],
 | 
						|
    arcDegrees = 360,
 | 
						|
    rotateDuplicates = true,
 | 
						|
  )
 | 
						|
  profileDrilled = subtract2d(profileFace, tool = holes)
 | 
						|
 | 
						|
  // Extrude.
 | 
						|
  discHalf = extrude(profileFace, length = tDiscHalfParam)
 | 
						|
  return discHalf
 | 
						|
}
 | 
						|
 | 
						|
// ---------------------------------------------------------------------------------------------------------------------
 | 
						|
 | 
						|
// Create inboard half.
 | 
						|
discInboard = createDiscHalf(
 | 
						|
  plane = XY,
 | 
						|
  dDiscParam = dDisc,
 | 
						|
  hFrictionSurfaceParam = hFrictionSurface,
 | 
						|
  tDiscHalfParam = tDiscHalf,
 | 
						|
)
 | 
						|
 | 
						|
// Create vents.
 | 
						|
planeVent = offsetPlane(XY, offset = tDiscHalf)
 | 
						|
sketchVent = startSketchOn(planeVent)
 | 
						|
profileVent = startProfile(sketchVent, at = [-wVent, dDisc / 2])
 | 
						|
  |> angledLine(angle = 0, length = wVent, tag = $rectangleSegmentA001)
 | 
						|
  |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = hFrictionSurface, tag = $seg02)
 | 
						|
  |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg03)
 | 
						|
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg01)
 | 
						|
  |> close()
 | 
						|
 | 
						|
ventPad = extrude(profileVent, length = tVent)
 | 
						|
  |> fillet(
 | 
						|
       radius = rVentFillet,
 | 
						|
       tags = [
 | 
						|
         getCommonEdge(faces = [seg01, rectangleSegmentA001]),
 | 
						|
         getCommonEdge(faces = [seg02, rectangleSegmentA001]),
 | 
						|
         getCommonEdge(faces = [seg01, seg03]),
 | 
						|
         getCommonEdge(faces = [seg03, seg02])
 | 
						|
       ],
 | 
						|
     )
 | 
						|
ventSet = patternCircular3d(
 | 
						|
  ventPad,
 | 
						|
  instances = nVentBosses,
 | 
						|
  axis = [0, 0, 1],
 | 
						|
  center = [0, 0, tDiscHalf],
 | 
						|
  arcDegrees = 360,
 | 
						|
  rotateDuplicates = true,
 | 
						|
)
 | 
						|
 | 
						|
// Create outboard half.
 | 
						|
planeOutboard = offsetPlane(XY, offset = tDiscHalf + tVent)
 | 
						|
discOutboard = createDiscHalf(
 | 
						|
  plane = planeOutboard,
 | 
						|
  dDiscParam = dDisc,
 | 
						|
  hFrictionSurfaceParam = hFrictionSurface,
 | 
						|
  tDiscHalfParam = tDiscHalf,
 | 
						|
)
 | 
						|
 | 
						|
// Now create bell.
 | 
						|
rCenter = dDisc / 2 - hFrictionSurface - wUndercut
 | 
						|
rBore = dBore / 2
 | 
						|
lDraftExterior = hBellAboveDiscFace / tan(90 - aDraftBell)
 | 
						|
lDraftInterior = (hBellAboveDiscFace - tBell) / tan(90 - aDraftBell)
 | 
						|
 | 
						|
// Inner and outer radius of outboard face of disc bell.
 | 
						|
rOuter = rCenter - lDraftExterior - rBore
 | 
						|
rInner = rOuter + lDraftExterior - (tBell + lDraftInterior)
 | 
						|
 | 
						|
sketchDiscBell = startSketchOn(-YZ)
 | 
						|
bodyDiscBell = startProfile(
 | 
						|
       sketchDiscBell,
 | 
						|
       at = [
 | 
						|
         -dDisc / 2 + hFrictionSurface,
 | 
						|
         tDiscHalf * 2 + tVent
 | 
						|
       ],
 | 
						|
     )
 | 
						|
  |> arc(
 | 
						|
       %,
 | 
						|
       angleStart = -180,
 | 
						|
       angleEnd = 0,
 | 
						|
       radius = wUndercut / 2,
 | 
						|
     )
 | 
						|
  |> line(end = [lDraftExterior, hBellAboveDiscFace])
 | 
						|
  |> xLine(length = rOuter, tag = $seg04)
 | 
						|
  |> yLine(length = -tBell)
 | 
						|
  |> xLine(length = -rInner)
 | 
						|
  |> line(end = [-lDraftInterior, -hBellAboveDiscFace])
 | 
						|
  |> line(end = [0, -2]) // Wall thickness.
 | 
						|
  |> xLine(length = -1 * (tBell + wUndercut))
 | 
						|
  |> close(%)
 | 
						|
  |> revolve(axis = Y)
 | 
						|
 | 
						|
// Drill lug holes.
 | 
						|
sketchLugs = startSketchOn(bodyDiscBell, face = seg04)
 | 
						|
profileStud = circle(sketchLugs, center = [0, dPitchCircle / 2], radius = dStudDrilling / 2)
 | 
						|
  |> patternCircular2d(
 | 
						|
       %,
 | 
						|
       instances = nStuds,
 | 
						|
       center = [0, 0],
 | 
						|
       arcDegrees = 360,
 | 
						|
       rotateDuplicates = true,
 | 
						|
     )
 | 
						|
 | 
						|
clearance = 2 // Some margin on negative extrude.
 | 
						|
lugs = extrude(profileStud, length = -1 * (tBell + clearance))
 |