feat: 完善参数化编辑语义和槽孔中心距
This commit is contained in:
@@ -35,11 +35,23 @@ def _length_distribution(model: StepModel) -> dict[float, int]:
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="Verify cube edge-length local deformation.")
|
||||
parser = argparse.ArgumentParser(description="Verify cube edge-length resize semantics.")
|
||||
parser.add_argument("model", nargs="?", default=str(DEFAULT_MODEL), help="STEP model path.")
|
||||
parser.add_argument("--source-length", type=float, default=10.0, help="Current line edge length to search for.")
|
||||
parser.add_argument("--target-length", type=float, default=15.0, help="Target edge length to apply.")
|
||||
parser.add_argument("--anchor", default="keep-start", choices=["auto", "center", "keep-start", "keep-end"])
|
||||
parser.add_argument(
|
||||
"--strategy",
|
||||
default="local-edge-only-deform",
|
||||
choices=[
|
||||
"auto",
|
||||
"local-edge-only-deform",
|
||||
"move-edge-end-plane-by-push-pull",
|
||||
"scale-owning-shape-from-edge",
|
||||
],
|
||||
help="Requested Edge length edit semantics.",
|
||||
)
|
||||
parser.add_argument("--expect-strategy", default="", help="Expected resolved resize strategy.")
|
||||
parser.add_argument("--tolerance", type=float, default=1e-5, help="Allowed target length error.")
|
||||
args = parser.parse_args()
|
||||
|
||||
@@ -50,12 +62,25 @@ def main() -> int:
|
||||
|
||||
edge_id = edge_ids[0]
|
||||
before = model.stats()
|
||||
plan = model.general_edge_length_plan(edge_id, args.target_length, anchor_mode=args.anchor)
|
||||
plan = model.general_edge_length_plan(
|
||||
edge_id,
|
||||
args.target_length,
|
||||
anchor_mode=args.anchor,
|
||||
strategy_mode=args.strategy,
|
||||
)
|
||||
strategy = str(plan.get("resize_strategy", ""))
|
||||
if strategy != "local-edge-only-deform":
|
||||
raise SystemExit(f"expected local-edge-only-deform, got {strategy or '<none>'}")
|
||||
expected_strategy = args.expect_strategy or args.strategy
|
||||
if expected_strategy == "auto":
|
||||
expected_strategy = strategy
|
||||
if strategy != expected_strategy:
|
||||
raise SystemExit(f"expected {expected_strategy}, got {strategy or '<none>'}")
|
||||
|
||||
result = model.resize_general_edge_length(edge_id, args.target_length, anchor_mode=args.anchor)
|
||||
result = model.resize_general_edge_length(
|
||||
edge_id,
|
||||
args.target_length,
|
||||
anchor_mode=args.anchor,
|
||||
strategy_mode=args.strategy,
|
||||
)
|
||||
after = model.stats()
|
||||
lengths = [_edge_length(model, item) for item in range(len(model.edges))]
|
||||
nearest = min(lengths, key=lambda value: abs(value - args.target_length))
|
||||
@@ -65,6 +90,7 @@ def main() -> int:
|
||||
|
||||
print(f"model={Path(args.model)}")
|
||||
print(f"edge_id={edge_id}")
|
||||
print(f"requested_strategy={args.strategy}")
|
||||
print(f"strategy={strategy}")
|
||||
print(f"anchor_mode={args.anchor}")
|
||||
print(f"start_move={plan.get('local_edge_deform_start_move')}")
|
||||
|
||||
Reference in New Issue
Block a user