Thin Extrude: walls of a set thickness along sketch curves (#721) (#991)

Thin Extrude builds walls of a set thickness along sketch curves, open chains and closed loops, with the wall centred, inside, outside or on both sides at two thicknesses. Saved under format 20 (thin on an Extrude); an extrude without thin saves as before. Closes #721.
This commit is contained in:
Lasse Lian authored and GitHub committed 2026-10-14 11:46:16 -04:00
1 parent 86ea018d05
commit 6df69e9def
38 files changed
+1440 -34

No files matched your search

@@ -0,0 +1,25 @@
{
"source": "analytic",
"method": "square frame: the lines' 40 mm square walled 3 mm inside and 1 mm outside (mitred corners) is 42 x 42 less 34 x 34, 10 mm tall: V = (42^2 - 34^2) * 10, A = 2 (42^2 - 34^2) + 4 * 42 * 10 + 4 * 34 * 10",
"body_count": 1,
"volume_mm3": 6080.0,
"area_mm2": 4256.0,
"center_of_mass": [
0.0,
0.0,
5.0
],
"bbox": {
"min": [
-21.0,
-21.0,
0.0
],
"max": [
21.0,
21.0,
10.0
]
},
"faces": 10
}
@@ -0,0 +1,149 @@
{
"id": "82-thin-extrude-frame",
"name": "Thin extrude frame",
"description": "40x40 square of lines centred on origin; a thin wall 3 mm inside and 1 mm outside the lines, extruded 10 mm.",
"exercises": [
"extrude",
"thin"
],
"units": {
"length": "mm",
"angle": "deg",
"area": "mm2",
"volume": "mm3"
},
"conventions": {
"world": "right-handed; Z up. XY/XZ/YZ are the origin planes.",
"sketch_frame": "sketch-local 2D coords; world = plane.origin + x*plane.x_dir + y*plane.y_dir (origin in mm). Profile 'loops' list sketch entity ids.",
"point_refs": "'<id>.start' / '<id>.end' / '<id>.center' reuse (share) that existing sketch point; 'at' is its position when referenced.",
"extrude_direction": "positive = along sketch plane normal unless stated",
"selections": "selected faces/edges carry 'point': a world-space point on the face / the edge's parametric midpoint; pick the nearest face/edge to it."
},
"parameters": [],
"features": [
{
"op": "sketch",
"name": "Sketch1",
"plane": {
"ref": "XY",
"origin": [
0.0,
0.0,
0.0
],
"x_dir": [
1.0,
0.0,
0.0
],
"y_dir": [
0.0,
1.0,
0.0
],
"normal": [
0.0,
0.0,
1.0
]
},
"entities": [
{
"type": "line",
"start": {
"at": [
-20,
-20
]
},
"end": {
"at": [
20,
-20
]
},
"id": "l1"
},
{
"type": "line",
"start": {
"ref": "l1.end",
"at": [
20.0,
-20.0
]
},
"end": {
"at": [
20,
20
]
},
"id": "l2"
},
{
"type": "line",
"start": {
"ref": "l2.end",
"at": [
20.0,
20.0
]
},
"end": {
"at": [
-20,
20
]
},
"id": "l3"
},
{
"type": "line",
"start": {
"ref": "l3.end",
"at": [
-20.0,
20.0
]
},
"end": {
"ref": "l1.start",
"at": [
-20.0,
-20.0
]
},
"id": "l4"
}
],
"constraints": [],
"dimensions": []
},
{
"op": "extrude",
"name": "Frame",
"operation": "new",
"extent": {
"type": "distance",
"distance": 10,
"direction": "positive"
},
"result_bodies": [
"Frame"
],
"thin": {
"sketch": "Sketch1",
"curves": [
"l1",
"l2",
"l3",
"l4"
],
"thickness": 3,
"side": "two_sides",
"thickness2": 1
}
}
]
}