Kernel rig: second cases for draft (two adjacent faces), rib (in plane), press pull (an edge), split face (sketch and tool face) and sketch projection (a face loop and a silhouette)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
jyviko
2026-10-29 16:50:20 -04:00
committed by Irakli Kourtis
parent 4e7810659b
commit 815711421e
14 changed files with 440 additions and 0 deletions
@@ -0,0 +1,21 @@
{
"sources": [],
"what": "two adjacent sides of a block (front and right) drafted 10 deg from the base: the drafted faces meet along a new slanted edge",
"source": "analytic",
"method": "the section at height z is (40 - z tan10)(30 - z tan10); V = int_0^20 = 24000 - 70 tan10 * 200 + tan10^2 * 8000/3; still 6 faces",
"body_count": 1,
"faces": 6,
"volume_mm3": 21614.332147750192,
"bbox": {
"min": [
0,
0,
0
],
"max": [
40,
30,
20
]
}
}
@@ -0,0 +1,32 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 20,
"body_name": "Block"
}
},
{
"command": "solid.draft",
"params": {
"faces": [
[
20,
0,
10
],
[
40,
15,
10
]
],
"angle": "10 deg",
"neutral": "XY"
}
}
]
}
@@ -0,0 +1,9 @@
{
"sources": [],
"what": "Press Pull on an edge (its fillet mode): the block's top front edge rounded r2",
"source": "analytic",
"method": "a round r2 along 40 mm removes (1 - pi/4) r^2 * 40; faces 6 + 1",
"body_count": 1,
"faces": 7,
"volume_mm3": 11965.663706143592
}
@@ -0,0 +1,26 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Block"
}
},
{
"command": "solid.press_pull",
"params": {
"edges": [
[
20,
0,
10
]
],
"distance": 2
}
}
]
}
@@ -0,0 +1,20 @@
{
"sources": [],
"what": "a cylinder's top face projected onto a sketch 10 mm above it and extruded: the projected circle is the profile",
"source": "analytic",
"method": "the top's loop is the circle r10: extruded 5 from z=20, a second cylinder 500 pi beside the first 1000 pi",
"body_count": 2,
"volume_mm3": 4712.38898038469,
"bbox": {
"min": [
-10,
-10,
0
],
"max": [
10,
10,
25
]
}
}
@@ -0,0 +1,48 @@
{
"commands": [
{
"command": "solid.cylinder",
"params": {
"radius": 10,
"height": 10,
"body_name": "Post"
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"offset": 20,
"name": "Above"
}
},
{
"command": "sketch.project",
"params": {
"refs": [
{
"face": [
0,
0,
10
]
}
]
}
},
{
"command": "sketch.finish",
"params": {
"sketch": "Above"
}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Above",
"distance": 5,
"operation": "new"
}
}
]
}
@@ -0,0 +1,20 @@
{
"sources": [],
"what": "a sphere's silhouette projected onto a plane below it and extruded: the outline is its equator circle, exactly",
"source": "analytic",
"method": "the silhouette of a sphere r8 seen along Z is the circle r8: extruded 5 down from z=-10, 320 pi beside the sphere 4/3 pi 512",
"body_count": 2,
"volume_mm3": 3149.9702339993655,
"bbox": {
"min": [
-8,
-8,
-15
],
"max": [
8,
8,
8
]
}
}
@@ -0,0 +1,43 @@
{
"commands": [
{
"command": "solid.sphere",
"params": {
"radius": 8,
"body_name": "Ball"
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"offset": -10,
"name": "Below"
}
},
{
"command": "sketch.project",
"params": {
"refs": [
{
"body": "Ball"
}
]
}
},
{
"command": "sketch.finish",
"params": {
"sketch": "Below"
}
},
{
"command": "solid.extrude",
"params": {
"sketch": "Below",
"distance": -5,
"operation": "new"
}
}
]
}
@@ -0,0 +1,10 @@
{
"sources": [],
"what": "a block's top face split by a sketch circle on it: a disc face and the face around it",
"source": "analytic",
"method": "the shape is unchanged (V 12000, A 3800); the top becomes two faces: 7",
"body_count": 1,
"faces": 7,
"volume_mm3": 12000.0,
"area_mm2": 3800.0
}
@@ -0,0 +1,50 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Block"
}
},
{
"command": "sketch.create",
"params": {
"plane": "XY",
"offset": 10,
"name": "Ring"
}
},
{
"command": "sketch.circle.center",
"params": {
"center": [
20,
15
],
"radius": 5
}
},
{
"command": "sketch.finish",
"params": {
"sketch": "Ring"
}
},
{
"command": "solid.split_face",
"params": {
"faces": [
[
5,
5,
10
]
],
"sketch": "Ring"
}
}
]
}
@@ -0,0 +1,9 @@
{
"sources": [],
"what": "a block's top face split by the side of a cylinder standing on it (the tool face's surface extended)",
"source": "analytic",
"method": "the cylinder's side meets the top in the circle r5: the top becomes two faces (7); the block keeps V 12000, the cylinder 250 pi and its 3 faces",
"body_count": 2,
"faces": 10,
"volume_mm3": 12785.398163397449
}
@@ -0,0 +1,47 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 40,
"width": 30,
"height": 10,
"body_name": "Block"
}
},
{
"command": "solid.cylinder",
"params": {
"base": [
20,
15,
10
],
"radius": 5,
"height": 10,
"body_name": "Cutter"
}
},
{
"command": "solid.split_face",
"params": {
"faces": [
[
5,
5,
10
]
],
"body": "Block",
"tool": {
"body": "Cutter",
"point": [
25,
15,
15
]
}
}
}
]
}
@@ -0,0 +1,20 @@
{
"sources": [],
"what": "an in-plane rib (the default direction): a diagonal line across the inside corner of an L bracket fills to the two faces",
"source": "analytic",
"method": "L bracket: base 60x40x5 + wall 5x40x35 above it = 19000; the line (5,25)-(25,5) in the plane y=20 closes with the wall x=5 and the base top z=5 a right triangle of legs 20: 200 mm^2, 2 thick across the plane: + 400",
"body_count": 1,
"volume_mm3": 19400.0,
"bbox": {
"min": [
0,
0,
0
],
"max": [
60,
40,
40
]
}
}
@@ -0,0 +1,85 @@
{
"commands": [
{
"command": "solid.box",
"params": {
"length": 60,
"width": 40,
"height": 5,
"body_name": "Bracket"
}
},
{
"command": "solid.box",
"params": {
"length": 5,
"width": 40,
"height": 40,
"corner": [
0,
0,
0
],
"operation": "join"
}
},
{
"command": "sketch.create",
"params": {
"plane": {
"origin": [
0,
20,
0
],
"x_dir": [
1,
0,
0
],
"y_dir": [
0,
0,
1
]
},
"name": "Gussets"
}
},
{
"command": "sketch.line",
"params": {
"points": [
[
5,
25
],
[
25,
5
]
],
"ids": [
"g1"
],
"infer": false
}
},
{
"command": "sketch.finish",
"params": {
"sketch": "Gussets"
}
},
{
"command": "solid.rib",
"params": {
"sketch": "Gussets",
"curves": [
"g1"
],
"thickness": 2
}
}
]
}