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]]))
|
||||
|
||||
8
tools/adaptive-isogrid/tests/params_adaptive_demo.json
Normal file
8
tools/adaptive-isogrid/tests/params_adaptive_demo.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"s_min": 30.0,
|
||||
"s_max": 70.0,
|
||||
"R_0": 50.0,
|
||||
"alpha": 1.5,
|
||||
"beta": 0.4,
|
||||
"adaptive_density": false
|
||||
}
|
||||
7083
tools/adaptive-isogrid/tests/rib_profile_sandbox1_brain_input.json
Normal file
7083
tools/adaptive-isogrid/tests/rib_profile_sandbox1_brain_input.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
2647
tools/adaptive-isogrid/tests/rib_profile_scenario_B_left_heavy.json
Normal file
2647
tools/adaptive-isogrid/tests/rib_profile_scenario_B_left_heavy.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1925
tools/adaptive-isogrid/tests/scenario_A_bottom_heavy.json
Normal file
1925
tools/adaptive-isogrid/tests/scenario_A_bottom_heavy.json
Normal file
File diff suppressed because it is too large
Load Diff
1925
tools/adaptive-isogrid/tests/scenario_B_left_heavy.json
Normal file
1925
tools/adaptive-isogrid/tests/scenario_B_left_heavy.json
Normal file
File diff suppressed because it is too large
Load Diff
1925
tools/adaptive-isogrid/tests/scenario_C_center_stressed.json
Normal file
1925
tools/adaptive-isogrid/tests/scenario_C_center_stressed.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user