Table of Contents

Class CannedCycleResolveSyntax

Namespace
Hi.NcParsers.LogicSyntaxs
Assembly
HiMech.dll

Resolves the canned-cycle Group-09 state for the current block and writes the result to the CannedCycle section.

  • Active cycle (direct G81..G89 or modal repeat): merges Parsing overrides with previous-cycle stored params, applies G91 incremental-to-absolute conversion and missing-axis fallback, writes CannedCycle with Term, ReturnMode, and Params. The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes (DrillingCycleSyntax, etc.) to read.
  • Explicit cancel (G80 flag present on a non-cycle block): consumes the G80 flag and writes CannedCycle = { Term: "G80" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback.
  • No Group-09 activity: leaves the block untouched.

Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain.

public class CannedCycleResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
Inheritance
CannedCycleResolveSyntax
Implements
Inherited Members
Extension Methods

Examples

Direct G81 active cycle, no #Previous: (so lastProgramXyz = Vec3d.Zero) and no Positioning mode (so the absolute-coordinate path runs, not G91 incremental). The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes to consume; the CannedCycle section carries the snapshot used for modal lookback. ReturnMode defaults to G98 when neither the current block nor a previous block declares G98/G99: #BeforeBuild:

{ "Parsing": { "G81": { "X": 50, "Y": 30, "Z": -10, "R": 2 } } }

#AfterBuild:

{
  "Parsing": { "G81": { "X": 50, "Y": 30, "Z": -10, "R": 2 } },
  "CannedCycle": {
    "Term": "G81",
    "ReturnMode": "G98",
    "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
  }
}

Modal repeat: the current block carries only an X override and no cycle code, but #Previous: has an active G81 with stored params. MergeModalCycleSection(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress) merges X=60 (override) with Y/Z/R from stored params, removes the consumed X from Parsing root, and writes the merged section back to Parsing.G81. ReturnMode inherits “G98” from the previous block's ReturnMode: #Previous:

{
  "CannedCycle": {
    "Term": "G81",
    "ReturnMode": "G98",
    "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
  },
  "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}

#BeforeBuild:

{ "Parsing": { "X": 60 } }

#AfterBuild:

{
  "Parsing": { "G81": { "X": 60, "Y": 30, "Z": -10, "R": 2 } },
  "CannedCycle": {
    "Term": "G81",
    "ReturnMode": "G98",
    "Params": { "X": 60, "Y": 30, "Z": -10, "R": 2 }
  }
}

Explicit G80 cancel: standalone G80 flag with no cycle data. The G80 flag is consumed and CannedCycle = { Term: G80 } is written as a hard sentinel that FindPreviousActiveCycle(LazyLinkedListNode<SyntaxPiece>, string[]) reads to terminate modal lookback. No ReturnMode hint here (no G98/G99 flag on the same block): #BeforeBuild:

{ "Parsing": { "Flags": ["G80"] } }

#AfterBuild:

{ "CannedCycle": { "Term": "G80" } }

Properties

Default

Default instance with standard settings.

public static CannedCycleResolveSyntax Default { get; }

Property Value

CannedCycleResolveSyntax

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