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,
|
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:
|
Extrude a sketch using the standard NXOpen pattern:
|
||||||
- Create ExtrudeBuilder with null feature
|
- Create ExtrudeBuilder with null feature
|
||||||
@@ -615,11 +616,33 @@ def _extrude_sketch(part: Any, sketch: Any, thickness: float,
|
|||||||
builder.Direction = direction
|
builder.Direction = direction
|
||||||
lister.WriteLine("[extrude] Step 4: Direction set")
|
lister.WriteLine("[extrude] Step 4: Direction set")
|
||||||
|
|
||||||
# Step 5: Set limits
|
# Step 5: Set limits — symmetric extrude using part expression
|
||||||
builder.Limits.StartExtend.Value.RightHandSide = "0.0"
|
# Use the pre-defined expression ISOGRID_RIB_sandbox_N_thk
|
||||||
builder.Limits.EndExtend.Value.RightHandSide = str(float(thickness))
|
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
|
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
|
# Step 6: Commit
|
||||||
extrude_obj = builder.Commit()
|
extrude_obj = builder.Commit()
|
||||||
@@ -849,7 +872,8 @@ def main():
|
|||||||
extrude_name = EXTRUDE_NAME_PREFIX + sandbox_id
|
extrude_name = EXTRUDE_NAME_PREFIX + sandbox_id
|
||||||
|
|
||||||
extrude_feat = _extrude_sketch(
|
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:
|
if extrude_feat is not None:
|
||||||
lister.WriteLine(f"[import] ✓ Sketch + Extrude complete for {sandbox_id}")
|
lister.WriteLine(f"[import] ✓ Sketch + Extrude complete for {sandbox_id}")
|
||||||
|
|||||||
Reference in New Issue
Block a user