* Change pattern functions to call user function with keyword args * Fix KCL code to use unlabeled syntax * Update generated output
72 lines
3.1 KiB
Plaintext
72 lines
3.1 KiB
Plaintext
// Walkie Talkie Case
|
|
// The plastic case for the front of the walkie talkie
|
|
|
|
// Set units
|
|
@settings(defaultLengthUnit = in, kclVersion = 1.0)
|
|
|
|
// Import parameters and Zoo logo
|
|
import width, height, chamferLength, offset, screenWidth, screenHeight, screenYPosition, screenDepth, speakerBoxWidth, speakerBoxHeight, squareHoleSideLength, caseTolerance from "parameters.kcl"
|
|
import zLogo, oLogo, oLogo2 from "zoo-logo.kcl"
|
|
|
|
// Sketch the profile of the screen
|
|
screenSketch = startSketchOn(XZ)
|
|
|> startProfile(at = [-screenWidth / 2, screenYPosition])
|
|
|> xLine(length = screenWidth)
|
|
|> yLine(length = -screenHeight)
|
|
|> xLine(length = -screenWidth)
|
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|
|> close()
|
|
|
|
// Create transform functions for the speaker grid pattern
|
|
fn transformX(@i) {
|
|
return { translate = [.125 * i, 0] }
|
|
}
|
|
fn transformY(@i) {
|
|
return { translate = [0, -.125 * i] }
|
|
}
|
|
|
|
// Sketch the square hole grid pattern
|
|
squareHolePatternSketch = startSketchOn(XZ)
|
|
|> startProfile(at = [-screenWidth / 2 + .100, 0])
|
|
|> line(end = [squareHoleSideLength / 2, 0])
|
|
|> line(end = [0, -squareHoleSideLength / 2])
|
|
|> line(end = [-squareHoleSideLength / 2, 0])
|
|
|> close()
|
|
|> patternTransform2d(instances = 13, transform = transformX)
|
|
|> patternTransform2d(instances = 11, transform = transformY)
|
|
|
|
// Sketch the outer profile of the case and extrude with holes using the previously made profiles
|
|
case = startSketchOn(XZ)
|
|
|> startProfile(at = [
|
|
-width / 2 + offset + caseTolerance,
|
|
height / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(45deg))
|
|
])
|
|
|> angledLine(angle = 45, endAbsoluteY = height / 2 - (offset + caseTolerance))
|
|
|> line(endAbsolute = [
|
|
width / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(45deg)),
|
|
height / 2 - (offset + caseTolerance)
|
|
])
|
|
|> angledLine(angle = -45, endAbsoluteX = width / 2 - (offset + caseTolerance))
|
|
|> line(endAbsolute = [
|
|
width / 2 - (offset + caseTolerance),
|
|
-(height / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(45deg)))
|
|
])
|
|
|> angledLine(angle = -135, endAbsoluteY = -height / 2 + offset + caseTolerance)
|
|
|> line(endAbsolute = [
|
|
-(width / 2 - (chamferLength + (offset + caseTolerance) / 2 * cos(45deg))),
|
|
-height / 2 + offset + caseTolerance
|
|
])
|
|
|> angledLine(angle = -225, endAbsoluteX = -width / 2 + offset + caseTolerance)
|
|
|> close()
|
|
|> subtract2d(tool = screenSketch)
|
|
|> subtract2d(tool = squareHolePatternSketch)
|
|
|
|
// Create the Zoo logo
|
|
|> subtract2d(tool = zLogo(surface = startSketchOn(XZ), origin = [-.30, -1.825], scale = .20))
|
|
|> subtract2d(tool = oLogo(surface = startSketchOn(XZ), origin = [-.075, -1.825], scale = .20))
|
|
|> subtract2d(tool = oLogo2(surface = startSketchOn(XZ), origin = [-.075, -1.825], scale = .20))
|
|
|> subtract2d(tool = oLogo(surface = startSketchOn(XZ), origin = [.175, -1.825], scale = .20))
|
|
|> subtract2d(tool = oLogo2(surface = startSketchOn(XZ), origin = [.175, -1.825], scale = .20))
|
|
extrude(case, length = -0.0625)
|
|
|> appearance(color = '#D0FF01', metalness = 0, roughness = 50)
|