fix(pockets): skip pocketing in high-density zones (eta > eta_solid)
High density (η > 0.7) means high stress → leave solid, no pocket. Only low-density regions get lightweighted. Scenario comparison with s_min=30, s_max=70: - Baseline uniform (w=0.5): 78 pockets, 2886g - Bottom-right heavy: 41 pockets, 3516g (bottom stays solid) - Left-side mount: 27 pockets, 3799g (left stays solid) - Center pressure: 15 pockets, 4295g (center stays solid)
This commit is contained in:
@@ -299,6 +299,9 @@ def generate_pockets(triangulation, geometry, params):
|
||||
eta = evaluate_density(mid[0], mid[1], geometry, params)
|
||||
edge_thickness[edge] = density_to_rib_thickness(eta, params)
|
||||
|
||||
# Density threshold: triangles in high-density zones stay solid (no pocket)
|
||||
eta_solid = params.get('eta_solid', 0.7)
|
||||
|
||||
pockets = []
|
||||
for tri_idx, tri in enumerate(triangles):
|
||||
p0 = vertices[tri[0]]
|
||||
@@ -309,6 +312,13 @@ def generate_pockets(triangulation, geometry, params):
|
||||
if tri_area < min_triangle_area:
|
||||
continue
|
||||
|
||||
# Check density at centroid — high density = leave solid
|
||||
centroid_x = (p0[0] + p1[0] + p2[0]) / 3.0
|
||||
centroid_y = (p0[1] + p1[1] + p2[1]) / 3.0
|
||||
eta_c = evaluate_density(centroid_x, centroid_y, geometry, params)
|
||||
if eta_c > eta_solid:
|
||||
continue
|
||||
|
||||
e01 = tuple(sorted([tri[0], tri[1]]))
|
||||
e12 = tuple(sorted([tri[1], tri[2]]))
|
||||
e20 = tuple(sorted([tri[2], tri[0]]))
|
||||
|
||||
Reference in New Issue
Block a user