feat(extrude): symmetric extrude using part expression
- Uses ISOGRID_RIB_sandbox_N_thk expression for thickness - Creates expression if missing, uses existing if present - Symmetric extrude: ±thk/2 from sketch plane - Fallback to literal value if expression fails
This commit is contained in:
@@ -455,7 +455,8 @@ def _delete_feature(session: Any, feature: Any, lister: Any, label: str = "featu
|
||||
|
||||
|
||||
def _extrude_sketch(part: Any, sketch: Any, thickness: float,
|
||||
normal: List[float], extrude_name: str, lister: Any):
|
||||
normal: List[float], extrude_name: str,
|
||||
sandbox_id: str, lister: Any):
|
||||
"""
|
||||
Extrude a sketch using the standard NXOpen pattern:
|
||||
- Create ExtrudeBuilder with null feature
|
||||
@@ -615,11 +616,33 @@ def _extrude_sketch(part: Any, sketch: Any, thickness: float,
|
||||
builder.Direction = direction
|
||||
lister.WriteLine("[extrude] Step 4: Direction set")
|
||||
|
||||
# Step 5: Set limits
|
||||
builder.Limits.StartExtend.Value.RightHandSide = "0.0"
|
||||
builder.Limits.EndExtend.Value.RightHandSide = str(float(thickness))
|
||||
# Step 5: Set limits — symmetric extrude using part expression
|
||||
# Use the pre-defined expression ISOGRID_RIB_sandbox_N_thk
|
||||
thk_expr_name = f"ISOGRID_RIB_{sandbox_id}_thk"
|
||||
half_expr = f"{thk_expr_name}/2"
|
||||
|
||||
# Ensure the expression exists (create if missing)
|
||||
try:
|
||||
expr = None
|
||||
for e in part.Expressions:
|
||||
if e.Name == thk_expr_name:
|
||||
expr = e
|
||||
break
|
||||
if expr is None:
|
||||
part.Expressions.CreateExpression("Number", f"{thk_expr_name}={thickness}")
|
||||
lister.WriteLine(f"[extrude] Created expression: {thk_expr_name}={thickness}")
|
||||
else:
|
||||
lister.WriteLine(f"[extrude] Using existing expression: {thk_expr_name}={expr.Value}")
|
||||
except Exception as exc:
|
||||
lister.WriteLine(f"[extrude] Expression warning: {exc}")
|
||||
half_expr = str(float(thickness) / 2.0)
|
||||
|
||||
# Symmetric extrude: ±thk/2 from sketch plane
|
||||
builder.Limits.StartExtend.Value.RightHandSide = half_expr
|
||||
builder.Limits.EndExtend.Value.RightHandSide = half_expr
|
||||
|
||||
builder.BooleanOperation.Type = NXOpen.GeometricUtilities.BooleanOperation.BooleanType.Create
|
||||
lister.WriteLine("[extrude] Step 5: Limits set (0 → {})".format(thickness))
|
||||
lister.WriteLine(f"[extrude] Step 5: Symmetric limits ±{half_expr}")
|
||||
|
||||
# Step 6: Commit
|
||||
extrude_obj = builder.Commit()
|
||||
@@ -849,7 +872,8 @@ def main():
|
||||
extrude_name = EXTRUDE_NAME_PREFIX + sandbox_id
|
||||
|
||||
extrude_feat = _extrude_sketch(
|
||||
work_part, sketch, rib_thickness, normal, extrude_name, lister
|
||||
work_part, sketch, rib_thickness, normal, extrude_name,
|
||||
sandbox_id, lister
|
||||
)
|
||||
if extrude_feat is not None:
|
||||
lister.WriteLine(f"[import] ✓ Sketch + Extrude complete for {sandbox_id}")
|
||||
|
||||
Reference in New Issue
Block a user