* 3d models * Update kcl-samples simulation test output * typos * Update kcl-samples simulation test output --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
62 lines
2.0 KiB
Plaintext
62 lines
2.0 KiB
Plaintext
// Thermal Block Insert
|
|
// Interlocking insulation insert for masonry walls, designed with a tongue-and-groove profile for modular alignment and thermal efficiency
|
|
|
|
// Set units in millimeters (mm)
|
|
@settings(defaultLengthUnit = mm, kclVersion = 1.0)
|
|
|
|
// Define overall dimensions of the insert block
|
|
insertLength = 400
|
|
insertHeight = 200
|
|
insertThickness = 50
|
|
|
|
// Define tongue-and-groove profile parameters for interlocking geometry
|
|
setbackFactor = 0.25 // spacing between tongues
|
|
tongueTargetCount = insertLength / 80
|
|
tongueCount = round(tongueTargetCount)
|
|
tongueLength = insertLength / (tongueCount * (1 + setbackFactor * 2) + 1)
|
|
tongueGap = tongueLength * setbackFactor * 2
|
|
tongueStep = tongueLength + tongueGap
|
|
tongueDepth = tongueLength * 0.5
|
|
tongueSetback = tongueLength * setbackFactor
|
|
|
|
// Function to create one side of the repeating tongue geometry along the block edge
|
|
fn tongueBlockFn() {
|
|
tongueSingleBlock = xLine(length = tongueLength)
|
|
|> line(end = [-tongueSetback, tongueDepth])
|
|
|> xLine(length = tongueLength)
|
|
|> line(end = [-tongueSetback, -tongueDepth])
|
|
|> patternLinear2d(
|
|
%,
|
|
instances = tongueCount,
|
|
distance = tongueStep,
|
|
axis = [1, 0],
|
|
)
|
|
|> xLine(length = tongueLength)
|
|
return tongueSingleBlock
|
|
}
|
|
|
|
// Create top-side profile with tongues
|
|
tongueShape = startSketchOn(XY)
|
|
|> startProfile(%, at = [-insertLength / 2, insertThickness / 2])
|
|
|> tongueBlockFn()
|
|
|> yLine(length = -insertThickness / 2)
|
|
|> xLine(length = -insertLength)
|
|
|> close(%)
|
|
|
|
// Create bottom-side profile with grooves (inverse of tongue)
|
|
grooveShape = startSketchOn(XY)
|
|
|> startProfile(
|
|
%,
|
|
at = [
|
|
-insertLength / 2,
|
|
-insertThickness / 2 - tongueDepth
|
|
],
|
|
)
|
|
|> tongueBlockFn()
|
|
|> yLine(length = insertThickness / 2 + tongueDepth)
|
|
|> xLine(length = -insertLength)
|
|
|> close(%)
|
|
|
|
// Extrude both tongue and groove profiles to form the final thermal insert block
|
|
insertShape = extrude([tongueShape, grooveShape], length = insertHeight)
|