Class MachineCoordSelectSyntax
- Namespace
- Hi.NcParsers.LogicSyntaxs
- Assembly
- HiMech.dll
Handles machine coordinate selection — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, the code is ignored per ISO standard.
Defaults to ISO G53. Brands with additional one-shot
machine-coordinate codes widen SupportedCodes — the
Siemens preset adds G153 and SUPA (both suppress every
active frame for one block; in this pipeline all of those reduce to
"bypass the composed ProgramToMcTransform",
which the ProgramXyz back-derivation below already models). The
matched code is stamped verbatim into
Term for bidirectional source recovery.
Rotary words on the same block (e.g. SUPA G0 B0) are left to
McAbcSyntax — same behavior as ISO G53, where rotary
axes flow through the normal rotary path.
Must be placed before ProgramXyzSyntax in the syntax chain. When a supported code is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates.
public class MachineCoordSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
- Inheritance
-
MachineCoordSelectSyntax
- Implements
- Inherited Members
- Extension Methods
Examples
G53 with full XYZ on a first block (no #Previous:) —
FindPreviousMc falls back to Vec3d.Zero, transform
defaults to identity, so ProgramXyz equals
MachineCoordinateState. A non-modal MotionEvent is
stamped with Term: “G53” for bidirectional source recovery
(per the precedence rule on Term);
IsRapid inherits from the modal
MotionState.Term
(G00 → true, G01/G02/G03 → false, none → true as the conservative
“safe rapid” default common in practice):
#BeforeBuild:
{ "Parsing": { "Flags": ["G53"], "X": 10, "Y": 20, "Z": 30 } }
#AfterBuild:
{
"MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 },
"ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "G53" }
}
G53 with only Z specified — FindPreviousMc picks up X/Y from
the previous block's MachineCoordinateState; Z is overwritten;
MotionEvent stamped as above:
#Previous:
{ "MachineCoordinateState": { "X": 100, "Y": 50, "Z": -200 } }
#BeforeBuild:
{ "Parsing": { "Flags": ["G53"], "Z": 0 } }
#AfterBuild:
{
"MachineCoordinateState": { "X": 100, "Y": 50, "Z": 0 },
"ProgramXyz": { "X": 100, "Y": 50, "Z": 0 },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "G53" }
}
G91 active on the same block — G53 incompatible with G91 incremental
positioning per ISO standard. Syntax emits validation error
Coord-MachCoord–006, consumes the G53 flag and any X/Y/Z,
and writes no machine state. Positioning section preserved:
#BeforeBuild:
{
"Parsing": { "Flags": ["G53"], "X": 10 },
"Positioning": { "Term": "G91" }
}
#AfterBuild:
{ "Positioning": { "Term": "G91" } }
Standalone G53 with no X/Y/Z — G53 by itself has no destination
to interpret as machine coordinates, so the syntax emits validation
error Coord-MachCoord–007 and consumes the flag without
writing machine state:
#BeforeBuild:
{ "Parsing": { "Flags": ["G53"] } }
#AfterBuild:
{}
Siemens SUPA retract (SUT configured with
SupportedCodes = [“G53”, “G153”, “SUPA”]) — corpus shape
N5 SUPA G0 Z1150 D0: the matched code is stamped verbatim as
Term, missing X/Y fill from the previous machine position,
the motion-mode flag is claimed into the modal MotionState
(LinearMotionSyntax skips this block, so nobody else would), and the
D word stays in Parsing for its own consumer:
#Previous:
{ "MachineCoordinateState": { "X": 500, "Y": 1000, "Z": -30 } }
#BeforeBuild:
{ "Parsing": { "Flags": ["SUPA", "G00"], "Z": 1150, "D": 0 } }
#AfterBuild:
{
"Parsing": { "D": 0 },
"MachineCoordinateState": { "X": 500, "Y": 1000, "Z": 1150 },
"ProgramXyz": { "X": 500, "Y": 1000, "Z": 1150 },
"MotionState": { "Term": "G00" },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "SUPA" }
}
Constructors
MachineCoordSelectSyntax()
Initializes a new instance with default settings.
public MachineCoordSelectSyntax()
MachineCoordSelectSyntax(XElement)
Initializes a new instance by deserializing from the given XML element.
public MachineCoordSelectSyntax(XElement src)
Parameters
srcXElementSource XML element.
Properties
Name
Syntax kind name (typically the concrete type name).
public string Name { get; }
Property Value
SupportedCodes
One-shot machine-coordinate codes this syntax consumes; defaults to
ISO G53. The Siemens preset widens the list to G53 + G153 + SUPA.
The first list entry present in Parsing.Flags is stamped as
Term; every listed code present on the
block is consumed so none re-triggers the unconsumed-parsing warning.
public List<string> SupportedCodes { get; set; }
Property Value
XName
XML element name used to register this syntax with XFactory.
public static string XName { get; }
Property Value
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
syntaxPieceNodeLazyLinkedListNode<SyntaxPiece>ncDependencyListList<INcDependency>ncDiagnosticProgressNcDiagnosticProgress
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
baseDirectorystringThe base directory for resolving relative paths
relFilestringThe relative file path for the XML source
exhibitionOnlyboolif 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
factoryXFactory