mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-03 18:45:55 +00:00
Rig: blends that end where their face runs tangent into another
Fifteen fillet cases on the test-peg's shape with clean numbers: a bar 40 x 16 x 10 whose far end is a half disc R8, a disc R8 standing 10 on its top, joined, so the front face runs tangent into the cylinder along x = 40 and the front top edge (convex) meets the concave arc of the top tangentially there. Each blend ends on a face tangent to the one it rolls on. - Rounds: both edges together at r2 and r5; one after the other in either order at r2, and at r1.5 and r3; the front edge alone as a curvature round, whose end on the cylinder is a semicubical cusp. The containment invariant (the unblended body's exact box, to 4e-5) and G1 seams, or the analytic volume where the blend has a closed section. - Chamfers: the front edge alone and the concave arc alone (analytic volumes: the section along x up to the wall, the cone's spandrel ring clipped by the sides), both together, and one after the other (1 then 2). - STEP: the peg written to STEP and read back, its front edge rounded (analytic) and both edges rounded together. - A cone: the peg drafted 5 deg, whose front face runs tangent into a cone along a generator, its front edge alone and both edges together. The quadratures are tanh-sinh, converged to 1e-13; SMLib's own volumes of the passing analytic cases agree to 4e-9. A sphere is left out: a plane meets a sphere tangentially at a point, not along a seam, so it is not this ending. On SMLib 2fc375f eight fail, listed in KNOWN_FAILING: every chamfer that ends tangent (status 1001, SmFilletNx1Corner), the two rounds together (the corner patch 0.0374 at r2 and 0.128 at r5 out of the front face, and the rounds meeting with normals 180 degrees apart where their contact lines on the top cross), the same on the STEP-read peg (status 1001) and on the drafted peg (its corner refused as unsupported). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,14 @@ cov-chamfer-outer-corner-edge-of-a-shelled-box-with-a-lip SMLib's chamfer result
|
||||
cov-fillet-arc-edge-on-an-oblique-cut-of-a-bar SMLib's check refuses the round: internal coincident control points in a B-spline curve
|
||||
every-block-cylinder-crease-top-edge-after-arc-round-r1 the r1 round's contact seam with the block's side face reads 60 degrees (the cylinder wall's normal) at its end on the crease (8.660, 5, 15.284): G0 where the round is built tangent
|
||||
every-hole-top-rim-r12-past-plate-bottom SMLib status 1001: a convex round past its face on the tangent side is not yet built by subtraction
|
||||
report-drafted-peg-front-and-concave-rounds-together-r2 not supported yet: SMLib refuses the corner where the drafted front top edge runs tangent into the concave arc (on the cone) as of no kind its blend corners take
|
||||
report-fillet-concave-arc-and-front-top-edge-together-r5-solver-residues the corner patch where the convex and concave rounds meet stands 0.128 out of the front face (box y min -0.0699 against 0.0579)
|
||||
report-fillet-concave-arc-and-front-top-edge-together-r7-solver-residues the corner patch where the convex and concave rounds meet stands 0.230 out of the front face (box y min -0.1723 against 0.0579)
|
||||
report-fillet-concave-arc-and-front-top-edge-together-solver-residues the corner patch where the convex and concave rounds meet stands 0.0374 out of the front face (box y min 0.0205 against 0.0579)
|
||||
report-peg-concave-chamfer-d2 SMLib status 1001: SmFilletNx1Corner, Corner Edge Computation Failure, at the chamfer's end on the front face, which leaves its contact line on the cylinder tangentially
|
||||
report-peg-front-and-concave-chamfers-together-d2 SMLib status 1001: SmFilletNx1Corner, Corner Edge Computation Failure, at the chamfers' tangent ends (as report-peg-front-chamfer-d2)
|
||||
report-peg-front-and-concave-rounds-together-r2 the corner patch where the convex and concave rounds meet stands 0.0374 out of the front face (box y min -0.0374), and the two rounds meet at (32, 2, 10), where their contact lines on the top cross, with normals 180 degrees apart
|
||||
report-peg-front-and-concave-rounds-together-r5 the corner patch where the convex and concave rounds meet stands 0.128 out of the front face (box y min -0.1278), and the two rounds meet at (27.351, 5, 10), where their contact lines on the top cross, with normals 180 degrees apart
|
||||
report-peg-front-chamfer-d1-then-concave-chamfer-d2 SMLib status 1001 on the first chamfer (as report-peg-front-chamfer-d2)
|
||||
report-peg-front-chamfer-d2 SMLib status 1001: SmFilletNx1Corner, Corner Edge Computation Failure, at the chamfer's end on the cylinder, which leaves its contact line on the front face tangentially
|
||||
report-peg-step-front-and-concave-rounds-together-r2 SMLib status 1001: Fillet Surface Computation Failure on the peg read back from STEP (the native peg builds, with its corner patch out of the front face)
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"what": "as report-peg-front-and-concave-rounds-together-r2 on the drafted peg, whose front face runs tangent into a cone",
|
||||
"source": "invariants",
|
||||
"method": "the peg (a bar 40 x 16 whose far end is a half disc R8 about (40, 8)) extruded 10 with a 5 deg inward taper, then the top's end circle (R 8 - 10 tan 5 deg about (40, 8)) extruded 10 up with the same taper and joined: the bar's drafted front face runs tangent into the cone along its generator through x = 40, and the top's concave arc meets the front top edge where the two are tangent, as on the straight peg; the front top edge and the concave arc rounded r2 in one fillet, tangent chain on; no closed form: one valid body, every seam a round or the corner patch makes G1",
|
||||
"body_count": 1,
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
+177
@@ -0,0 +1,177 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"taper": "-5 deg",
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
5,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 7.12511336474076
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"taper": "-5 deg",
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0.8748866352592399,
|
||||
10
|
||||
],
|
||||
[
|
||||
32.87488663525924,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2,
|
||||
"tangent_chain": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"what": "the drafted peg's front top edge rounded r2: the round runs into the cone its drafted front face runs tangent into; reported from the app (2026-10-30, test-peg part), drafted",
|
||||
"source": "invariants",
|
||||
"method": "the peg (a bar 40 x 16 whose far end is a half disc R8 about (40, 8)) extruded 10 with a 5 deg inward taper, then the top's end circle (R 8 - 10 tan 5 deg about (40, 8)) extruded 10 up with the same taper and joined: the bar's drafted front face runs tangent into the cone along its generator through x = 40, and the top's concave arc meets the front top edge where the two are tangent, as on the straight peg; the front top edge (y = 10 tan 5 deg, z = 10) rounded r2; no closed form: one valid body, every seam the round makes with its faces G1",
|
||||
"body_count": 1,
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"taper": "-5 deg",
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
5,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 7.12511336474076
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"taper": "-5 deg",
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0.8748866352592399,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"what": "the peg's concave arc where its top meets the cylinder alone chamfered 2: the chamfer's cone runs out over the front top edge at both ends, past the point where the front face runs tangent into the cylinder; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "analytic",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the 2 x 2 chamfer of the concave arc adds the cone's spandrel ring, clipped by the bar's sides y = 0 and y = 16 (as report-fillet-concave-arc-bar-top-into-cylinder): added = integral over rho in [8, 10] of (10 - rho) rho 2 asin(8 / rho) d rho = 41.6567842489 (tanh-sinh quadrature)",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9457.5857316951,
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "as report-peg-concave-round-then-front-round-r2 with unequal radii: the concave arc r3, then the front top edge r1.5",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the concave arc rounded r3, then the front top edge (y = 0, z = 10) r1.5; the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a round makes with its faces, and those of a corner patch, G1",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 3
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 1.5
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "the peg's concave arc where its top meets the cylinder rounded r2, then its front top edge r2: the second round's tangent chain runs on up the front face's edge with the first round, to the point where that edge is tangent to the cylinder and the round must fade to nothing; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the concave arc rounded r2, then the front top edge (y = 0, z = 10) r2 (tangent chain on, as by default); the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a round makes with its faces, and those of a corner patch, G1",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "the peg's front top edge and its concave arc chamfered 2 together, the convex and the concave chamfer meeting where the front face runs tangent into the cylinder; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the front top edge and the concave arc chamfered 2 in one chamfer; the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a chamfer makes with its faces G0",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
+174
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
],
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "the peg's front top edge (convex) and the concave arc where its top meets the cylinder, rounded r2 together: the two edges are tangent where they meet, at the point where the front face runs tangent into the cylinder, and the corner patch there stood out of the front face; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the front top edge (y = 0, z = 10) and the concave arc rounded r2 in one fillet, tangent chain on; the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a round makes with its faces, and those of a corner patch, G1",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
],
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2,
|
||||
"tangent_chain": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "the peg's front top edge (convex) and the concave arc where its top meets the cylinder, rounded r5 together: the two edges are tangent where they meet, at the point where the front face runs tangent into the cylinder, and the corner patch there stood out of the front face; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the front top edge (y = 0, z = 10) and the concave arc rounded r5 in one fillet, tangent chain on; the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a round makes with its faces, and those of a corner patch, G1",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
],
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 5,
|
||||
"tangent_chain": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "the peg's front top edge chamfered 1, then its concave arc chamfered 2: the second chamfer's chain runs on down the first chamfer's end on the cylinder, which leaves the front face tangentially; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the front top edge chamfered 1, then the concave arc chamfered 2; the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a chamfer makes with its faces G0",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"what": "the peg's front top edge alone chamfered 2 into the cylinder: the chamfer's end on the cylinder's wall leaves the front face's contact line tangentially (a zero-angle corner of the chamfer face) where the front face runs tangent into the cylinder; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "analytic",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the 2 x 2 chamfer of the front top edge removes its triangle along x up to the cylinder's wall, x = 40 - sqrt(64 - (8 - y)^2): removed = integral over y in [0, 2] of (2 - y)(40 - sqrt(64 - (8 - y)^2)) dy = 74.1305705753 (tanh-sinh quadrature)",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9341.798376870891,
|
||||
"continuity": {
|
||||
"order": "g0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.chamfer",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"distance": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"what": "the peg's front top edge alone given a curvature-continuous round (equivalent radius 2) running into the cylinder: its section leaves the front face with zero curvature, so its end on the cylinder's wall is a semicubical cusp (x - 40 ~ (8 - z)^1.5) where the front face runs tangent into the cylinder; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "analytic",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the curvature section of setback 2: the quintic Bezier from (2, 0) on the top to (0, 2) on the front face (y from the front face, depth below the top), control points at thirds along each face (SMLIB_BLEND_CURVATURE), area 0.5978835979; the round removes it along x up to the cylinder's wall, x = 40 - sqrt(64 - (8 - y)^2): removed = integral over the section of that length = 22.6210111335 (tanh-sinh quadrature, converged to 1e-13); every seam of the round with its faces G2",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9393.307936312665,
|
||||
"continuity": {
|
||||
"order": "g2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2,
|
||||
"type": "curvature"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "as report-peg-front-round-then-concave-round-r2 with unequal radii: the front top edge r1.5, then the concave arc r3",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the front top edge (y = 0, z = 10) rounded r1.5, then the concave arc r3; the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a round makes with its faces, and those of a corner patch, G1",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 1.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 3
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "the peg's front top edge rounded r2, then the concave arc where its top meets the cylinder r2: the second round's tangent chain runs on down the first round's end on the cylinder, to the point where that end is tangent to the front face and the round must fade to nothing; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; the front top edge (y = 0, z = 10) rounded r2, then the concave arc r2 (tangent chain on, as by default); the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a round makes with its faces, and those of a corner patch, G1",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"what": "as report-peg-front-and-concave-rounds-together-r2, on the peg exported to STEP and read back",
|
||||
"source": "invariants",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; written to STEP and inserted into a new design; the front top edge (y = 0, z = 10) and the concave arc rounded r2 in one fillet, tangent chain on; the planes of the front face y = 0, the back y = 16, the bottom, the left end and the cylinder's top bound the whole body (the cylinder's wall runs tangent into the front and back faces), and every blend lies within them, so the body's exact box (SMLib's tight box) is the unblended body's, (0, 0, 0) .. (48, 16, 20); graded to 4e-5, the blends' approximation tolerance: a corner patch or an end that stands out of the front face fails; every seam a round makes with its faces, and those of a corner patch, G1",
|
||||
"body_count": 1,
|
||||
"bbox": {
|
||||
"min": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"max": [
|
||||
48,
|
||||
16,
|
||||
20
|
||||
]
|
||||
},
|
||||
"tolerance": {
|
||||
"abs_mm": 4e-05
|
||||
},
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
+194
@@ -0,0 +1,194 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "file.export",
|
||||
"params": {
|
||||
"path": "$OUT/kernel-case-peg-together.step",
|
||||
"format": "step"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "file.new",
|
||||
"params": {
|
||||
"name": "Reimported"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "file.insert_step",
|
||||
"params": {
|
||||
"path": "$OUT/kernel-case-peg-together.step"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
],
|
||||
[
|
||||
32,
|
||||
8,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2,
|
||||
"tangent_chain": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"what": "the peg exported to STEP and read back, its front top edge then rounded r2 into the cylinder: the same round as on the native body; reported from the app (2026-10-30, test-peg part)",
|
||||
"source": "analytic",
|
||||
"method": "a bar 40 x 16 x 10 whose far end is a half disc R8 about (40, 8), a disc R8 about the same centre sketched on its top (the top's outline projected) and extruded 10 up, joined: the bar's front face y = 0 runs tangent into the cylinder along x = 40, V0 = 6400 + 960 pi; written to STEP and inserted into a new design; the r2 round of the front top edge (y = 0, z = 10) runs into the cylinder's wall: removed = integral over y in [0, 2] of (2 - sqrt(4 - (2 - y)^2)) (40 - sqrt(64 - (8 - y)^2)) dy = 32.3064750439 (tanh-sinh quadrature)",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9383.622472402329,
|
||||
"continuity": {
|
||||
"order": "g1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"commands": [
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": "XY",
|
||||
"name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
40,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.arc.center_point",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"start": [
|
||||
40,
|
||||
0
|
||||
],
|
||||
"end": [
|
||||
40,
|
||||
16
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
40,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
16
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.line",
|
||||
"params": {
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
16
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Peg",
|
||||
"distance": 10,
|
||||
"body_name": "Peg"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.create",
|
||||
"params": {
|
||||
"plane": {
|
||||
"origin": [
|
||||
0,
|
||||
0,
|
||||
10
|
||||
],
|
||||
"x_dir": [
|
||||
1,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"y_dir": [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]
|
||||
},
|
||||
"name": "Top"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.project",
|
||||
"params": {
|
||||
"refs": [
|
||||
{
|
||||
"face": [
|
||||
2,
|
||||
8,
|
||||
10
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.circle.center",
|
||||
"params": {
|
||||
"center": [
|
||||
40,
|
||||
8
|
||||
],
|
||||
"radius": 8
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "sketch.finish",
|
||||
"params": {}
|
||||
},
|
||||
{
|
||||
"command": "solid.extrude",
|
||||
"params": {
|
||||
"sketch": "Top",
|
||||
"distance": 10,
|
||||
"operation": "join",
|
||||
"targets": [
|
||||
"Peg"
|
||||
],
|
||||
"profiles": [
|
||||
{
|
||||
"point": [
|
||||
40,
|
||||
8
|
||||
]
|
||||
}
|
||||
],
|
||||
"exact_regions": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "file.export",
|
||||
"params": {
|
||||
"path": "$OUT/kernel-case-peg-front-round.step",
|
||||
"format": "step"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "file.new",
|
||||
"params": {
|
||||
"name": "Reimported"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "file.insert_step",
|
||||
"params": {
|
||||
"path": "$OUT/kernel-case-peg-front-round.step"
|
||||
}
|
||||
},
|
||||
{
|
||||
"command": "solid.fillet",
|
||||
"params": {
|
||||
"edges": [
|
||||
[
|
||||
20,
|
||||
0,
|
||||
10
|
||||
]
|
||||
],
|
||||
"radius": 2
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user