mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-05 19:45:54 +00:00
kernel-cases: tessellation cases from #311-#2712 (14 cases)
311 ramp cut across a round blank, 784/811 filleted and drilled bodies for STL export, 818 blind hole in a filleted ring, 819/921 pocket that splits a wall seam, 1263 concave arc with a knife-edge tip, 1615/1653 crossed lofted tubes, 1648/1850 sphere touching a box edge, 1666/1670 two twisted lofts, 1753 bowl rim cut by a cylinder, 1813/2712 lens face thinner than the tolerance, 2069 notched ring moved far away, 2528 slot joined with an overlapping cylinder. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1263"
|
||||
],
|
||||
"what": "a plate with a concave quarter-round wall that meets the back face tangentially at a knife-edge tip (a box and a box less a cylinder, united): its display tessellation used to fail with 'boundary does not lie on the surface' before anything was filleted",
|
||||
"source": "analytic",
|
||||
"method": "Plate x 0..41.1667, y -21..0, z 0..10 (area 864.5 in plan). Corner box x 41.1667..62.1667, y -21..0 less the cylinder r=21 centred at (62.1667,-21): the cylinder takes the quarter disc pi 21^2/4 = 346.361 out of the 441 plan area, leaving 94.639 (it meets the back face y=0 at the tip (62.1667,0), tangentially). Plan area 959.139, V = 10 * 959.139 = 9591.394. Surface: top and bottom 2*959.139, left wall 21*10, front wall 41.1667*10 (the arc starts at the corner box's front-left corner, so the corner adds no front wall), back wall 62.1667*10, arc wall (pi*21/2)*10: A = 3491.479. Six faces.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 9591.394,
|
||||
"area_mm2": 3491.479,
|
||||
"faces": 6
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{"commands": [
|
||||
{"command": "solid.box", "params": {"corner": [0, -21, 0], "length": 41.166666666666664, "width": 21, "height": 10, "body_name": "Plate"}},
|
||||
{"command": "solid.box", "params": {"corner": [41.166666666666664, -21, 0], "length": 21, "width": 21, "height": 10, "body_name": "Corner"}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 21, "height": 10, "base": [62.166666666666664, -21, 0], "body_name": "Round"}},
|
||||
{"command": "solid.combine", "params": {"target": "Corner", "tools": ["Round"], "operation": "cut"}},
|
||||
{"command": "solid.combine", "params": {"target": "Plate", "tools": ["Corner"], "operation": "join"}}
|
||||
]}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1615",
|
||||
"tangency-labs/solidcraft#1653"
|
||||
],
|
||||
"what": "two lofted tubes that cross and are joined (the bike-frame case): the trimmed loft faces along the intersection curves used to mesh with a flat sheet across the tube and slivers inside it",
|
||||
"source": "analytic",
|
||||
"method": "Each tube is a loft between two r=10 circles 100 mm apart, i.e. a circular cylinder of length 100; the vertical one (z -50..50) and the horizontal one (x -50..50) cross at their middles. The common part of two perpendicular equal cylinders is the Steinmetz bicylinder, V = 16 r^3/3 = 5333.33, whose surface is 16 r^2 (8 r^2 of it on each cylinder). Union V = 2 pi r^2 L - 16 r^3/3 = 57498.520. Union area = 2 (2 pi r L - 8 r^2) + 4 pi r^2 (the four end caps) = 12223.008.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 57498.52,
|
||||
"area_mm2": 12223.008
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{"commands": [
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "offset": -50, "name": "VBottom"}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [0, 0], "radius": 10}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "offset": 50, "name": "VTop"}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [0, 0], "radius": 10}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.loft", "params": {"sections": [{"sketch": "VBottom"}, {"sketch": "VTop"}], "operation": "new", "body_name": "Vertical"}},
|
||||
{"command": "sketch.create", "params": {"plane": "YZ", "offset": -50, "name": "HLeft"}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [0, 0], "radius": 10}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "sketch.create", "params": {"plane": "YZ", "offset": 50, "name": "HRight"}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [0, 0], "radius": 10}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.loft", "params": {"sections": [{"sketch": "HLeft"}, {"sketch": "HRight"}], "operation": "new", "body_name": "Horizontal"}},
|
||||
{"command": "solid.combine", "params": {"target": "Vertical", "tools": ["Horizontal"], "operation": "join"}}
|
||||
]}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1648",
|
||||
"tangency-labs/solidcraft#1850"
|
||||
],
|
||||
"what": "a sphere that touches a box's bottom edge at one point: the union leaves a sliver face pinched to zero height, whose loop touches itself within tolerance, and it must still mesh",
|
||||
"source": "analytic",
|
||||
"method": "Sphere centre (2.5,15,27.5), r=12.5; box x 0..5, y 0..7.5, z 17.5..22.5. The box edge point (2.5,7.5,17.5) is at distance sqrt(7.5^2+10^2)=12.5 from the centre, so the sphere only touches the edge. V(sphere)=4/3 pi r^3=8181.2309, V(box)=187.5. The box is not inside the sphere (corner (0,0,17.5) is at 21.3 from the centre), so V(common) = integral over x in 0..5, y in 0..7.5 of the z-length of {z in 17.5..22.5 : (x-2.5)^2+(y-15)^2+(z-27.5)^2 <= 156.25}; midpoint rule on a 1600x1600 grid (converged to 1e-7 relative: 55.62178). Union = 8181.2309 + 187.5 - 55.6218 = 8313.1091.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 8313.1091
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{"commands": [
|
||||
{"command": "solid.box", "params": {"corner": [0, 0, 17.5], "length": 5, "width": 7.5, "height": 5, "body_name": "Box"}},
|
||||
{"command": "solid.sphere", "params": {"center": [2.5, 15, 27.5], "radius": 12.5, "body_name": "Ball"}},
|
||||
{"command": "solid.combine", "params": {"target": "Box", "tools": ["Ball"], "operation": "join"}}
|
||||
]}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"sources": ["tangency-labs/solidcraft#1666", "tangency-labs/solidcraft#1670"],
|
||||
"what": "a loft between two 18-vertex polylines whose side faces are twisted ruled (bilinear) patches: each used to be exported as two flat triangles with crossing diagonals",
|
||||
"source": "analytic",
|
||||
"method": "A ruled loft joining vertex i of the bottom polygon (z=0) to vertex i of the top polygon (z=90.5) has, at height t*90.5, the polygon with vertices (1-t)p_i + t q_i. Its shoelace area is quadratic in t, so Simpson's rule is exact: V = h/6 (A0 + 4 A(1/2) + A1) with h=90.5, A0=247.28368 (shoelace of the bottom polygon), A1=156 (the top polygon is the 52 x 3 rectangle), A(1/2)=area of the polygon of midpoints. That gives 17993.405 (a 2000-slice numerical integral of the same area agrees to 1e-8).",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 17993.405
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{"commands": [
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "name": "Bottom"}},
|
||||
{"command": "sketch.line", "params": {"closed": true, "infer": false, "connect": false, "points": [[-26,3],[-24.76384,3],[-16.0568,14.97217],[-8,4.90117],[0,14.90117],[8,4.90117],[16.0568,14.97217],[24.76384,3],[26,3],[26,0],[23.23616,0],[15.9432,10.02783],[8,0.09883],[0,10.09883],[-8,0.09883],[-15.9432,10.02783],[-23.23616,0],[-26,0]]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "offset": 90.5, "name": "Top"}},
|
||||
{"command": "sketch.line", "params": {"closed": true, "infer": false, "connect": false, "points": [[-26,3],[-24,3],[-16,3],[-8,3],[0,3],[8,3],[16,3],[24,3],[26,3],[26,0],[24,0],[16,0],[8,0],[0,0],[-8,0],[-16,0],[-24,0],[-26,0]]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.loft", "params": {"sections": [{"sketch": "Bottom"}, {"sketch": "Top"}], "operation": "new"}}
|
||||
]}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"sources": ["tangency-labs/solidcraft#1666", "tangency-labs/solidcraft#1670"],
|
||||
"what": "a loft from a 20x20 square to the same square turned 45 degrees, 30 mm higher: its four side faces are strongly twisted ruled patches, the case a two-triangle mesh gets visibly wrong",
|
||||
"source": "analytic",
|
||||
"method": "At height 30t the section is the polygon of (1-t)p_i + t q_i (p_i the square's corners at angles 45+90k deg, q_i those at 90+90k deg, both radius 10 sqrt 2). Its shoelace area is quadratic in t, so Simpson is exact: A0=A1=400, A(1/2)= 2 r^2 (1 - ... ) computed from the midpoint polygon (a square of circumradius r cos(22.5 deg): area 2 r^2 cos^2(22.5 deg) = 400 cos^2(22.5 deg)=341.42). V = 30/6 (400 + 4*341.4214 + 400) = 5*(2165.6854)=10828.427. Faces: 4 sides and 2 caps.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 10828.427,
|
||||
"faces": 6
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{"commands": [
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "name": "Bottom"}},
|
||||
{"command": "sketch.line", "params": {"closed": true, "infer": false, "connect": false, "points": [[10,10],[-10,10],[-10,-10],[10,-10]]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "sketch.create", "params": {"plane": "XY", "offset": 30, "name": "Top"}},
|
||||
{"command": "sketch.line", "params": {"closed": true, "infer": false, "connect": false, "points": [[0,14.142135623730951],[-14.142135623730951,0],[0,-14.142135623730951],[14.142135623730951,0]]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.loft", "params": {"sections": [{"sketch": "Bottom"}, {"sketch": "Top"}], "operation": "new"}}
|
||||
]}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#1753"
|
||||
],
|
||||
"what": "a revolved bowl whose rim is cut by a large cylinder (R320, axis across the bowl): the cut edge is an intersection curve between the cylinder and the cone walls, whose two faces used to put different vertices on it, so the STL/3MF export had a 0.001 mm crack",
|
||||
"source": "analytic",
|
||||
"method": "Section (r,z): (0,0),(40,0),(70,40),(64,40),(34,6),(0,6), revolved 360 deg about Z: Pappus/shoelace V = (pi/3)|sum (x_i y_{i+1}-x_{i+1} y_i)(x_i+x_{i+1})| = 125085.653 uncut. The cutter is the cylinder r=320 with axis along X, lowest line at z=36 (centre z=356): it removes everything above z_c(y) = 356 - sqrt(320^2 - y^2), which cuts the rim (z=40) only for |y| small (z_c(70)=43.75 > 40). The column of material at (x,y), r=sqrt(x^2+y^2), runs from z_low(r) (0 for r<=40, (r-40)*4/3 beyond) to min(z_up(r), z_c(y)) with z_up = 6 for r<=34, 6+(r-34)*34/30 for r<=64, 40 beyond. Integrating in polar coordinates (2800x2880 midpoint cells, converged to 1e-7) gives V = 121495.05. The export mesh being closed (every edge used by two triangles) is not graded by the rig.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 121495.05
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{"commands": [
|
||||
{"command": "sketch.create", "params": {"plane": {"origin": [0, 0, 0], "x_dir": [1, 0, 0], "y_dir": [0, 0, 1]}, "name": "Section"}},
|
||||
{"command": "sketch.line", "params": {"closed": true, "infer": false, "connect": false, "points": [[0, 0], [40, 0], [70, 40], [64, 40], [34, 6], [0, 6]]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.revolve", "params": {"sketch": "Section", "axis": "Z", "operation": "new", "body_name": "Bowl"}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 320, "height": 200, "base": [-100, 0, 356], "axis": "X", "body_name": "Cutter"}},
|
||||
{"command": "solid.combine", "params": {"target": "Bowl", "tools": ["Cutter"], "operation": "cut"}}
|
||||
]}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#2712",
|
||||
"tangency-labs/solidcraft#1813"
|
||||
],
|
||||
"what": "a sphere whose centre lies on a box's top face, poking out of the box's side as a lens-shaped face thinner than the mesh tolerance; the face must still be meshed",
|
||||
"source": "analytic",
|
||||
"method": "box 7.5x20x5 (x 15..22.5, y 0..20, z 22.5..27.5): V=750. Sphere r=3.75: V=4/3 pi r^3=220.8932. Sphere centre (20,10,27.5) is on the box top, so the part inside the box is the lower half-sphere (110.4466) minus the half of the cap beyond the side plane x=22.5 (distance 2.5 from the centre, cap height h=1.25, cap V=pi h^2 (3r-h)/3=16.3625, half 8.1812): V_int=102.2654. Union = 750 + 220.8932 - 102.2654 = 868.6278. The sphere stays inside y 6.25..13.75 and z>=23.75, so it meets only the top and the x=22.5 side. Area: box 575 less the top disc (pi r^2 minus the circular segment beyond x=22.5: 44.1786-4.8398=39.3388) less the half circle on the side plane (pi(r^2-d^2)/2=12.2718), plus the sphere outside the box (upper hemisphere 88.3573 + half cap 2 pi r h/2=14.7262): 575-39.3388-12.2718+103.0835=626.4728. Faces: 6 planes and one sphere.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 868.6278,
|
||||
"area_mm2": 626.4728,
|
||||
"faces": 7
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{"commands": [
|
||||
{"command": "solid.box", "params": {"corner": [15, 0, 22.5], "length": 7.5, "width": 20, "height": 5, "body_name": "Box"}},
|
||||
{"command": "solid.sphere", "params": {"center": [20, 10, 27.5], "radius": 3.75, "body_name": "Ball"}},
|
||||
{"command": "solid.combine", "params": {"target": "Box", "tools": ["Ball"], "operation": "join"}}
|
||||
]}
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#2069"
|
||||
],
|
||||
"what": "a 210-degree ring with a chamfered outer edge, notched through its chamfer cone and then moved 1000 mm: where the notch meets the cone the mesh used to leave a crack, and the measured volume then grew with the distance from the origin",
|
||||
"source": "analytic",
|
||||
"method": "Section (r,z): 20..30 by 0..10 with the outer top corner chamfered 4x4 (points (20,0),(30,0),(30,6),(26,10),(20,10)): area 100-8=92, centroid radius (100*25-8*86/3)/92=24.6812. Pappus over 210 deg: V_ring = (210 pi/180)*92*24.6812 = 8322.428. The notch is the box x 24..32, y -2..2, z 5..11, centred on the revolve's seam: it removes the integral over its footprint of (min(10,36-r)-5) for r<=30 (r=sqrt(x^2+y^2); the top of the section is z=10 for r<=26 and z=36-r on the chamfer), midpoint rule 1600x1600: 87.5295 (converged to 3e-6). V = 8322.428 - 87.5295 = 8234.899, wherever the body sits (the ring is then moved 1000 mm along x).",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 8234.899
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{"commands": [
|
||||
{"command": "sketch.create", "params": {"plane": {"origin": [0, 0, 0], "x_dir": [1, 0, 0], "y_dir": [0, 0, 1]}, "name": "Section"}},
|
||||
{"command": "sketch.line", "params": {"closed": true, "infer": false, "connect": false, "points": [[20, 0], [30, 0], [30, 6], [26, 10], [20, 10]]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.revolve", "params": {"sketch": "Section", "axis": "Z", "angle": "210 deg", "direction": "symmetric", "operation": "new", "body_name": "Ring"}},
|
||||
{"command": "solid.box", "params": {"corner": [24, -2, 5], "length": 8, "width": 4, "height": 6, "body_name": "Notch"}},
|
||||
{"command": "solid.combine", "params": {"target": "Ring", "tools": ["Notch"], "operation": "cut"}},
|
||||
{"command": "solid.move", "params": {"bodies": ["Ring"], "translate": [1000, 0, 0]}}
|
||||
]}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#2528"
|
||||
],
|
||||
"what": "a rounded slot (a box with a half-cylinder on each end) joined with a cylinder that overlaps one end: the cylinder walls meet along vertical seams and intersection edges, where wedge-shaped mis-tessellated facets showed up",
|
||||
"source": "analytic",
|
||||
"method": "12 mm tall. Plan: stadium (box 40x20 plus two r=10 half discs, centres (0,0) and (40,0)) area 800+100 pi, united with a r=8 disc centred (50,0). The two discs (r1=10, r2=8, centre distance d=10) overlap in a lens: a=(d^2+r1^2-r2^2)/(2d)=6.8 from the r1 centre, half-angles acos(a/r1)=0.82303 and acos((d-a)/r2)=1.15928, lens = sum of r^2 (phi - sin phi cos phi) = 83.1760. The peg's disc lies wholly at x>=42, so it only meets the right half disc. Plan area = 1114.159 + 201.062 - lens = 1232.045; V = 12 plan = 14784.542. Boundary length = 2*40 (flat sides) + 10 pi (left end) + (10 pi - 2 phi1 10) (right end outside the peg) + (16 pi - 16 psi) (peg outside the right end) = 158.088; A = 2 plan + 12 boundary = 4361.149.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 14784.542,
|
||||
"area_mm2": 4361.149
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
{"commands": [
|
||||
{"command": "solid.box", "params": {"corner": [0, -10, 0], "length": 40, "width": 20, "height": 12, "body_name": "Slot"}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 10, "height": 12, "base": [0, 0, 0], "body_name": "EndA"}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 10, "height": 12, "base": [40, 0, 0], "body_name": "EndB"}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 8, "height": 12, "base": [50, 0, 0], "body_name": "Peg"}},
|
||||
{"command": "solid.combine", "params": {"target": "Slot", "tools": ["EndA", "EndB", "Peg"], "operation": "join"}}
|
||||
]}
|
||||
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#311"
|
||||
],
|
||||
"what": "an inclined cut across a round blank, which used to pinch the cylindrical wall inward (a 4.4 mm chord deficit) in the display and STL mesh",
|
||||
"source": "analytic",
|
||||
"method": "Blank: cylinder r=75, h=16 (z 0..16). The cut is the triangle-and-strip above the ramp line z(y)=16-k(y-18.5), k=15/56.5, through (18.5,16) and (75,1), extruded 91 mm to each side of YZ (wider than the blank). The ramp stays above z=0 over the blank (z(75)=1), so the removed thickness at (x,y) with y>18.5 is k(y-18.5). Removed volume = k * integral_{18.5}^{75} (y-18.5) 2 sqrt(75^2-y^2) dy = k[ -(2/3)(R^2-y^2)^{3/2} - 18.5 (y sqrt(R^2-y^2) + R^2 asin(y/R)) ] = 38051.363. V = pi 75^2 16 - removed = 244691.975. Area = bottom pi R^2 + top (pi R^2 - S) + wall (2 pi R 16 - 1920.812, the removed band k R [2 R cos(t0) - 18.5 (pi - 2 t0)], t0=asin(18.5/75)) + ramp S sqrt(1+k^2), with S = projected area of the disc beyond y=18.5 = 6089.132. Four faces: bottom, top, wall, ramp.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 244691.975,
|
||||
"area_mm2": 41172.865,
|
||||
"faces": 4
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{"commands": [
|
||||
{"command": "solid.cylinder", "params": {"radius": 75, "height": 16, "body_name": "Blank"}},
|
||||
{"command": "sketch.create", "params": {"plane": "YZ", "name": "Ramp"}},
|
||||
{"command": "sketch.line", "params": {"closed": true, "infer": false, "connect": false, "points": [[18.5, 16], [76, 0.7345132743362814], [76, 17], [18.5, 17]]}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"sketch": "Ramp", "distance": 182, "direction": "symmetric", "operation": "cut", "targets": ["Blank"]}}
|
||||
]}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#784",
|
||||
"tangency-labs/solidcraft#811"
|
||||
],
|
||||
"what": "two bodies whose STL export used to have open edges where faces were meshed apart: a 40x30x20 box with all twelve edges rounded 2 mm, and a cylinder R15 x 20 with a coaxial 6 mm bore",
|
||||
"source": "analytic",
|
||||
"method": "Rounded box: Steiner formula for the box 36x26x16 grown by a ball of r=2 (equal rounds on all twelve edges meet in spherical corners): V = xyz + 2r(xy+yz+zx) + pi r^2 (x+y+z) + 4/3 pi r^3 = 23701.687, A = 2(xy+yz+zx) + 2 pi r (x+y+z) + 4 pi r^2 = 4886.442; 26 faces (6 planes, 12 cylinders, 8 sphere corners). Drilled cylinder: V = pi (15^2-3^2) 20 = 13571.680, A = 2 pi (15^2-3^2) + 2 pi 15 20 + 2 pi 3 20 = 1152 pi = 3619.115; 4 faces. Totals over both bodies. A watertight STL (every edge shared by two triangles) is not graded by the rig.",
|
||||
"body_count": 2,
|
||||
"volume_mm3": 37273.367,
|
||||
"area_mm2": 8505.557,
|
||||
"faces": 30
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{"commands": [
|
||||
{"command": "solid.box", "params": {"corner": [0, 0, 0], "length": 40, "width": 30, "height": 20, "body_name": "RoundedBox"}},
|
||||
{"command": "solid.fillet", "params": {"body": "RoundedBox", "radius": 2, "edges": [[20, 0, 0], [20, 30, 0], [20, 0, 20], [20, 30, 20], [0, 15, 0], [40, 15, 0], [0, 15, 20], [40, 15, 20], [0, 0, 10], [40, 0, 10], [0, 30, 10], [40, 30, 10]]}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 15, "height": 20, "base": [100, 0, 0], "body_name": "Drilled"}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 3, "height": 20, "base": [100, 0, 0], "body_name": "Bore"}},
|
||||
{"command": "solid.combine", "params": {"target": "Drilled", "tools": ["Bore"], "operation": "cut"}}
|
||||
]}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#818"
|
||||
],
|
||||
"what": "a blind hole cut into a ring whose six concave corners are filleted: the cut used to split every vertical edge (the outer seam and all twelve fillet tangent edges) at the hole's depth, and the fillet corners drew black",
|
||||
"source": "analytic",
|
||||
"method": "Ring: circle d=55 less the hexagon inscribed in r=25 (vertex at (0,25)), 10 mm tall. Hexagon area 3 sqrt(3)/2 25^2 = 1623.798. Each of its six concave corners (interior angle 120 deg) filled by a 4 mm round gains t r - r^2 (pi-120deg)/2 = 0.8600 (tangent length t = r/tan 60 = 2.3094). Plan area A_p = pi 27.5^2 - hexagon + 6 gain = 757.192. The hole d=3, 3 deep at (24,0) lies between the hexagon's flat (x=21.65) and the rim: V = 10 A_p - pi 1.5^2 3 = 7550.714. Area = top + bottom (2 A_p, the hole's floor replaces what its opening removes from the top) + outer wall 2 pi 27.5 10 + inner wall 10 (6 (25-2t) + 6 r (pi - 120deg)) + hole wall 2 pi 1.5 3 = 4744.733. Faces: 8 cylinders (outer, 6 rounds, hole) and 9 planes (top, bottom, 6 hexagon flats, hole floor). Edges, counting each whole curve once and no seams: top 1+12+1, bottom 1+12, vertical 12 tangent edges, hole floor 1 = 40; vertices 28.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 7550.714,
|
||||
"area_mm2": 4744.733,
|
||||
"faces": 17,
|
||||
"edges": 40,
|
||||
"vertices": 28
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
{"commands": [
|
||||
{"command": "sketch.create", "params": {"plane": "XY"}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [0, 0], "diameter": 55}},
|
||||
{"command": "sketch.polygon.inscribed", "params": {"center": [0, 0], "radius": 25, "sides": 6, "angle": 90}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": 10, "profiles": [0]}},
|
||||
{"command": "solid.fillet", "params": {"radius": 4, "edges": [[0, 25, 5], [-21.650635, 12.5, 5], [-21.650635, -12.5, 5], [0, -25, 5], [21.650635, -12.5, 5], [21.650635, 12.5, 5]]}},
|
||||
{"command": "sketch.create", "params": {"plane": {"face": [24, 0, 10]}}},
|
||||
{"command": "sketch.circle.center", "params": {"center": [24, 0], "diameter": 3}},
|
||||
{"command": "sketch.finish", "params": {}},
|
||||
{"command": "solid.extrude", "params": {"distance": 3, "direction": "negative", "operation": "cut"}}
|
||||
]}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"sources": [
|
||||
"tangency-labs/solidcraft#819",
|
||||
"tangency-labs/solidcraft#921"
|
||||
],
|
||||
"what": "a disc with a pocket that splits the outer cylinder wall's seam edges at the pocket floor: the wall used to be meshed with fans cutting through the disc, so the measured volume and the STL read too small",
|
||||
"source": "analytic",
|
||||
"method": "disc r=50 h=10 with a coaxial pocket r=48 depth 8 (floor at z=2). V = pi*50^2*10 - pi*48^2*8 = 78539.816 - 57905.836 = 20633.980. Area = bottom pi*50^2 + outer wall 2 pi 50 *10 + top ring pi(50^2-48^2) + pocket wall 2 pi 48 *8 + floor pi 48^2. Five faces. The shelled-top disc (shell 2 mm, top face removed) is the same solid.",
|
||||
"body_count": 1,
|
||||
"volume_mm3": 20633.981,
|
||||
"area_mm2": 21262.299,
|
||||
"faces": 5
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{"commands": [
|
||||
{"command": "solid.cylinder", "params": {"radius": 50, "height": 10, "body_name": "Cup"}},
|
||||
{"command": "solid.cylinder", "params": {"radius": 48, "height": 8, "base": [0, 0, 2], "body_name": "Pocket"}},
|
||||
{"command": "solid.combine", "params": {"target": "Cup", "tools": ["Pocket"], "operation": "cut"}}
|
||||
]}
|
||||
Reference in New Issue
Block a user