feat(isogrid): Skip outer boundary in NX sketch import (subtract workflow)
Add DRAW_OUTER_BOUNDARY flag (default: False) to import_profile.py. When False (default): only pocket profiles + holes are imported into the sketch. This is the correct mode when subtracting rib pockets from an existing solid body — the sandbox perimeter is not needed and would create unwanted edges in the part. When True: full profile including sandbox perimeter (original behavior, for standalone plate creation only). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -39,6 +39,11 @@ SKETCH_NAME_PREFIX = "ISOGRID_RIB_" # e.g., ISOGRID_RIB_sandbox_1
|
|||||||
EXTRUDE_NAME_PREFIX = "ISOGRID_EXTRUDE_" # e.g., ISOGRID_EXTRUDE_sandbox_1
|
EXTRUDE_NAME_PREFIX = "ISOGRID_EXTRUDE_" # e.g., ISOGRID_EXTRUDE_sandbox_1
|
||||||
DEFAULT_RIB_THICKNESS = 10.0 # mm, fallback if not in profile JSON
|
DEFAULT_RIB_THICKNESS = 10.0 # mm, fallback if not in profile JSON
|
||||||
|
|
||||||
|
# Set to False when importing into an existing solid body (subtract workflow).
|
||||||
|
# The outer boundary is not needed — only the pocket profiles and holes.
|
||||||
|
# Set to True only for standalone plate creation (no existing body).
|
||||||
|
DRAW_OUTER_BOUNDARY = False
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Geometry helpers
|
# Geometry helpers
|
||||||
@@ -841,9 +846,8 @@ def main():
|
|||||||
_clear_sketch_geometry(sketch, lister)
|
_clear_sketch_geometry(sketch, lister)
|
||||||
|
|
||||||
# --- Draw geometry ---
|
# --- Draw geometry ---
|
||||||
# Strategy: draw outer boundary + pocket outlines (lines+arcs) + holes
|
# DRAW_OUTER_BOUNDARY = False: only pockets + holes (subtract from existing body)
|
||||||
# NX sketch regions: the rib web is the area BETWEEN outer boundary
|
# DRAW_OUTER_BOUNDARY = True: full profile including sandbox perimeter
|
||||||
# and pocket/hole outlines. Extrude picks the rib material regions.
|
|
||||||
pockets = profile.get("pockets", [])
|
pockets = profile.get("pockets", [])
|
||||||
outer_2d = profile.get("outer_boundary", [])
|
outer_2d = profile.get("outer_boundary", [])
|
||||||
|
|
||||||
@@ -852,15 +856,19 @@ def main():
|
|||||||
and 'lines' in pockets[0])
|
and 'lines' in pockets[0])
|
||||||
|
|
||||||
if is_structured:
|
if is_structured:
|
||||||
lister.WriteLine(f"[import] Structured format: {len(pockets)} pockets + outer boundary")
|
lister.WriteLine(f"[import] Structured format: {len(pockets)} pockets"
|
||||||
|
+ (" + outer boundary" if DRAW_OUTER_BOUNDARY else " (no outer boundary)"))
|
||||||
|
|
||||||
# Outer boundary
|
# Outer boundary (only when creating standalone plate, not subtract workflow)
|
||||||
outer_lines, outer_arcs = _draw_outer_boundary(work_part, outer_2d, transform, lister)
|
total_lines = 0
|
||||||
lister.WriteLine(f"[import] Outer boundary: {outer_lines} lines + {outer_arcs} arcs")
|
total_arcs = 0
|
||||||
|
if DRAW_OUTER_BOUNDARY:
|
||||||
# Pocket outlines (the red lines: 3 lines + 3 arcs each)
|
outer_lines, outer_arcs = _draw_outer_boundary(work_part, outer_2d, transform, lister)
|
||||||
total_lines = outer_lines
|
total_lines = outer_lines
|
||||||
total_arcs = outer_arcs
|
total_arcs = outer_arcs
|
||||||
|
lister.WriteLine(f"[import] Outer boundary: {outer_lines} lines + {outer_arcs} arcs")
|
||||||
|
else:
|
||||||
|
lister.WriteLine(f"[import] Outer boundary skipped (DRAW_OUTER_BOUNDARY=False)")
|
||||||
for idx, pocket in enumerate(pockets):
|
for idx, pocket in enumerate(pockets):
|
||||||
nl, na = _draw_structured_pocket(work_part, pocket, transform, lister)
|
nl, na = _draw_structured_pocket(work_part, pocket, transform, lister)
|
||||||
total_lines += nl
|
total_lines += nl
|
||||||
@@ -899,8 +907,10 @@ def main():
|
|||||||
else:
|
else:
|
||||||
# Legacy format: pockets are point lists
|
# Legacy format: pockets are point lists
|
||||||
lister.WriteLine(f"[import] Legacy format: {len(pockets)} pocket polylines")
|
lister.WriteLine(f"[import] Legacy format: {len(pockets)} pocket polylines")
|
||||||
outer_lines, outer_arcs = _draw_outer_boundary(work_part, outer_2d, transform, lister)
|
total_lines = 0
|
||||||
total_lines = outer_lines
|
if DRAW_OUTER_BOUNDARY:
|
||||||
|
outer_lines, _ = _draw_outer_boundary(work_part, outer_2d, transform, lister)
|
||||||
|
total_lines = outer_lines
|
||||||
for pocket_pts in pockets:
|
for pocket_pts in pockets:
|
||||||
if len(pocket_pts) < 3:
|
if len(pocket_pts) < 3:
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user