Table of Contents

Class HeidenhainCoordinateOffsetSyntax

Namespace
Hi.NcParsers.LogicSyntaxs.Heidenhain
Assembly
HiMech.dll

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
Inheritance
HeidenhainCoordinateOffsetSyntax
Implements
Inherited Members
Extension Methods

Examples

Mat4d arrays are 16 plain doubles in column-major order; pure translation by (tx,ty,tz) is [1,0,0,0, 0,1,0,0, 0,0,1,0, tx,ty,tz,1]. The syntax does not consume from Parsing — the CYCL DEF cycle number and its parameters survive for downstream syntaxes / round-trip emission.

CYCL DEF 247 Q339=+1 with a HeidenhainDatumTable populated so preset row 1 = (50, 50, 0) — the syntax looks up the row and writes a synthetic CoordinateId = "DATUM_PRESET_1" reflecting the resolved preset index:

#BeforeBuild:
{ "Parsing": { "CYCL DEF": 247, "Q339": "+1" } }
#AfterBuild:
{
  "Parsing": { "CYCL DEF": 247, "Q339": "+1" },
  "CoordinateOffset": {
    "CoordinateId": "DATUM_PRESET_1",
    "Offset_X": 50, "Offset_Y": 50, "Offset_Z": 0
  },
  "ProgramToMcTransform": [
    {
      "Source": "CoordinateOffset",
      "Kind": "Static",
      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 50,50,0,1]
    }
  ]
}
CYCL DEF 7 #5 — datum shift table lookup via the # index (here mapped to (100, 200, 0)); CoordinateId records the resolved shift row id: #BeforeBuild:
{ "Parsing": { "CYCL DEF": 7, "#": 5 } }
#AfterBuild:
{
  "Parsing": { "CYCL DEF": 7, "#": 5 },
  "CoordinateOffset": {
    "CoordinateId": "DATUM_SHIFT_5",
    "Offset_X": 100, "Offset_Y": 200, "Offset_Z": 0
  },
  "ProgramToMcTransform": [
    {
      "Source": "CoordinateOffset",
      "Kind": "Static",
      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 100,200,0,1]
    }
  ]
}
CYCL DEF 7 X10 Y20 Z5 — direct X/Y/Z form (no # index) writes the values straight into the offset; no HeidenhainDatumTable dep is required. CoordinateId is the literal "DATUM_SHIFT_DIRECT" sentinel: #BeforeBuild:
{ "Parsing": { "CYCL DEF": 7, "X": 10, "Y": 20, "Z": 5 } }
#AfterBuild:
{
  "Parsing": { "CYCL DEF": 7, "X": 10, "Y": 20, "Z": 5 },
  "CoordinateOffset": {
    "CoordinateId": "DATUM_SHIFT_DIRECT",
    "Offset_X": 10, "Offset_Y": 20, "Offset_Z": 5
  },
  "ProgramToMcTransform": [
    {
      "Source": "CoordinateOffset",
      "Kind": "Static",
      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,5,1]
    }
  ]
}

Constructors

HeidenhainCoordinateOffsetSyntax()

Initializes a new instance with default settings.

public HeidenhainCoordinateOffsetSyntax()

HeidenhainCoordinateOffsetSyntax(XElement)

Initializes a new instance by deserializing from the given XML element.

public HeidenhainCoordinateOffsetSyntax(XElement src)

Parameters

src XElement

Source XML element.

Properties

Name

Syntax kind name (typically the concrete type name).

public string Name { get; }

Property Value

string

XName

XML element name used to register this syntax with XFactory.

public static string XName { get; }

Property Value

string

Methods

Build(LazyLinkedListNode<SyntaxPiece>, List<INcDependency>, NcDiagnosticProgress)

Build syntax arrangement into the syntaxPieceNode in-place.

public void Build(LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, List<INcDependency> ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)

Parameters

syntaxPieceNode LazyLinkedListNode<SyntaxPiece>
ncDependencyList List<INcDependency>
ncDiagnosticProgress NcDiagnosticProgress

MakeXmlSource(string, string, bool)

Creates an XML representation of the object. This method may also generate additional resources such as related files.

public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)

Parameters

baseDirectory string

The base directory for resolving relative paths

relFile string

The relative file path for the XML source

exhibitionOnly bool

if true, the extended file creation is suppressed.

Returns

XElement

An XML element representing the object's state

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.

Reg(XFactory)

Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent.

public static void Reg(XFactory factory = null)

Parameters

factory XFactory