Add: NX cutter-location (CL) file playback. PlayClFile replays an NX CLSF / APT-source toolpath (GOTO / CIRCLE / RAPID / FEDRAT / SPINDL / COOLNT / TLDATA / LOAD) directly onto a ClMillingDevice chain as pure cutter-location motion — no post-processor, no machine coordinates, no kinematics — for verifying a CAM toolpath before it is post-processed for a specific machine. The parser is composed as NxClRunner (a SoftNcRunner preset), 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. A machine-tool (MC) chain is not yet driven from a CL file. See Cutter-Location (CL) Playback
Removed: the GUI-layer displayee composition types MachiningProjectDisplayee, IsoCoordinateEntryDisplayee and HeidenhainCoordinateEntryDisplayee from the core packages — front-ends own their copies under their Disp/ folders (same treatment as UserConfig/UserService/PlayerDivConfig in 3.1.180); the classes compose only public API (IDisplayee over LocalProjectService), so copy them from any app project (e.g. HiNC-2025-webservice/Disp/) to tailor rendering composition
Removed: the legacy CSV runner CsvRunner0 and the transitional switch LocalProjectService.EnableSoftCsvRunner — CSV playback always runs through the general-semantics pipeline GeneralCsvRunner (the flagship path since 3.1.180); CsvRunner now returns the CSV suit's SoftNcRunner directly. The minimal carrier IndexedSentence (orphaned by the runner's removal) is also removed — wrap a bare Sentence in your own ISentenceCarrier if you passed one as a sourceCommand
HiNc Packages Version 3.1.180
Rebuild message reporting on a unified IMessage model: every notification carries a Severity, a Category and a filterable id (SimpleMessage), reported through IProgress<IMessage> with id-first helpers on MessageUtil. Messages arrive on three typed sinks: ShellProgress (session-lifecycle messages), StepDiagnosticProgress (step-anchored diagnostics) and NcDiagnosticProgress (NC-parsing diagnostics). Removed: the legacy mixed channel MixedProgress0 and MultiTagMessage/MultiTagMessageUtil; message parameters across the API are retyped from IProgress<object> to IProgress<IMessage> (including the XFactory deserialization chain), and NcDiagnostic.Text renames to Notification (see Message Management)
Scope the session surface to the session: LocalProjectService.SessionShell is created by BeginSession() and nulled at EndSession() (no longer lazily created outside a session), and ShellProgress is recreated per session — subscribe once through the app-lifetime bridge events OnShellMessageAdded / OnShellMessageCleared, or buffer a single call's messages with the new MessageCollector
Move run operations onto the session model: MachiningSession now publicly exposes RunControlLines, RunNcFile/RunCsvFile/RunNc and PlayNcFile/PlayCsvFile/PlayNc (the SessionShell / LocalProjectService entry points remain as delegating wrappers); IMachiningService replaces PlayerCancellationToken/PausePlayer with a single PacePlayer property
Add LocalProjectServiceController: a project-level (session-independent) HTTP API whose responses carry the notifications reported during each call
Add NcRunnerSuit: bundles a parser with its per-case dependency data as one file-loadable unit; the project holds separate NC and CSV suits (NcRunnerSuit / CsvRunnerSuit), and ReadNcRunnerSuit / WriteNcRunnerSuit switch the active parser mid-project from a suit file (refused while a control file is playing)
Make one NC runner configuration shareable across projects: per-case data (tool offsets, work-coordinate offsets, Siemens frames, Heidenhain datums, retained macro variables, seeded brand parameter tables) travels as proxy placeholders inside SoftNcRunner and resolves against the owning project's per-case list; machine-config consumers read the resolved view via GetEffectiveNcDependencyList() (the raw pipeline list renames to PipelineNcDependencyList); legacy <NcDependencyList> XML and NcEnv-based projects still load and migrate automatically
Run CSV playback through the new general-semantics pipeline GeneralCsvRunner by default, mapping CSV rows into the same standardized sections as the NC pipeline; the legacy runner remains as CsvRunner0 behind LocalProjectService.EnableSoftCsvRunner = false (both removed in 3.1.184)
Rework time mapping around absolute wall-clock time: AddTimeDataByFile accepts DateTime windows (stored as IFileTimeSection forms), the project-scoped MappingAnchorDateTime converts controller timestamps onto one run-relative axis, and each step preserves ActualTimecode plus the new ActualDateTime. EndTimecode replaces AccumulatedTime as the canonical end-of-step time (kept as an [Obsolete] alias; step CSVs now write an EndTimecode header and still read legacy AccumulatedTime)
Fix CSV timing across midnight: step durations derive from full date-bearing instants (no more negative durations and negative chart time axes on multi-day recordings), and non-physical durations from spliced recordings are clamped with a validation warning instead of stalling physics evaluation
Improve NC-parsing diagnostics: G53 / G53.1 record their source G-code on the parsed block and emit Coord-MachCoord--005/006/007 on previously-silent failure paths; G68.2 tilted planes the machine cannot reach emit Coord-Tilt--001/002, with a tool-axis-only IK retry that avoids spurious warnings on machines with fewer than three rotary axes
Fix indexed-rotary simulation in plain mode: blocks with no active G68.2 / G43.4 no longer fold the kinematic pivot transform into plain XYZ moves (matching real controller behavior for table-side rotary programs)
Fix fatal native crashes (0xC0000005) from disposing display/geometry objects still in use (client disconnect, runtime-geometry reset, app shutdown): DispEngine and CubeTree native calls are gated against concurrent dispose and disposal runs serialized in the background. Large geometry no longer freezes the UI: Solid builds its display topology off-thread and draws a wire bounding box with a “Loading” mark until ready. WorkpieceService.GetRuntimeGeom renames to GetOrBuildRuntimeGeom (now GetOrBuildMeshedGeom since the 3.1.184 meshed-geom rename)
Fix intermittent “No cut / No data for step” on freshly-simulated steps: the bulk step-data readers no longer cache the absence of rows that the writer has not committed yet, so per-step data appears without a re-run
Fix ResetRuntime to also rewind the NC-runner session state, so the next play restarts file/line indexing from scratch (as PowerReset does)
Serialize project-file operations through a zero-wait gate: a New/Load/Save/Reload arriving while another is in progress throws ProjectFileBusyException immediately instead of racing into a file-in-use IOException
Fix AlignWorkpieceProgramZeroToIso to compute in the machine-zero state, so the result is correct even when the live machine's axes are displaced
Fixes: milling-force training skips steps with missing engagement data instead of crashing; sharp cone-tip tools no longer render their flute transparent; ClStrip raises a Cleared event after Clear (pairing with PosAdded)
Remove GUI-layer types UserConfig/UserService/PlayerDivConfig from the core package (front-ends own their copies; construct LocalProjectService with the ILogger-only constructor); replace packed MixedIndex file-line keys with typed FileLineIndex comparison; dependency updates: SQLitePCLRaw.bundle_e_sqlite3 pinned to 3.0.3 (SQLite CVE-2025-6965), Microsoft.Data.Sqlite 10.0.9, Dapper 2.1.79
HiNc Packages Version 3.1.175
WorkpieceService file IO now takes relative paths and resolves them against a base-directory Func<string> injected by LocalProjectService — the runtime-geometry write/read no longer requires the caller to pre-combine an absolute path. WorkpieceService.ReadRuntimeGeom (now ReadMeshedGeom) now returns whether the source file existed (the not-found notice moves to the calling shell)
Rename runtime-geometry mesh-export methods to the Export* convention (STL/OBJ/PLY are foreign interchange formats, not native writes): WriteRuntimeGeomToStl/Obj/Ply → ExportRuntimeGeomToStl / ExportRuntimeGeomToObj / ExportRuntimeGeomToPly; the session command WriteRuntimeGeomToStlCommand → ExportRuntimeGeomToStlCommand (now ExportMeshedGeomToStlCommand) keeps the old <WriteRuntimeGeomToStlCommand> element name as a back-compat alias so existing projects still load
HiNc Packages Version 3.1.173
Improve Mrr_mm3ds precision: the material-removal-rate now sums each cut contour's signed area-vector (fan triangulation, skipping non-finite triangles) projected on the feed direction, replacing the per-contour bounding-box area that over-estimated the cut cross-section
Add AlignWorkpieceProgramZeroToIso script command: resolves a G54/G55/… entry from the project ISO coordinate table and places workpiece + fixture so the program zero coincides with that machine coordinate (topology math delegated to the new AlignWorkpieceProgramZeroToIso extension)
Drop gRPC plumbing from the HiNc package: remove Hi.Grpcs.* ClStrip/Player service runners and protos, MachiningProjectGrpcServer, MonitoringPlayer, and UniversalNcMonitorClient; fold CsvRunnerConfig back into CsvRunner0 (gRPC services now ship in HiNcRcl / UJoinRcl)
HiNc Packages Version 3.1.172
Replace implicit XFactory registration (private static <ClassName>() constructors + _ = X.XName wake-up touches) with explicit public static void Reg(XFactory factory = null) methods across ~270 classes. XFactory becomes an instance class with a process-wide Default singleton; Generators is renamed from Regs and now an instance property; the delegate type is renamed XGeneratorDelegate from GenByXElementDelegate. Composite types chain X.Reg(factory) on dependents in place of the old wake-up touches; multi-name (legacy alias) registrations keep the current XName first and group aliases under a //legacy aliases comment. Entry points (web service, win-desktop, test fixtures) must call Reg once at startup before any project XML is deserialized — registration no longer happens by accident when the type is first touched. See XML IO.
HiNc Packages Version 3.1.171
Rename RuntimeApi → SessionShell (the runtime entry point exposed to scripting); IShellCommand → ISessionCommand and RuntimeController → SessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApi → sessionShell
Tri-state milling-physics contract: MachiningStep physics getters converge on a tri-state result, non-null MillingPhysicsBrief on no-cut steps under EnablePhysics; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces)
Rename IMachiningStepHost → IMachiningService (drops the ICsScriptApi seam)
Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; ForceAccelShot.ReadRows skips blank lines
Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses IsoCoordinateEntryDisplayee with full machining chain anchor instead of table-buckle-only anchor
Rename SessionMessageHost → SessionProgress on both ShellProgress and ShellProgress (SessionShell.SessionMessageHost is kept as [Obsolete])
Remove obsolete HiLog logging utility and DynamicMachiningProjectDisplayee0
HiNc Packages Version 3.1.160
Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix)
Fix cubetree construction defect when a triangle edge passes through a wire corner
Mech Builder: geometry (STL) file picker for anchored transformation now offers Project directory in addition to Resource directory.
Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state
Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support)
Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments
Fix step.csv reading crash on null or malformed values
Fix XML IO sub-base directory not applied in some project file operations
Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability
Refactor messaging system from IMessageHost to standard IProgress<T> pattern; ShellProgress (formerly SessionMessageHost) now implements IProgress<T>, and all messaging methods renamed from Add* to Report* (e.g., AddProgress → MultiTagMessageUtil.ReportProgress)
Fix cubetree initialization crash
Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in XyzabcSolver
Add asynchronous anchor solid preparation on project load for improved startup performance