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