diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.LazyLinkedListNode-1.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.LazyLinkedListNode-1.html
index a5a3b99..61edde4 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.LazyLinkedListNode-1.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.Collections.LazyLinkedListNode-1.html
@@ -189,7 +189,8 @@ materializes the next item from the list's source (if any).
-
+
Initializes a new instance with the specified value.
+
@@ -199,7 +200,8 @@ materializes the next item from the list's source (if any).
Parameters
valueT
-
+
The value.
+
@@ -224,7 +226,8 @@ materializes the next item from the list's source (if any).
-
+
Gets the list that this node belongs to.
+
@@ -257,7 +260,9 @@ materializes the next item from the list's source (if any).
Gets the next node. When this is the last materialized node
and the list has a pending source, accessing this property
-triggers on-demand materialization.
+triggers on-demand materialization.
+Thread-safe: concurrent accesses from multiple threads
+are serialized via an internal lock.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.PathUtils.PathUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.PathUtils.PathUtil.html
index 46825ae..533642f 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.PathUtils.PathUtil.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.PathUtils.PathUtil.html
@@ -269,35 +269,41 @@ Class PathUtil
-
+
-
- CombineWithFolderExtension(string, string)
+
+ CombineAsSubDirectory(string, string, string)
-
Combines a base directory with a relative file path, preserving the folder structure.
+
Combines a base directory with a relative file path and appends a suffix
+to derive a sub-directory path. The suffix is only appended when
+relFile is not null or whitespace.
-
public static string CombineWithFolderExtension(string baseDirectory, string relFile)
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html
index feed858..e6561af 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html
@@ -790,8 +790,8 @@ This property is provided as a member value getter and should not be modified.
-
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningSteps.MachiningStep.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningSteps.MachiningStep.html
index 8d297f2..435d17c 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningSteps.MachiningStep.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningSteps.MachiningStep.html
@@ -200,8 +200,8 @@ The duration-based step property is based on the duration from previous-step to
-
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.MappingUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.MappingUtil.html
index a1aee9c..4180292 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.MappingUtil.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mapping.MappingUtil.html
@@ -463,6 +463,37 @@ The actual time basically obtained by the external data from controller.
+
+ SimTimeTag
+
+
+
+
Alternative tag for ActualTimeTag if the value of ActualTime is null.
+
+
+
+
+
public const string SimTimeTag = "AccumulatedTime"
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Claims.IOneShotClaim.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Claims.IOneShotClaim.html
index 2d21124..9280e4b 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Claims.IOneShotClaim.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Claims.IOneShotClaim.html
@@ -103,7 +103,8 @@ Claim is active only to one sentence in which it is specified.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
A string representation of the coordinate, e.g. “G54” for key 54000.
-
+
@@ -406,9 +417,9 @@ The dictionary key is 1000times coordinate index (ex. G54 is 54000); the diction
-
+
-
+
MakeXmlSource(string, string, bool)
@@ -448,7 +459,7 @@ This method may also generate additional resources such as related files.
-
Remarks
+
Remarks
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The baseDirectory is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Root.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html
similarity index 62%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Root.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html
index 8841f11..335392e 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Root.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html
@@ -2,11 +2,11 @@
- Class Root | HiAPI-C# 2025
+ Class ToolOffsetRow | HiAPI-C# 2025
-
-
+
+
@@ -84,24 +84,27 @@
Single row of a ToolOffsetTable.
+Stores geometry (ideal) and wear components for height and radius.
+Matches Fanuc Memory C layout where H and D share the same row.
Integer-keyed tool offset table implementing IToolOffsetConfig.
+Suitable for Fanuc (H/D), Heidenhain (tool number), Mazak, Okuma,
+and other ISO-compatible controllers.
+Key = offset number (Fanuc H or D number).
+
+
+
+
+
public class ToolOffsetTable : INcDependency, IMakeXmlSource, IToolOffsetConfig
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
HiNC-specific: machine position axes move to during tool change (M06).
+Not a standard Fanuc parameter — in real Fanuc, tool change motion
+is programmed in the macro program (O9006).
+Each axis value: a position to move to, or NaN to stay.
+
+
+
+
+
public class ToolingMcConfig : IToolingMcConfig, INcDependency, IMakeXmlSource
Gets the tooling position for a specific axis.
+Returns NaN if the axis should stay where it is.
+Returns null if the axis has no tooling position configured.
+
+
+
+
+
public double? GetToolingPosition(string axisName)
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
+
+
+
+
+
+
+
+ SetToolingPosition(string, double)
+
+
+
+
Sets the tooling position for a specific axis.
+Use NaN to indicate the axis should stay.
+
+
+
+
+
public void SetToolingPosition(string axisName, double value)
Coordinate table for NC controller.
+The dictionary key is a G-code coordinate name (e.g. “G54”, “G59.2”);
+the dictionary value is machine coordinate offset.
Single row of a ToolOffsetTable.
+Stores geometry (ideal) and wear components for height and radius.
+Matches Fanuc Memory C layout where H and D share the same row.
Integer-keyed tool offset table implementing IToolOffsetConfig.
+Suitable for Fanuc (H/D), Heidenhain (tool number), Mazak, Okuma,
+and other ISO-compatible controllers.
+Key = offset number (Fanuc H or D number).
HiNC-specific: machine position axes move to during tool change (M06).
+Not a standard Fanuc parameter — in real Fanuc, tool change motion
+is programmed in the macro program (O9006).
+Each axis value: a position to move to, or NaN to stay.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Heidenhain datum preset and datum shift tables.
+CYCL DEF 247 Q339=N reads from DatumPresetTable,
+CYCL DEF 7 #N reads from DatumShiftTable.
+Each table maps an integer ID (1–20) to a Vec3d offset.
+
+
+
+
+
public class HeidenhainDatumTable : INcDependency, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
+
+
+
+
+
+
+
+ SetDatumPreset(int, Vec3d)
+
+
+
+
+
+
+
+
public void SetDatumPreset(int q339, Vec3d offset)
Initialization Syntax of Heidenhain fixed head block for
CYCL DEF
.
+
Tool offset configuration indexed by a single integer offset number.
+Applies to Fanuc (H/D numbers), Heidenhain (tool number), Mazak, Okuma,
+and other ISO-compatible controllers where one integer selects the offset row.
+
+For Siemens (840D/Sinumerik) where offsets are addressed by
+(tool number, cutting edge D number), see
+ISiemensToolOffsetConfig.
+
Gets the tooling position for a specific axis.
+Returns NaN if the axis should stay where it is.
+Returns null if the axis has no tooling position configured.
Siemens (840D/Sinumerik) tool offset configuration.
+Offsets are addressed by (tool number T, cutting edge D number),
+unlike IToolOffsetConfig where a single integer selects the row.
+
+Siemens stores up to 25 data fields per cutting edge ($TC_DP1..$TC_DP25),
+including three independent length components (L1/L2/L3 for Z/X/Y directions),
+radius, and corresponding wear values.
+
Gets the effective tool height offset (geometry - wear) in mm
+for a specific tool and cutting edge.
+Corresponds to Siemens $TC_DP3 (length 1, typically Z direction).
+Returns 0 if the tool/edge is not configured.
+
+
+
+
+
double GetToolHeightOffset_mm(int toolNumber, int edgeNumber)
Gets the effective tool radius offset (geometry - wear) in mm
+for a specific tool and cutting edge.
+Corresponds to Siemens $TC_DP6 (radius).
+Returns 0 if the tool/edge is not configured.
+
+
+
+
+
double GetToolRadiusOffset_mm(int toolNumber, int edgeNumber)
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Siemens (840D/Sinumerik) tool offset configuration.
+Offsets are addressed by (tool number T, cutting edge D number),
+unlike IToolOffsetConfig where a single integer selects the row.
+
+Siemens stores up to 25 data fields per cutting edge ($TC_DP1..$TC_DP25),
+including three independent length components (L1/L2/L3 for Z/X/Y directions),
+radius, and corresponding wear values.
+
Heidenhain datum preset and datum shift tables.
+CYCL DEF 247 Q339=N reads from DatumPresetTable,
+CYCL DEF 7 #N reads from DatumShiftTable.
+Each table maps an integer ID (1–20) to a Vec3d offset.
Tool offset configuration indexed by a single integer offset number.
+Applies to Fanuc (H/D numbers), Heidenhain (tool number), Mazak, Okuma,
+and other ISO-compatible controllers where one integer selects the offset row.
+
+For Siemens (840D/Sinumerik) where offsets are addressed by
+(tool number, cutting edge D number), see
+ISiemensToolOffsetConfig.
+
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
ISO/RS274 standard G-code and M-code constants.
+Shared across Fanuc, Mazak, Okuma, and other ISO-compatible controllers.
+Brand-specific codes belong in their own keyword classes
+(e.g., FanucKeywords, Siemens, Heidenhain).
ISO/RS274 standard G-code and M-code constants.
+Shared across Fanuc, Mazak, Okuma, and other ISO-compatible controllers.
+Brand-specific codes belong in their own keyword classes
+(e.g., FanucKeywords, Siemens, Heidenhain).
Tool height compensation state written by
+ToolHeightOffsetSyntax.
+Property names are used as JSON keys via nameof.
+The JSON section can be deserialized to an instance implementing this interface.
+
+Managed commands (ISO/Fanuc): G43, G44, G49.
+Fanuc extension: G43.4 (TCPM — parsed only in Fanuc syntax list).
+Siemens equivalent: TRAFOOF/TRAORI (handled by separate syntax).
+Heidenhain equivalent: TOOL CALL / M128/M129 (handled by separate syntax).
+
Derived effective tool height compensation in mm.
+Computed from Mode and OffsetId:
+looks up the offset table for OffsetId,
+obtains the effective height (geometry minus wear),
+then applies sign from Mode
+(positive for G43/G43.4, negative for G44, zero for G49).
Chain of named ProgramXyz → MachineCoordinate transformation entries.
+Stored as a JsonArray of entries, each with “Source” and “Mat4d” keys.
+Each contributing INcSyntax adds or replaces its own entry by source name.
+ProgramXyzSyntax composes all entries in order:
+McXyz = ProgramXyz * T[0] * T[1] * ... * T[n].
Syntax for Heidenhain BEGIN PGM and END PGM commands.
+
Local coordinate offset state (G52) written by
+IsoLocalCoordinateOffsetSyntax.
+Property names are used as JSON keys via nameof.
+
+ISO: G52 X Y Z (local coordinate system shift, additive to G54 series).
+Cancelled by G52 X0 Y0 Z0 or M30 (program end).
+Siemens equivalent: TRANS / ATRANS (handled by separate syntax).
+
-
public class HeidenhainProgramSyntax : INcSyntax
+
public class LocalCoordinateOffset
@@ -112,16 +119,10 @@ Class HeidenhainProgramSyntax
Build syntax arrangement into the syntaxPieceNode in-place.
+
Derived effective tool height compensation in mm.
+Computed from Mode and OffsetId:
+looks up the offset table for OffsetId,
+obtains the effective height (geometry minus wear),
+then applies sign from Mode
+(positive for G43/G43.4, negative for G44, zero for G49).
-
public void Build(LazyLinkedListNode<SyntaxPiece> syntaxPieceNode)
Local coordinate offset state (G52) written by
+IsoLocalCoordinateOffsetSyntax.
+Property names are used as JSON keys via nameof.
+
+ISO: G52 X Y Z (local coordinate system shift, additive to G54 series).
+Cancelled by G52 X0 Y0 Z0 or M30 (program end).
+Siemens equivalent: TRANS / ATRANS (handled by separate syntax).
+
Tool height compensation state written by
+ToolHeightOffsetSyntax.
+Property names are used as JSON keys via nameof.
+The JSON section can be deserialized to an instance implementing this interface.
+
+Managed commands (ISO/Fanuc): G43, G44, G49.
+Fanuc extension: G43.4 (TCPM — parsed only in Fanuc syntax list).
+Siemens equivalent: TRAFOOF/TRAORI (handled by separate syntax).
+Heidenhain equivalent: TOOL CALL / M128/M129 (handled by separate syntax).
+
Chain of named ProgramXyz → MachineCoordinate transformation entries.
+Stored as a JsonArray of entries, each with “Source” and “Mat4d” keys.
+Each contributing INcSyntax adds or replaces its own entry by source name.
+ProgramXyzSyntax composes all entries in order:
+McXyz = ProgramXyz * T[0] * T[1] * ... * T[n].
Consumes F (feedrate) from Parsing and
+G94/G95 mode from Flags.
+Both are modal — persist across blocks via backward node lookback.
+Writes resolved state to a IFeedrateDef section.
+
+
+
+
+
public class FeedrateSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Heidenhain-specific: resolves coordinate offset from
+CYCL DEF 247 (Datum Preset) and CYCL DEF 7 (Datum Shift).
+
+CYCL DEF 247 Q339=N: selects datum preset table entry N.
+CYCL DEF 7 #N: selects datum shift table entry N.
+CYCL DEF 7 X/Y/Z: applies direct XYZ shift values.
+
+For DIN/ISO compatibility (G54–G59), use IsoCoordinateOffsetSyntax
+in addition to this syntax in the Heidenhain syntax list.
+Uses replace-by-source (TransformSource)
+so both syntaxes can coexist without double-composing.
+
+
+
+
+
public class HeidenhainCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Heidenhain-specific: resolves coordinate offset from
+CYCL DEF 247 (Datum Preset) and CYCL DEF 7 (Datum Shift).
+
+CYCL DEF 247 Q339=N: selects datum preset table entry N.
+CYCL DEF 7 #N: selects datum shift table entry N.
+CYCL DEF 7 X/Y/Z: applies direct XYZ shift values.
+
+For DIN/ISO compatibility (G54–G59), use IsoCoordinateOffsetSyntax
+in addition to this syntax in the Heidenhain syntax list.
+Uses replace-by-source (TransformSource)
+so both syntaxes can coexist without double-composing.
+
ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset.
+Reads G54/G55/.../G59.9 from Flags,
+looks up offset Vec3d from IsoCoordinateTable dependency,
+composes into ProgramToMcTransform.
+Modal — active coordinate persists via backward lookback.
+Default coordinate ID is set by StaticInitializer.
+
+
+
+
+
public class IsoCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel).
+Computes a rotation Mat4d around the active plane normal
+and composes it into ProgramToMcTransform.
+
+No IMachineKinematics dependency needed —
+G68 is pure geometric rotation.
+
Input: Parsing.G68 → {X,Y,Z,I,J,K,R} from ParameterizedFlagSyntax.
+If I/J/K not specified, rotation axis is determined by
+active plane: G17→Z, G18→Y, G19→X.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
ISO/Fanuc: resolves G68.2 (tilted work plane) and G69 (cancel).
+Computes a tilt Mat4d from I/J/K euler angles
+(Fanuc ZXZ convention) and composes it into
+ProgramToMcTransform.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
ISO G52: Local coordinate system offset (additive to G54-series).
+
+G52 X10 Y20 Z5 → sets local offset.
+G52 X0 Y0 Z0 → cancels (resets to zero).
+M30 (program end) → also cancels.
+
+Reads Parsing.G52 (from G52Syntax),
+writes LocalCoordinateOffset section,
+and adds a "LocalCoordinateOffset" entry to the transformation chain.
+Modal — persists via backward lookback until changed or cancelled.
+
+
+
+
+
public class IsoLocalCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Resolves G90/G91 incremental positioning to absolute values in-place
+within Parsing.
+
+Fanuc/ISO: reads G90/G91 from Flags (global modal).
+Heidenhain: would need a separate implementation reading I-prefix per axis.
+Siemens: would extend with AC()/IC() per-axis override.
+
+Uses AxisNames to determine which tags are motion axes.
+Traces backward nodes for modal state and last known ProgramXyz
+to resolve incremental values. No instance fields for state — all state lives in JsonObject.
+After this syntax, all axis values in Parsing are absolute —
+ProgramXyzSyntax can consume them without incremental logic.
+Must be placed after NumberedFlagSyntax
+and before ProgramXyzSyntax.
+
+
+
+
+
public class PositioningModeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Compute MachineCoordinate and ProgramXyz (leaf coordinate) from syntax XYZ tags.
+Writes individual double components to SyntaxPiece.JsonObject
+under MachineCoordinate and ProgramXyz sub-objects.
+Must be placed after BundleSyntax since it uses cross-node lookback for last position.
+
+
+
+
+
public class ProgramXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
The term “Program” is absolute positioning coordinate that can be end-user editing.
+The coordinate is usually the final node from the chain of coordinate transformation.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Siemens Sinumerik: resolves work coordinate offset from G54–G57 (ISO-compatible),
+G505–G599 (extended Siemens), and G500 (cancel — machine coordinate mode).
+Reads from Flags,
+looks up IsoCoordinateTable dependency,
+composes into ProgramToMcTransform.
+
+
+
+
+
public class SiemensCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Siemens Sinumerik: resolves work coordinate offset from G54–G57 (ISO-compatible),
+G505–G599 (extended Siemens), and G500 (cancel — machine coordinate mode).
+Reads from Flags,
+looks up IsoCoordinateTable dependency,
+composes into ProgramToMcTransform.
Consumes S (spindle speed) from Parsing.
+Modal — persists across blocks via backward node lookback.
+Writes resolved state to a ISpindleSpeedDef section.
+
+
+
+
+
public class SpindleSpeedSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Carries forward the tilt transform from a previous node
+when the current block has no new tilt command.
+Shared by all tilt syntaxes (G68, G68.2, CYCLE800, PLANE SPATIAL).
+
+
+
+
+
public static void CarryForwardFromPrevious(LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, JsonObject json)
Handles G69 cancellation: writes identity tilt and consumes G69 from Flags.
+Idempotent — safe to call from multiple tilt syntaxes.
+Returns true if G69 was found and handled.
+
+
+
+
+
public static bool TryHandleG69(JsonObject json, JsonObject parsing)
Resolves tool height offset ID to the effective offset value (mm)
+and composes the offset as a translation into the accumulated
+ProgramToMcTransform matrix.
+
+Reads parsed G43/G43.4/G44/G49 flags and H numbers from upstream parsing syntaxes,
+looks up the offset value from IToolOffsetConfig dependency,
+writes the resolved state to a IToolHeightCompensationDef
+section for debuggability, and composes
+ProgramToMcTransform.Trans += toolOrientation * height_mm.
+
+
+The tool orientation direction is read from a "ToolOrientation" key in JSON
+(written by a prior syntax, e.g., ToolOrientationSyntax). If absent, falls back
+to the current ProgramToMcTransform's
+AxialNormal (rotated Z). If no transformation exists yet,
+defaults to UnitZ.
+
+
+
+
+
+
public class ToolHeightOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Consumes F (feedrate) from Parsing and
+G94/G95 mode from Flags.
+Both are modal — persist across blocks via backward node lookback.
+Writes resolved state to a IFeedrateDef section.
ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset.
+Reads G54/G55/.../G59.9 from Flags,
+looks up offset Vec3d from IsoCoordinateTable dependency,
+composes into ProgramToMcTransform.
+Modal — active coordinate persists via backward lookback.
+Default coordinate ID is set by StaticInitializer.
ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel).
+Computes a rotation Mat4d around the active plane normal
+and composes it into ProgramToMcTransform.
+
+No IMachineKinematics dependency needed —
+G68 is pure geometric rotation.
+
ISO/Fanuc: resolves G68.2 (tilted work plane) and G69 (cancel).
+Computes a tilt Mat4d from I/J/K euler angles
+(Fanuc ZXZ convention) and composes it into
+ProgramToMcTransform.
ISO G52: Local coordinate system offset (additive to G54-series).
+
+G52 X10 Y20 Z5 → sets local offset.
+G52 X0 Y0 Z0 → cancels (resets to zero).
+M30 (program end) → also cancels.
+
+Reads Parsing.G52 (from G52Syntax),
+writes LocalCoordinateOffset section,
+and adds a "LocalCoordinateOffset" entry to the transformation chain.
+Modal — persists via backward lookback until changed or cancelled.
+
Resolves G90/G91 incremental positioning to absolute values in-place
+within Parsing.
+
+Fanuc/ISO: reads G90/G91 from Flags (global modal).
+Heidenhain: would need a separate implementation reading I-prefix per axis.
+Siemens: would extend with AC()/IC() per-axis override.
+
+Uses AxisNames to determine which tags are motion axes.
+Traces backward nodes for modal state and last known ProgramXyz
+to resolve incremental values. No instance fields for state — all state lives in JsonObject.
+After this syntax, all axis values in Parsing are absolute —
+ProgramXyzSyntax can consume them without incremental logic.
+Must be placed after NumberedFlagSyntax
+and before ProgramXyzSyntax.
+
Compute MachineCoordinate and ProgramXyz (leaf coordinate) from syntax XYZ tags.
+Writes individual double components to SyntaxPiece.JsonObject
+under MachineCoordinate and ProgramXyz sub-objects.
+Must be placed after BundleSyntax since it uses cross-node lookback for last position.
Consumes S (spindle speed) from Parsing.
+Modal — persists across blocks via backward node lookback.
+Writes resolved state to a ISpindleSpeedDef section.
Resolves tool height offset ID to the effective offset value (mm)
+and composes the offset as a translation into the accumulated
+ProgramToMcTransform matrix.
+
+Reads parsed G43/G43.4/G44/G49 flags and H numbers from upstream parsing syntaxes,
+looks up the offset value from IToolOffsetConfig dependency,
+writes the resolved state to a IToolHeightCompensationDef
+section for debuggability, and composes
+ProgramToMcTransform.Trans += toolOrientation * height_mm.
+
+
+The tool orientation direction is read from a "ToolOrientation" key in JSON
+(written by a prior syntax, e.g., ToolOrientationSyntax). If absent, falls back
+to the current ProgramToMcTransform's
+AxialNormal (rotated Z). If no transformation exists yet,
+defaults to UnitZ.
+
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
@@ -415,6 +389,11 @@ Empty list means root level.
+
Remarks
+
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.FlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html
similarity index 63%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.FlagSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html
index 2602da1..2e793fc 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.FlagSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html
@@ -84,16 +84,16 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.FloatTagSetupSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagSetupSyntax.html
similarity index 69%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.FloatTagSetupSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagSetupSyntax.html
index ab7b005..4bd08e6 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.FloatTagSetupSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagSetupSyntax.html
@@ -84,26 +84,26 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html
similarity index 56%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html
index 212d71c..ca3ec06 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html
@@ -84,16 +84,16 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html
similarity index 58%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainCallSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html
index 2fff4cd..d6e3ad0 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainCallSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html
@@ -84,16 +84,16 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Strips a brand-specific prefix from unparsedText
+before assignment parsing.
+Returns false to signal no match (skip this syntax).
+Base implementation does nothing (no prefix required).
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainLblSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html
similarity index 58%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainLblSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html
index de5235a..fd21bfb 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainLblSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html
@@ -84,16 +84,16 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainPlaneSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html
similarity index 60%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainPlaneSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html
index 7f03951..c2ebda4 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainPlaneSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html
@@ -84,16 +84,16 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainToolCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html
similarity index 58%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainToolCallSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html
index d713788..1be312c 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.HeidenhainSyntaxs.HeidenhainToolCallSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html
@@ -84,16 +84,16 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Syntax for Heidenhain LBL command (label definition).
Label can be a number (1-65535) or a text name (e.g., “MyLabel”).
LBL 0 is reserved for end of subprogram.
Assignment syntax for named (identifier-style) variables with = sign.
+Handles variables that are multi-character identifiers
+rather than {prefix}{digits}.
+
+
+
+
+
public class NamedVarAssignmentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
+Unlike TagAssignmentSyntax which handles
+{prefix}{digits} variables (e.g., #1, R1, Q5),
+this class handles multi-character identifier variables.
+Identifiers must be at least 2 characters to avoid overlap with
+single-letter axis tags (X, Y, Z, etc.).
+
+Ordering: Must be placed before TagAssignmentSyntax
+in syntax lists so that multi-char identifiers (e.g., _X_HOME) are consumed
+before {prefix}{digits} patterns (e.g., R1) attempt to match.
+
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
+
+
+
+
+
+
+
+ ToAssignmentJsonNode(string)
+
+
+
+
Converts an assignment expression string to a JsonNode.
+Override in derived classes for typed parsing.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.ParameterizedFlagSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html
similarity index 63%
rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.ParameterizedFlagSyntax.html
rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html
index 87f8586..509e0e1 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.Derived.ParameterizedFlagSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html
@@ -84,28 +84,28 @@
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Applies the “conventional type” decimal-point interpretation to coordinate
+values in UnparsedText.
+When a tag value has no decimal point (e.g. Y20), it is shrunk by
+the implied decimal places: Y20 → Y0.020 (3 decimal places).
+Values that already contain a decimal point are left unchanged.
Modern CNC controllers default to “calculator type” where Y20 = Y20.0.
+This syntax is only needed for legacy “conventional type” configurations where
+Y20 = Y0.020 (Fanuc DPI=0, etc.).
+
+
+
+
Properties
+
+
+
+
+
+
+ ImpliedDecimalPlaces
+
+
+
+
Number of implied decimal places when no decimal point is present.
+3 → 0.001 (mm), 4 → 0.0001 (inch).
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
+
+
+
+
+
+
+
+ ToAssignmentJsonNode(string)
+
+
+
+
Converts an assignment expression string to a JsonNode.
+Override in derived classes for typed parsing.
Strips a brand-specific prefix from unparsedText
+before assignment parsing.
+Returns false to signal no match (skip this syntax).
+Base implementation does nothing (no prefix required).
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Assignment syntax for named (identifier-style) variables with = sign.
+Handles variables that are multi-character identifiers
+rather than {prefix}{digits}.
Applies the “conventional type” decimal-point interpretation to coordinate
+values in UnparsedText.
+When a tag value has no decimal point (e.g. Y20), it is shrunk by
+the implied decimal places: Y20 → Y0.020 (3 decimal places).
+Values that already contain a decimal point are left unchanged.
Concatenated tag setup syntax.
The syntax is for assignment with space or no splition assignment.
The syntax is not for assignment sign (=) syntax.
ex.
Heidenhain: L X Q2 Y33.4 FQ1
ISO: X100.3Y3.3
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html
index 71a45e7..65a85e2 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html
@@ -284,8 +284,8 @@ Also support single line NC block.
-
- GetSegment(LinkedListNode<IndexedFileLine>, out LinkedListNode<IndexedFileLine>, out LinkedListNode<IndexedFileLine>)
+
+ GetSegment(LazyLinkedListNode<IndexedFileLine>, out LazyLinkedListNode<IndexedFileLine>, out LazyLinkedListNode<IndexedFileLine>)
@@ -295,16 +295,16 @@ the srcNode can be any node in the nodes from
-
public void GetSegment(LinkedListNode<IndexedFileLine> srcNode, out LinkedListNode<IndexedFileLine> beginNode, out LinkedListNode<IndexedFileLine> endNode)
+
public void GetSegment(LazyLinkedListNode<IndexedFileLine> srcNode, out LazyLinkedListNode<IndexedFileLine> beginNode, out LazyLinkedListNode<IndexedFileLine> endNode)
- GetSegment(LinkedListNode<IndexedFileLine>, out LinkedListNode<IndexedFileLine>, out LinkedListNode<IndexedFileLine>)
+
+ GetSegment(LazyLinkedListNode<IndexedFileLine>, out LazyLinkedListNode<IndexedFileLine>, out LazyLinkedListNode<IndexedFileLine>)
@@ -201,16 +201,16 @@ the srcNode can be any node in the nodes from
-
void GetSegment(LinkedListNode<IndexedFileLine> srcNode, out LinkedListNode<IndexedFileLine> beginNode, out LinkedListNode<IndexedFileLine> endNode)
+
void GetSegment(LazyLinkedListNode<IndexedFileLine> srcNode, out LazyLinkedListNode<IndexedFileLine> beginNode, out LazyLinkedListNode<IndexedFileLine> endNode)
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html
index 0d594b3..68ed01e 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html
@@ -252,8 +252,8 @@ Class SingleLineSegmenter
-
- GetSegment(LinkedListNode<IndexedFileLine>, out LinkedListNode<IndexedFileLine>, out LinkedListNode<IndexedFileLine>)
+
+ GetSegment(LazyLinkedListNode<IndexedFileLine>, out LazyLinkedListNode<IndexedFileLine>, out LazyLinkedListNode<IndexedFileLine>)
@@ -263,16 +263,16 @@ the srcNode can be any node in the nodes from
-
public void GetSegment(LinkedListNode<IndexedFileLine> srcNode, out LinkedListNode<IndexedFileLine> beginNode, out LinkedListNode<IndexedFileLine> endNode)
+
public void GetSegment(LazyLinkedListNode<IndexedFileLine> srcNode, out LazyLinkedListNode<IndexedFileLine> beginNode, out LazyLinkedListNode<IndexedFileLine> endNode)
Resolves SyntaxPiece into IAct sequence.
+Unlike INcSyntax which only transforms data in-place,
+INcSemantic produces machine actions from the parsed syntax data.
@@ -308,35 +296,43 @@ Class McAbcCyclicPathSemantic
-
-
Remarks
-
Since the building process may require the information of the related node, a whole node is passed in.
+
Remarks
+
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Resolves SyntaxPiece into IAct sequence.
+Unlike INcSyntax which only transforms data in-place,
+INcSemantic produces machine actions from the parsed syntax data.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html
index b0e51a9..c8651c8 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html
@@ -102,7 +102,7 @@ Class Sentence
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
+
+
+
+
+
@@ -495,7 +768,7 @@ Class SoftNcRunner
-
public IEnumerable<SentenceActEntry> RunControlLines(string relFilePath, IEnumerable<string> lines, SessionMessageHost sessionMessageHost, CancellationToken cancellationToken)
+
public IEnumerable<SourcedActEntry> RunControlLines(string relFilePath, IEnumerable<string> lines, SessionMessageHost sessionMessageHost, CancellationToken cancellationToken)
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html
index 2f134b0..744a524 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcUtil.html
@@ -159,7 +159,10 @@ Class SoftNcUtil
-
Regex prefix pattern that matches word boundary or after digit.
+
Regex prefix pattern that matches word boundary, after digit,
+after whitespace, or at start of string.
+The whitespace/start-of-string alternatives are needed for
+non-word-character prefixes (e.g. Fanuc '#', Siemens '$').
@@ -391,6 +394,39 @@ The text is changed by replacing tag and value to empty string.
+
+
+
+ SetAndTrimUnparsedText(JsonObject, string)
+
+
+
+
+
+
+
+
public static void SetAndTrimUnparsedText(this JsonObject root, string unparsedText)
Depth-First Sequential Syntaxes management.
+It saves space by save the LazyLinkedLists from each syntax to only one LazyLinkedLists in SoftNcRunner to get better performance.
+If the INcSyntax only edit the current node itself, those self-editing INcSyntax without looks-forward is suitable to put into the BundleSyntax.
+
+
+
+
+
public class BundleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
Removes indicated JSON keys from JsonObject
+after upstream syntaxes have consumed them.
+Useful for cleaning up runtime-derived intermediate data
+(e.g., ProgramToMcTransform)
+that should not persist in the final output.
+
+Place at the end of the syntax list, after all consumers have read the keys.
+
+
+
+
+
+
public class CleanupSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
+The baseDirectory is typically the folder at the nearest configuration file folder.
+Since the folder can be moving with the configuration file.
G43.4: Fanuc TCPM (Tool Center Point Management / RTCP).
+Fanuc-specific — not in GeneralSyntaxKit.
+Siemens equivalent: TRAORI. Heidenhain equivalent: M128.
+
+
+
+
+
public static ParameterizedFlagSyntax G43p4Syntax { get; }
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GeneralSyntaxKit.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GeneralSyntaxKit.html
index b0d30a9..1388e28 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GeneralSyntaxKit.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GeneralSyntaxKit.html
@@ -235,7 +235,7 @@ Contains syntax definitions for common G codes used across multiple NC systems.<
Expanding syntax: transforms one SyntaxPiece node
+into zero or more output pieces (e.g., subprogram inlining,
+macro expansion, conditional branching).
+
+
+
+
+
public interface IExpandingNcSyntax : INcSyntax, IMakeXmlSource
Base interface for syntax-level data transformation on
+SyntaxPiece.JsonObject.
+Unlike INcSemantic which produces
+IAct,
+INcSyntax only restructures or enriches parsed data
+without producing actions.
In-situ syntax: mutates the JsonObject
+of the given node in-place without changing the node count.
+Most parsing and logic syntaxes implement this interface.
+
+
+
+
+
public interface ISituNcSyntax : INcSyntax, IMakeXmlSource
Adds or replaces a named transformation entry in the chain.
+If an entry with the same source already exists, it is replaced in-place.
+Otherwise the new entry is appended.
+
+
+
+
+
public static void AddOrReplaceTransform(JsonObject json, string source, Mat4d mat)
Depth-First Sequential Syntaxes management.
+It saves space by save the LazyLinkedLists from each syntax to only one LazyLinkedLists in SoftNcRunner to get better performance.
+If the INcSyntax only edit the current node itself, those self-editing INcSyntax without looks-forward is suitable to put into the BundleSyntax.
Removes indicated JSON keys from JsonObject
+after upstream syntaxes have consumed them.
+Useful for cleaning up runtime-derived intermediate data
+(e.g., ProgramToMcTransform)
+that should not persist in the final output.
+
+Place at the end of the syntax list, after all consumers have read the keys.
+
Expanding syntax: transforms one SyntaxPiece node
+into zero or more output pieces (e.g., subprogram inlining,
+macro expansion, conditional branching).
Base interface for syntax-level data transformation on
+SyntaxPiece.JsonObject.
+Unlike INcSemantic which produces
+IAct,
+INcSyntax only restructures or enriches parsed data
+without producing actions.
In-situ syntax: mutates the JsonObject
+of the given node in-place without changing the node count.
+Most parsing and logic syntaxes implement this interface.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActLinearClAndLinearMcAbcMcXyzabcContour.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActLinearClAndLinearMcAbcMcXyzabcContour.html
index 0d54308..eb81fe9 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActLinearClAndLinearMcAbcMcXyzabcContour.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActLinearClAndLinearMcAbcMcXyzabcContour.html
@@ -201,8 +201,8 @@ This class handles synchronized linear interpolation of tool position and orient
-
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActMcXyzabcOrientableLinearContour.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActMcXyzabcOrientableLinearContour.html
index 49aad0d..faed304 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActMcXyzabcOrientableLinearContour.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.Acts.ActMcXyzabcOrientableLinearContour.html
@@ -201,8 +201,8 @@ This class handles complex tool movements with both position and orientation con
-
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.IControlRunner.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.IControlRunner.html
index 6500fdb..2a18df6 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.IControlRunner.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.IControlRunner.html
@@ -187,7 +187,7 @@ The Control Line is such like the NC (Numerical Control) line.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html
index c15c325..b9f41ce 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.MillingToolOffsetTable.html
@@ -240,6 +240,15 @@ The key is Offset ID (H or D in NC code).
public static Vec3d GetCoordinateOffset(bool hasSiemensG500, int isoCoordinateId, int heidenhainCycleDef247Q339, HeidenhainCycleDef7Arg heidenhainCycleDef7Arg, HardNcEnv ncEnv)
+
public static Vec3d GetCoordinateOffset(bool hasSiemensG500, string isoCoordinateId, int heidenhainCycleDef247Q339, HeidenhainCycleDef7Arg heidenhainCycleDef7Arg, HardNcEnv ncEnv)
Converts a tilt matrix to machine ABC coordinates.
+the tilt matrix is the transformation matrix from table to attacher.
+the solution only fit the orientation part of the tiltMat.
+
+
+
+
+
public bool OrientationToMcAbc(Mat4d tiltMat, out Vec3d mcAbc_rad)
Fix step.csv reading crash on null or malformed values
+
Fix XML IO sub-base directory not applied in some project file operations
+
Improve CSV actual time parsing to support DateTime format in addition to TimeSpan (see 執行CSV檔)
+
Fix CSV title parsing to trim surrounding quotes
+
Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support)
+
Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state
+
+
HiNc Packages Version 3.1.156
+
+
Fix G68 coordinate rotation transformation for non-origin rotation centers
+
Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines
+
Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison
+
Fix RTCP on unmatched tool offset
+
Fix blocking issue when time-mapping file not found
+
Fix FlagsText always null after NC parser refactoring
diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json
index 3045e43..52bee65 100644
--- a/App/wwwroot/HiAPI-docsite/index.json
+++ b/App/wwwroot/HiAPI-docsite/index.json
@@ -367,7 +367,7 @@
"api/Hi.Common.Collections.DictionaryUtil.html": {
"href": "api/Hi.Common.Collections.DictionaryUtil.html",
"title": "Class DictionaryUtil | HiAPI-C# 2025",
- "summary": "Class DictionaryUtil Namespace Hi.Common.Collections Assembly HiGeom.dll Utility class providing extension methods for dictionary operations. public static class DictionaryUtil Inheritance object DictionaryUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods Retrieve(Dictionary, K, out V, bool) Retrieves a value from a dictionary by key, with an option to remove it from the source. public static bool Retrieve(this Dictionary src, K key, out V v, bool removeFromSource) Parameters src Dictionary The source dictionary. key K The key to look for. v V When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. removeFromSource bool If true, removes the key-value pair from the dictionary if found. Returns bool true if the key was found; otherwise, false. Type Parameters K The type of the keys in the dictionary. V The type of the values in the dictionary. TryGetValueByKeys(IDictionary, IEnumerable, out TValue) Tries to get a value from a dictionary by checking multiple keys in sequence. public static bool TryGetValueByKeys(this IDictionary src, IEnumerable keys, out TValue v) Parameters src IDictionary The source dictionary. keys IEnumerable The collection of keys to check. v TValue When this method returns, contains the value associated with the first matching key, if a key is found; otherwise, the default value for the type of the value parameter. Returns bool true if any of the keys was found; otherwise, false. Type Parameters TKey The type of the keys in the dictionary. TValue The type of the values in the dictionary."
+ "summary": "Class DictionaryUtil Namespace Hi.Common.Collections Assembly HiGeom.dll Utility class providing extension methods for dictionary operations. public static class DictionaryUtil Inheritance object DictionaryUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetOrCreate(IDictionary, TKey) Gets the value for key, or creates a new TValue via its parameterless constructor, stores it in the dictionary, and returns it. public static TValue GetOrCreate(this IDictionary src, TKey key) where TValue : new() Parameters src IDictionary key TKey Returns TValue Type Parameters TKey TValue GetOrCreate(IDictionary, TKey, Func) Gets the value for key, or invokes factory to create, store, and return a new value if the key is absent. public static TValue GetOrCreate(this IDictionary src, TKey key, Func factory) Parameters src IDictionary key TKey factory Func Returns TValue Type Parameters TKey TValue GetOrCreate(IDictionary, TKey, TValue) Gets the value for key, or stores and returns defaultValue if the key is absent. public static TValue GetOrCreate(this IDictionary src, TKey key, TValue defaultValue) Parameters src IDictionary key TKey defaultValue TValue Returns TValue Type Parameters TKey TValue Retrieve(Dictionary, K, out V, bool) Retrieves a value from a dictionary by key, with an option to remove it from the source. public static bool Retrieve(this Dictionary src, K key, out V v, bool removeFromSource) Parameters src Dictionary The source dictionary. key K The key to look for. v V When this method returns, contains the value associated with the specified key, if the key is found; otherwise, the default value for the type of the value parameter. removeFromSource bool If true, removes the key-value pair from the dictionary if found. Returns bool true if the key was found; otherwise, false. Type Parameters K The type of the keys in the dictionary. V The type of the values in the dictionary. TryGetValueByKeys(IDictionary, IEnumerable, out TValue) Tries to get a value from a dictionary by checking multiple keys in sequence. public static bool TryGetValueByKeys(this IDictionary src, IEnumerable keys, out TValue v) Parameters src IDictionary The source dictionary. keys IEnumerable The collection of keys to check. v TValue When this method returns, contains the value associated with the first matching key, if a key is found; otherwise, the default value for the type of the value parameter. Returns bool true if any of the keys was found; otherwise, false. Type Parameters TKey The type of the keys in the dictionary. TValue The type of the values in the dictionary."
},
"api/Hi.Common.Collections.EnumerableUtil.html": {
"href": "api/Hi.Common.Collections.EnumerableUtil.html",
@@ -382,12 +382,12 @@
"api/Hi.Common.Collections.LazyLinkedList-1.html": {
"href": "api/Hi.Common.Collections.LazyLinkedList-1.html",
"title": "Class LazyLinkedList | HiAPI-C# 2025",
- "summary": "Class LazyLinkedList Namespace Hi.Common.Collections Assembly HiGeom.dll A singly-growable linked list that can lazily materialize nodes from an IEnumerable source. Without a source it behaves like a regular append-only linked list. With a source, nodes are pulled on demand when Next is accessed on the tail, or when First is accessed on an empty list. public class LazyLinkedList : IEnumerable, IEnumerable, IDisposable Type Parameters T Inheritance object LazyLinkedList Implements IEnumerable IEnumerable IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples // Lazy: nodes materialize as you walk .Next using var list = new LazyLinkedList(File.ReadLines(path)); var node = list.First; // materializes line 0 var next = node.Next; // materializes line 1 // Manual: just like a regular linked list var list2 = new LazyLinkedList(); list2.AddLast(1); list2.AddLast(2); Constructors LazyLinkedList() Creates an empty list (no lazy source). public LazyLinkedList() LazyLinkedList(IEnumerable) Creates a list backed by a lazy source. Nodes are materialized on demand via Next or First. public LazyLinkedList(IEnumerable source) Parameters source IEnumerable Properties Count Number of nodes currently materialized in the list. public int Count { get; } Property Value int First Gets the first node, materializing from source if the list is empty. public LazyLinkedListNode First { get; } Property Value LazyLinkedListNode IsExhausted Whether all items from the source have been materialized (or no source was provided). public bool IsExhausted { get; } Property Value bool Last public LazyLinkedListNode Last { get; } Property Value LazyLinkedListNode Methods AddLast(T) public LazyLinkedListNode AddLast(T value) Parameters value T Returns LazyLinkedListNode Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() GetEnumerator() Returns an enumerator that iterates through the collection. public IEnumerator GetEnumerator() Returns IEnumerator An enumerator that can be used to iterate through the collection."
+ "summary": "Class LazyLinkedList Namespace Hi.Common.Collections Assembly HiGeom.dll A singly-growable linked list that can lazily materialize nodes from an IEnumerable source. Without a source it behaves like a regular append-only linked list. With a source, nodes are pulled on demand when Next is accessed on the tail, or when First is accessed on an empty list. public class LazyLinkedList : IEnumerable, IEnumerable, IDisposable Type Parameters T Inheritance object LazyLinkedList Implements IEnumerable IEnumerable IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) StringUtil.ToDotSplitedString(IEnumerable) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples // Lazy: nodes materialize as you walk .Next using var list = new LazyLinkedList(File.ReadLines(path)); var node = list.First; // materializes line 0 var next = node.Next; // materializes line 1 // Manual: just like a regular linked list var list2 = new LazyLinkedList(); list2.AddLast(1); list2.AddLast(2); Constructors LazyLinkedList() Creates an empty list (no lazy source). public LazyLinkedList() LazyLinkedList(IEnumerable) Creates a list backed by a lazy source. Nodes are materialized on demand via Next or First. public LazyLinkedList(IEnumerable source) Parameters source IEnumerable Properties Count Number of nodes currently materialized in the list. public int Count { get; } Property Value int First Gets the first node, materializing from source if the list is empty. public LazyLinkedListNode First { get; } Property Value LazyLinkedListNode IsExhausted Whether all items from the source have been materialized (or no source was provided). public bool IsExhausted { get; } Property Value bool Last Gets the last materialized node in the list. public LazyLinkedListNode Last { get; } Property Value LazyLinkedListNode Methods AddLast(T) Appends a new node with the specified value to the end of the list. public LazyLinkedListNode AddLast(T value) Parameters value T The value to add. Returns LazyLinkedListNode The newly created node. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() GetEnumerator() Returns an enumerator that iterates through the collection. public IEnumerator GetEnumerator() Returns IEnumerator An enumerator that can be used to iterate through the collection."
},
"api/Hi.Common.Collections.LazyLinkedListNode-1.html": {
"href": "api/Hi.Common.Collections.LazyLinkedListNode-1.html",
"title": "Class LazyLinkedListNode | HiAPI-C# 2025",
- "summary": "Class LazyLinkedListNode Namespace Hi.Common.Collections Assembly HiGeom.dll Node for LazyLinkedList. Accessing Next on the tail node automatically materializes the next item from the list's source (if any). public class LazyLinkedListNode Type Parameters T Inheritance object LazyLinkedListNode Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors LazyLinkedListNode(T) public LazyLinkedListNode(T value) Parameters value T Properties List public LazyLinkedList List { get; } Property Value LazyLinkedList Next Gets the next node. When this is the last materialized node and the list has a pending source, accessing this property triggers on-demand materialization. public LazyLinkedListNode Next { get; } Property Value LazyLinkedListNode Previous public LazyLinkedListNode Previous { get; } Property Value LazyLinkedListNode Value public T Value { get; set; } Property Value T Methods Enumerate() Enumerates from this node forward to the end. public IEnumerable> Enumerate() Returns IEnumerable> EnumerateBack() Enumerates backwards from this node to the head. public IEnumerable> EnumerateBack() Returns IEnumerable> ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object."
+ "summary": "Class LazyLinkedListNode Namespace Hi.Common.Collections Assembly HiGeom.dll Node for LazyLinkedList. Accessing Next on the tail node automatically materializes the next item from the list's source (if any). public class LazyLinkedListNode Type Parameters T Inheritance object LazyLinkedListNode Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors LazyLinkedListNode(T) Initializes a new instance with the specified value. public LazyLinkedListNode(T value) Parameters value T The value. Properties List Gets the list that this node belongs to. public LazyLinkedList List { get; } Property Value LazyLinkedList Next Gets the next node. When this is the last materialized node and the list has a pending source, accessing this property triggers on-demand materialization. Thread-safe: concurrent accesses from multiple threads are serialized via an internal lock. public LazyLinkedListNode Next { get; } Property Value LazyLinkedListNode Previous Gets the previous node in the list. public LazyLinkedListNode Previous { get; } Property Value LazyLinkedListNode Value Gets or sets the value of this node. public T Value { get; set; } Property Value T Methods Enumerate() Enumerates from this node forward to the end. public IEnumerable> Enumerate() Returns IEnumerable> EnumerateBack() Enumerates backwards from this node to the head. public IEnumerable> EnumerateBack() Returns IEnumerable> ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object."
},
"api/Hi.Common.Collections.LinkedListUtil.html": {
"href": "api/Hi.Common.Collections.LinkedListUtil.html",
@@ -707,7 +707,7 @@
"api/Hi.Common.JsonUtil.html": {
"href": "api/Hi.Common.JsonUtil.html",
"title": "Class JsonUtil | HiAPI-C# 2025",
- "summary": "Class JsonUtil Namespace Hi.Common Assembly HiGeom.dll Helper utilities for reading and writing JSON files. public static class JsonUtil Inheritance object JsonUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods CallJsonArrayByPath(JsonObject, IEnumerable) Navigates or creates a JSON array path in the source JSON object. Creates missing intermediate objects and the final array as needed. public static JsonArray CallJsonArrayByPath(this JsonObject srcdst, IEnumerable jsonObjectPath) Parameters srcdst JsonObject The source JSON object to navigate. jsonObjectPath IEnumerable The path segments to navigate through. The last segment will be treated as an array. Returns JsonArray The JSON array at the specified path, creating it if it doesn't exist. Returns null if the path is empty. CallJsonObjectByPath(JsonObject, IEnumerable) Navigates or creates a JSON object path in the source JSON object. Creates missing intermediate objects as needed. public static JsonObject CallJsonObjectByPath(this JsonObject srcdst, IEnumerable jsonObjectPath) Parameters srcdst JsonObject The source JSON object to navigate. jsonObjectPath IEnumerable The path segments to navigate through. Returns JsonObject The JSON object at the specified path, creating it if it doesn't exist. GetJsonNodeByPath(JsonObject, List) public static JsonNode GetJsonNodeByPath(this JsonObject root, List pathSegments) Parameters root JsonObject pathSegments List Returns JsonNode WritePartialJson(string, string, TConfig) Writes a config object into a named section of a JSON file; merges when file exists and overwrites the same section name. public static void WritePartialJson(string filePath, string configName, TConfig config) Parameters filePath string JSON file path configName string Section name to write config TConfig Section object to write Type Parameters TConfig Type of the config object"
+ "summary": "Class JsonUtil Namespace Hi.Common Assembly HiGeom.dll Helper utilities for reading and writing JSON files. public static class JsonUtil Inheritance object JsonUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods CallJsonArrayByPath(JsonObject, IEnumerable) Navigates or creates a JSON array path in the source JSON object. Creates missing intermediate objects and the final array as needed. public static JsonArray CallJsonArrayByPath(this JsonObject srcdst, IEnumerable jsonObjectPath) Parameters srcdst JsonObject The source JSON object to navigate. jsonObjectPath IEnumerable The path segments to navigate through. The last segment will be treated as an array. Returns JsonArray The JSON array at the specified path, creating it if it doesn't exist. Returns null if the path is empty. CallJsonObjectByPath(JsonObject, IEnumerable) Navigates or creates a JSON object path in the source JSON object. Creates missing intermediate objects as needed. public static JsonObject CallJsonObjectByPath(this JsonObject srcdst, IEnumerable jsonObjectPath) Parameters srcdst JsonObject The source JSON object to navigate. jsonObjectPath IEnumerable