up
This commit is contained in:
parent
4dfaa0447e
commit
76c74f53c4
1 changed files with 16 additions and 20 deletions
|
|
@ -977,26 +977,22 @@ def get_overhang_mask_slice(slice_paths: list[np.ndarray], groups: tuple[int, ..
|
||||||
z = group_map[g][0][0, 2] if group_map[g] and len(group_map[g][0]) > 0 else 0.0
|
z = group_map[g][0][0, 2] if group_map[g] and len(group_map[g][0]) > 0 else 0.0
|
||||||
geom_i = layer_geoms[g]
|
geom_i = layer_geoms[g]
|
||||||
|
|
||||||
if i == len(sorted_groups) - 1:
|
# Calculate raw support needed at layer g: union of all layers above g, minus geom_i.
|
||||||
# Top layer has no overhang
|
# This prevents boundary mismatches/slivers caused by subtracting and then unioning back the same layers.
|
||||||
continue
|
if i < len(sorted_groups) - 1:
|
||||||
|
raw_support = accumulated.difference(geom_i)
|
||||||
|
if not raw_support.is_empty:
|
||||||
|
# Apply tolerance clearance only to the output of the current layer.
|
||||||
|
geom_i_sub = geom_i.buffer(tolerance) if tolerance > 0 else geom_i
|
||||||
|
output_geom = raw_support.difference(geom_i_sub)
|
||||||
|
if not output_geom.is_empty:
|
||||||
|
result_paths = geometry_to_paths(output_geom, z)
|
||||||
|
for path in result_paths:
|
||||||
|
paths_list.append(path)
|
||||||
|
groups_list.append(g)
|
||||||
|
|
||||||
g_above = sorted_groups[i+1]
|
# Accumulate the union of model layers for the layers below
|
||||||
geom_above = layer_geoms[g_above]
|
accumulated = accumulated.union(geom_i)
|
||||||
|
|
||||||
# Propagate support region downwards: S_i = (S_{i+1} u L_{i+1}) \ L_i
|
|
||||||
# This propagates the raw support footprint without tolerance shrinkage, avoiding fragmentation.
|
|
||||||
accumulated = accumulated.union(geom_above).difference(geom_i)
|
|
||||||
|
|
||||||
if not accumulated.is_empty:
|
|
||||||
# Apply tolerance buffering to ensure XY clearance only for the output of the current layer.
|
|
||||||
geom_i_sub = geom_i.buffer(tolerance) if tolerance > 0 else geom_i
|
|
||||||
output_geom = accumulated.difference(geom_i_sub)
|
|
||||||
if not output_geom.is_empty:
|
|
||||||
result_paths = geometry_to_paths(output_geom, z)
|
|
||||||
for path in result_paths:
|
|
||||||
paths_list.append(path)
|
|
||||||
groups_list.append(g)
|
|
||||||
|
|
||||||
# Sort output by group index so that paths are ordered bottom-to-top
|
# Sort output by group index so that paths are ordered bottom-to-top
|
||||||
sorted_indices = np.argsort(groups_list)
|
sorted_indices = np.argsort(groups_list)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue