Replay an NX CLSF / APT-source toolpath directly.PlayClFile reads MSYS / FROM / GOTO / CIRCLE /
RAPID / FEDRAT / SPINDL / COOLNT / TLDATA / LOAD. The parser is the
NxClRunner preset — a SoftNcRunner composition —
and the project holds a third runner suit ClsfRunnerSuit
beside the NC and CSV suits. A TLDATA record creates the tool geometry when the tool house has no
matching id. Run-ops are first class: ClRunner,
MachiningSession.PlayClFile / RunClFile. See
Cutter-Location (CL) Playback.
A CL file can now drive a machine-tool chain, not only a
ClMillingDevice. When the pipeline's kinematics dependency resolves to a
live solver, ClToMcTransformSyntax inverse-solves every CLSF motion
endpoint at parse time and expresses the result in the same ProgramToMcTransform vocabulary the NC
pipeline uses — a tool-height entry from the active tool, a pivot entry anchored to the workpiece
frame, and the solved rotary axes in raw degrees for the cyclic wrap tail-pass — so McLinear and
the wrap are reused unchanged. Played onto a ClMillingDevice the same file is still pure
cutter-location motion, which is what you want for verifying a CAM toolpath before any post-processor
is involved.
CL moves resample along the true path.GetClSteps walks
IClPath.At for each intermediate step rather than linearly interpolating between the path's begin
and end, so a CL arc actually curves and the tool axis rotates along the path instead of through
it. ClLinear gained two guards on the same path: the near-parallel
begin/end normal case short-circuits instead of falling into a degenerate cross product that yielded
a NaN rotation axis, and the interpolation reads its rotation delta through the lazily-built property
rather than a still-null backing field.
CL tool changes teleport instead of stepping. A stepping change stamps collision detection and
volume removal at the chain's current pose, and at CL session start that pose is identity — the tool
sitting at program zero inside the workpiece. The CSV pipeline's teleporting semantic is promoted to
the shared ToolingTeleportSemantic (the old CsvToolingTeleportSemantic
element name is kept as a load-only alias), and the first GOTO after a LOAD / TOOL is forced
into a reposition so a new tool never sweeps a cut from the previous operation's endpoint.
Convert a played CL program into Fanuc NC files.ConvertClToNcFiles, its HTTP action, and the
LocalProjectService / MachiningSession entry points walk the session's final syntax-piece layer,
group pieces per source file and write one NC file per source, template-substituting [NcName]
(default Output/[NcName].nc). It requires a prior play on a machine chain — a pure-CL device leaves
no machine-solved sections to serialize — and reports ConvertClToNc--NoPlay otherwise. Stage-one
results are retained in NcConversions as the hook for
source↔output cross-navigation. A mission can declare the writeback through
EnableConvertClToNcFiles and
ClToNcFileTemplate.
CL→MC hardening. Tool-offset resolution walked back to the distant LOAD block for every motion
(O(N²) on production-scale files) and is now O(1) through a modal active-tool section; the
documentary program-to-Pn stamp is stamped once per run rather than walked per motion; the
program-zero query no longer deep-clones the whole equipment assembly per motion block; the
warned-tool-id set is run-scoped, so the ClToMc--NoToolOffset warning is no longer suppressed on
every run after the first; and MachineAxisConfig gains a
public Clear() so a machine switch rebuilds the axis table instead of accumulating stale rotary
axes.