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)) |