* Change pattern functions to call user function with keyword args * Fix KCL code to use unlabeled syntax * Update generated output
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Cheetah
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Cheetah
		
	
	
	
	
	
// 2x8 Lego Brick
 | 
						|
// A standard Lego brick with 2 bumps wide and 8 bumps long.
 | 
						|
// Define constants
 | 
						|
lbumps = 10 // number of bumps long
 | 
						|
wbumps = {{N}} // number of bumps wide
 | 
						|
pitch = 8.0
 | 
						|
clearance = 0.1
 | 
						|
bumpDiam = 4.8
 | 
						|
bumpHeight = 1.8
 | 
						|
height = 9.6
 | 
						|
t = (pitch - (2 * clearance) - bumpDiam) / 2.0
 | 
						|
totalLength = lbumps * pitch - (2.0 * clearance)
 | 
						|
totalWidth = wbumps * pitch - (2.0 * clearance)
 | 
						|
// Create the plane for the pegs. This is a hack so that the pegs can be patterned along the face of the lego base.
 | 
						|
pegFace = {
 | 
						|
  origin = { x = 0, y = 0, z = height },
 | 
						|
  xAxis = { x = 1, y = 0, z = 0 },
 | 
						|
  yAxis = { x = 0, y = 1, z = 0 },
 | 
						|
  zAxis = { x = 0, y = 0, z = 1 }
 | 
						|
}
 | 
						|
// Create the plane for the tubes underneath the lego. This is a hack so that the tubes can be patterned underneath the lego.
 | 
						|
tubeFace = {
 | 
						|
  origin = { x = 0, y = 0, z = height - t },
 | 
						|
  xAxis = { x = 1, y = 0, z = 0 },
 | 
						|
  yAxis = { x = 0, y = 1, z = 0 },
 | 
						|
  zAxis = { x = 0, y = 0, z = 1 }
 | 
						|
}
 | 
						|
// Make the base
 | 
						|
s = startSketchOn(XY)
 | 
						|
  |> startProfile(at = [-totalWidth / 2, -totalLength / 2])
 | 
						|
  |> line(end = [totalWidth, 0])
 | 
						|
  |> line(end = [0, totalLength])
 | 
						|
  |> line(end = [-totalWidth, 0])
 | 
						|
  |> close()
 | 
						|
  |> extrude(length = height)
 | 
						|
 | 
						|
// Sketch and extrude a rectangular shape to create the shell underneath the lego. This is a hack until we have a shell function.
 | 
						|
shellExtrude = startSketchOn(s, "start")
 | 
						|
  |> startProfile(at = [
 | 
						|
       -(totalWidth / 2 - t),
 | 
						|
       -(totalLength / 2 - t)
 | 
						|
     ])
 | 
						|
  |> line(end = [totalWidth - (2 * t), 0])
 | 
						|
  |> line(end = [0, totalLength - (2 * t)])
 | 
						|
  |> line(end = [-(totalWidth - (2 * t)), 0])
 | 
						|
  |> close()
 | 
						|
  |> extrude(length = -(height - t))
 | 
						|
 | 
						|
fn tr(@i) {
 | 
						|
  j = i + 1
 | 
						|
  x = (j/wbumps) * pitch
 | 
						|
  y = (j % wbumps) * pitch
 | 
						|
  return {
 | 
						|
    translate = [x, y, 0],
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// Create the pegs on the top of the base
 | 
						|
totalBumps = (wbumps * lbumps)-1
 | 
						|
peg = startSketchOn(s, face = END)
 | 
						|
  |> circle( center = [
 | 
						|
       -(pitch*(wbumps-1)/2),
 | 
						|
       -(pitch*(lbumps-1)/2)
 | 
						|
     ], radius = bumpDiam / 2)
 | 
						|
  |> patternLinear2d(
 | 
						|
       axis = [1, 0],
 | 
						|
       instances = wbumps,
 | 
						|
       distance = pitch
 | 
						|
     )
 | 
						|
  |> patternLinear2d(
 | 
						|
       axis = [0, 1],
 | 
						|
       instances = lbumps,
 | 
						|
       distance = pitch
 | 
						|
     )
 | 
						|
  |> extrude(length = bumpHeight)
 | 
						|
  // |> patternTransform(instances = totalBumps-1, transform = tr)
 | 
						|
 |