diff --git a/tools/adaptive-isogrid/src/nx/extract_sandbox.py b/tools/adaptive-isogrid/src/nx/extract_sandbox.py index 2f76d2bf..b4fd907f 100644 --- a/tools/adaptive-isogrid/src/nx/extract_sandbox.py +++ b/tools/adaptive-isogrid/src/nx/extract_sandbox.py @@ -169,42 +169,41 @@ def _sample_edge_polyline(edge: Any, chord_tol_mm: float, lister: Any = None) -> f"len={length:.3f} tol={tol:.3f} n_pts={n_pts}" ) - # 1) Primary: UF_EVAL sampling + # 1) Primary: UF_MODL_ask_curve_props — normalized parameter 0..1 try: import NXOpen import NXOpen.UF uf = NXOpen.UF.UFSession.GetUFSession() - evaluator = uf.Eval.Initialize2(edge.Tag) - limits = uf.Eval.AskLimits(evaluator) - t0, t1 = float(limits[0]), float(limits[1]) pts: List[Point3D] = [] parse_failures = 0 try: for i in range(n_pts + 1): - t = t0 + (t1 - t0) * (i / n_pts) - result = uf.Eval.Evaluate(evaluator, 0, t) - p = _parse_eval_point(result) - if p is None: + param = float(i) / float(n_pts) # 0.0 to 1.0 + # AskCurveProps returns: (point[3], tangent[3], normal[3], binormal[3], torsion, radius_of_curvature) + result = uf.Modl.AskCurveProps(edge.Tag, param) + # result[0] is the point array [x, y, z] + if isinstance(result, (list, tuple)) and len(result) >= 1: + pt_data = result[0] + if isinstance(pt_data, (list, tuple)) and len(pt_data) >= 3: + pts.append((float(pt_data[0]), float(pt_data[1]), float(pt_data[2]))) + elif hasattr(pt_data, '__len__') and len(pt_data) >= 3: + pts.append((float(pt_data[0]), float(pt_data[1]), float(pt_data[2]))) + else: + parse_failures += 1 + else: parse_failures += 1 - if parse_failures <= 3: - _log(f"[edge] UF_EVAL parse miss at t={t:.6g}, raw={repr(result)}") - continue - pts.append(p) finally: - try: - uf.Eval.Free(evaluator) - except Exception: - pass + pass if len(pts) >= 2: - _log(f"[edge] sampled via UF_EVAL ({len(pts)} pts)") + _log(f"[edge] sampled via UF_MODL ({len(pts)} pts, {parse_failures} failures)") return pts - _log(f"[edge] UF_EVAL insufficient points ({len(pts)}), falling back") + _log(f"[edge] UF_MODL insufficient points ({len(pts)}), falling back") except Exception as exc: - _log(f"[edge] UF_EVAL failed: {exc}") + _log(f"[edge] UF_MODL failed: {exc}") # 2) Fallback: IBaseCurve.Evaluate (signature differs by NX versions) try: