forked from 1b-agent/fieldcraft-upstream
Mesh: swept cross-sections cut into blocks automatically
A region of an extrusion's (or revolution's) cross-section that no structured scheme fits is now cut by straight lines into blocks that fit, before interval assignment, so the cuts are curves of the arrangement and their counts are assigned with the rest; nothing reaches the model (hex::decompose, after Tam and Armstrong's medial-axis subdivision and Li, Armstrong and McKeag's primitives). Per region: several holes are separated by lines across the gaps between neighbouring holes; a piece with one hole gets the O-grid layout whose pieces score best (lines from the outer corners towards the hole or along their bisectors, from the hole's corners, or along four directions from the hole); pieces without holes are cut by a two-ply search over lines from concave corners and fillets and from convex corners. Candidates are scored by meshing the pieces with their schemes (smallest corner scaled Jacobian). A region's blocks are kept when fair (at least 0.5) or no worse than its free mesh, and cuts never end inside a seeded curve. This replaces the cuts from reflex corners along an edge. Tests on an L, a T, a plate with a hole, with a slot and with three holes, and the half crank's cross-section: every region structured, the quads conforming and the smallest corner scaled Jacobian bounded. The half crank arm now extrudes in 12 structured regions with a hex20 minimum scaled Jacobian of 0.37 (the arm meeting the bosses 20 degrees off tangent bounds it) where it had 2 free regions and 0.009. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
1 parent
a0b4a69452
commit
02172f9a7e
5 files changed
+1384
-100
No files matched your search
@@ -95,8 +95,10 @@ Rules beyond the layer order:
|
||||
(`fieldcraft-mesh::size`) sets interior sizes and edge divisions, with even counts per loop.
|
||||
Mapped and swept hex build on these face meshes (`fieldcraft-mesh::hex`, `mesh.hex.generate`):
|
||||
the B-rep topology is recovered from the face-tagged surface; a body is extruded (straight
|
||||
multi-level sweep: the levels' outlines imprinted into one cross-section, cut at reflex corners,
|
||||
regions mapped, O-gridded or free-meshed, then stacked), revolved (the same in a rotating
|
||||
multi-level sweep: the levels' outlines imprinted into one cross-section, cut automatically
|
||||
into blocks (holes apart, O-grids, cuts from concave corners and fillets chosen by the quality
|
||||
of the blocks they leave), regions mapped, triangle primitives, O-gridded or free-meshed, then
|
||||
stacked), revolved (the same in a rotating
|
||||
frame), swept one-to-one through rings of linking faces (least-squares affine layers, Roca and
|
||||
Sarrate 2010), or mapped as a logical cube (Gordon and Thiel 1982); interval assignment
|
||||
couples the counts of shared curves. Nodes on analytic faces (`Shape::face_surfaces`) are
|
||||
|
||||
Reference in new issue
Block a user