From e026da61b37bc85a92182aa3fdef3e91522151cc Mon Sep 17 00:00:00 2001 From: iamboss Date: Fri, 8 May 2026 22:17:04 +0800 Subject: [PATCH] fix SoftNcRunner GM code normalization. --- App/Hi.WpfPlus.dll | Bin 71168 -> 71168 bytes App/HiCbtr.dll | Bin 126976 -> 127488 bytes App/HiDisp.dll | Bin 11493376 -> 11493376 bytes App/HiGeom.dll | Bin 427008 -> 430080 bytes App/HiLicense.dll | Bin 81920 -> 0 bytes App/HiMech.dll | Bin 1118720 -> 1120256 bytes App/HiNC-2025-win-desktop.deps.json | 151 ++++--- App/HiNC-2025-win-desktop.dll | Bin 892928 -> 893440 bytes App/HiNC-2025-win-desktop.pdb | Bin 337632 -> 337624 bytes App/HiNc-Resource.dll | Bin 56320 -> 56320 bytes App/HiNc.dll | Bin 401408 -> 402432 bytes App/HiUniNc.dll | Bin 186880 -> 186880 bytes App/en/HiGeom.resources.dll | Bin 4608 -> 4608 bytes App/en/HiMech.resources.dll | Bin 4608 -> 4608 bytes .../HiAPI-docsite/api/Hi.Cbtr.CubeTree.html | 3 + .../api/Hi.Cbtr.CubeTreeExportExtensions.html | 223 +++++++++++ App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.html | 5 + .../Hi.Collision.AnchoredCollidablePair.html | 3 +- .../api/Hi.Collision.CollisionIndexPair.html | 3 +- .../api/Hi.Coloring.DictionaryColorGuide.html | 3 +- .../api/Hi.Coloring.FilteredColorGuide.html | 3 +- ...Hi.Common.FileLines.FileLineCharIndex.html | 18 +- ...on.FileLines.FileLineCharIndexSegment.html | 7 +- .../Hi.Common.Messages.ActionProgress-1.html | 6 +- .../api/Hi.Common.PacePlayer.html | 6 +- .../Hi.Common.XmlUtils.ProjectApiVersion.html | 9 +- .../HiAPI-docsite/api/Hi.Geom.ObjUtil.html | 221 +++++++++++ .../HiAPI-docsite/api/Hi.Geom.PlyUtil.html | 220 +++++++++++ .../HiAPI-docsite/api/Hi.Geom.StlFile.html | 3 +- .../api/Hi.Geom.TransformationGeom.html | 3 +- App/wwwroot/HiAPI-docsite/api/Hi.Geom.html | 10 + .../api/Hi.Machining.FreeformRemover.html | 3 +- ...ningEquipmentUtils.MachiningEquipment.html | 3 +- ...EquipmentUtils.MachiningEquipmentUtil.html | 2 +- ...gVolumeRemovalProc.StepMotionSnapshot.html | 6 +- ....Machining.MachiningVolumeRemovalProc.html | 3 +- .../Hi.MachiningProcs.MachiningActRunner.html | 44 +++ ...chiningProcs.MachiningActRunnerConfig.html | 3 +- .../Hi.MachiningProcs.MachiningSession.html | 38 ++ .../api/Hi.MachiningProcs.RuntimeApi.html | 74 ++++ .../api/Hi.Mech.GeneralMechanism.html | 3 +- .../HiAPI-docsite/api/Hi.Mech.Topo.Asmb.html | 3 +- .../api/Hi.Milling.Cutters.AptProfile.html | 3 +- ...Milling.Cutters.CustomSpinningProfile.html | 3 +- .../api/Hi.Milling.Cutters.MillingCutter.html | 3 +- ...Hi.Milling.FluteContours.FluteContour.html | 3 +- ...Milling.FluteContours.FreeContourTray.html | 3 +- ...ling.FluteContours.UniformContourTray.html | 3 +- .../Hi.Milling.MillingTools.MillingTool.html | 3 +- .../api/Hi.NcMech.Fixtures.Fixture.html | 3 +- .../Hi.NcMech.Holders.CylindroidHolder.html | 3 +- .../api/Hi.NcMech.Holders.FreeformHolder.html | 3 +- .../api/Hi.NcMech.Workpieces.Workpiece.html | 3 +- ...endencys.ControllerParameterTableBase.html | 24 +- ...Dependencys.Fanuc.FanucParameterTable.html | 14 +- ...cys.Fanuc.FanucPositionVariableLookup.html | 4 +- .../api/Hi.NcParsers.Dependencys.Fanuc.html | 2 +- ...rs.Dependencys.Generic.FallbackConfig.html | 12 +- ...dencys.Generic.GenericBlockSkipConfig.html | 12 +- ...dencys.Generic.NcKinematicsDependency.html | 12 +- ...ers.Dependencys.Generic.ToolOffsetRow.html | 30 +- ...s.Dependencys.Generic.ToolOffsetTable.html | 15 +- ...s.Dependencys.Generic.ToolingMcConfig.html | 12 +- ...s.Heidenhain.HeidenhainParameterTable.html | 12 +- ...sers.Dependencys.HeidenhainDatumTable.html | 48 ++- ...i.NcParsers.Dependencys.INcDependency.html | 5 +- ...Dependencys.Siemens.SiemensFrameTable.html | 9 +- ...encys.Siemens.SiemensMachineDataTable.html | 12 +- ...pendencys.Syntec.SyntecParameterTable.html | 12 +- .../api/Hi.NcParsers.Dependencys.html | 3 +- .../api/Hi.NcParsers.IGetSentence.html | 3 +- ...arsers.Initializers.HomeMcInitializer.html | 16 +- ...NcParsers.Initializers.INcInitializer.html | 15 +- ...arsers.Initializers.StaticInitializer.html | 31 +- .../api/Hi.NcParsers.Initializers.html | 11 +- ...rsers.InspectionSyntaxs.CleanupSyntax.html | 16 +- ...ctionSyntaxs.ProgramXyzBackfillSyntax.html | 6 +- ...sers.InspectionSyntaxs.SnapshotSyntax.html | 16 +- .../api/Hi.NcParsers.Keywords.CsScript.html | 9 +- ...NcParsers.Keywords.FanucPathSmoothing.html | 253 ++++++++++++ ...cParsers.Keywords.Heidenhain.ICyclDef.html | 7 +- .../api/Hi.NcParsers.Keywords.Heidenhain.html | 5 +- ...rsers.Keywords.IFanucPathSmoothingDef.html | 238 +++++++++++ .../api/Hi.NcParsers.Keywords.IFlagsDef.html | 7 +- .../Hi.NcParsers.Keywords.IParsingDef.html | 10 +- ....NcParsers.Keywords.IPathSmoothingDef.html | 9 +- .../Hi.NcParsers.Keywords.IProgramXyzDef.html | 11 +- ...NcParsers.Keywords.ITransformationDef.html | 5 +- ...i.NcParsers.Keywords.IUnparsedTextDef.html | 9 +- .../api/Hi.NcParsers.Keywords.IndexNote.html | 13 +- .../Hi.NcParsers.Keywords.PathSmoothing.html | 6 + .../Hi.NcParsers.Keywords.PlaneSelect.html | 9 +- ...rsers.Keywords.ToolHeightCompensation.html | 5 +- .../api/Hi.NcParsers.Keywords.html | 66 +++- ...Parsers.LogicSyntaxs.BackBoringSyntax.html | 12 +- ...arsers.LogicSyntaxs.BoringCycleSyntax.html | 12 +- ...LogicSyntaxs.CannedCycleResolveSyntax.html | 6 +- ...ers.LogicSyntaxs.CircularMotionSyntax.html | 12 +- ....NcParsers.LogicSyntaxs.CoolantSyntax.html | 12 +- ...ers.LogicSyntaxs.CoordinateOffsetUtil.html | 34 +- ...sers.LogicSyntaxs.DrillingCycleSyntax.html | 12 +- ...ogicSyntaxs.FanucPathSmoothingSyntax.html} | 77 ++-- ...NcParsers.LogicSyntaxs.FeedrateSyntax.html | 12 +- ...Parsers.LogicSyntaxs.FineBoringSyntax.html | 12 +- ...cParsers.LogicSyntaxs.G43p4RtcpSyntax.html | 12 +- ...ogicSyntaxs.G53p1RotaryPositionSyntax.html | 12 +- ...hain.HeidenhainCoordinateOffsetSyntax.html | 12 +- ...LogicSyntaxs.HighSpeedPeckCycleSyntax.html | 12 +- ...LogicSyntaxs.IncrementalResolveSyntax.html | 21 +- ...ogicSyntaxs.IsoCoordinateOffsetSyntax.html | 12 +- ...ers.LogicSyntaxs.IsoG68RotationSyntax.html | 12 +- ...rsers.LogicSyntaxs.IsoG68p2TiltSyntax.html | 12 +- ...yntaxs.IsoLocalCoordinateOffsetSyntax.html | 16 +- ...rsers.LogicSyntaxs.LinearMotionSyntax.html | 12 +- ...LogicSyntaxs.MachineCoordSelectSyntax.html | 12 +- ...rs.LogicSyntaxs.McAbcCyclicPathSyntax.html | 12 +- ...Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html | 3 +- ...s.LogicSyntaxs.McAbcXyzFallbackSyntax.html | 3 +- ...Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html | 3 +- ....LogicSyntaxs.PeckDrillingCycleSyntax.html | 12 +- ...ogicSyntaxs.PivotTransformationSyntax.html | 12 +- ...arsers.LogicSyntaxs.PlaneSelectSyntax.html | 6 +- ...arsers.LogicSyntaxs.PositioningSyntax.html | 6 +- ...Parsers.LogicSyntaxs.ProgramEndSyntax.html | 12 +- ...arsers.LogicSyntaxs.ProgramStopSyntax.html | 12 +- ...Parsers.LogicSyntaxs.ProgramXyzSyntax.html | 20 +- ...NcParsers.LogicSyntaxs.ProgramXyzUtil.html | 6 +- ...rs.LogicSyntaxs.ReferenceReturnSyntax.html | 12 +- ...Siemens.SiemensCoordinateOffsetSyntax.html | 12 +- ...rsers.LogicSyntaxs.SpindleSpeedSyntax.html | 12 +- ...rsers.LogicSyntaxs.TappingCycleSyntax.html | 12 +- ...arsers.LogicSyntaxs.TiltTransformUtil.html | 4 +- ...Parsers.LogicSyntaxs.ToolChangeSyntax.html | 15 +- ...s.LogicSyntaxs.ToolHeightOffsetSyntax.html | 19 +- ...NcParsers.LogicSyntaxs.UnitModeSyntax.html | 15 +- .../api/Hi.NcParsers.LogicSyntaxs.html | 23 +- .../api/Hi.NcParsers.NcDiagnostic.html | 21 +- .../Hi.NcParsers.NcDiagnosticProgress.html | 70 ++-- ...arsers.ParsingSyntaxs.BlockSkipSyntax.html | 12 +- ...axs.CommentSyntaxs.QuoteCommentSyntax.html | 19 +- ...Parsers.ParsingSyntaxs.CommentSyntaxs.html | 5 +- ...rs.ParsingSyntaxs.FloatTagValueSyntax.html | 22 +- ...fSyntaxs.HeidenhainDatumSettingSyntax.html | 15 +- ...DefSyntaxs.HeidenhainDatumShiftSyntax.html | 15 +- ...xs.Heidenhain.HeidenhainBlkFormSyntax.html | 12 +- ...ntaxs.Heidenhain.HeidenhainCallSyntax.html | 12 +- ...xs.Heidenhain.HeidenhainCyclDefSyntax.html | 16 +- ...idenhain.HeidenhainFnAssignmentSyntax.html | 12 +- ...gSyntaxs.Heidenhain.HeidenhainLSyntax.html | 15 +- ...yntaxs.Heidenhain.HeidenhainLblSyntax.html | 12 +- ...taxs.Heidenhain.HeidenhainPlaneSyntax.html | 12 +- ...xs.Heidenhain.HeidenhainProgramSyntax.html | 12 +- ...s.Heidenhain.HeidenhainToolCallSyntax.html | 12 +- ....ParsingSyntaxs.IntegerTagValueSyntax.html | 22 +- ...rsingSyntaxs.NamedVarAssignmentSyntax.html | 33 +- ...rs.ParsingSyntaxs.TagAssignmentSyntax.html | 22 +- ...Parsers.ParsingSyntaxs.TagValueSyntax.html | 32 +- ...ers.PostLogicSyntaxs.ModalCarrySyntax.html | 19 +- ...LogicSyntaxs.RadiusCompensationSyntax.html | 14 +- ...arsers.Segmenters.HeidenhainSegmenter.html | 6 +- ...s.Segmenters.InlineDelimiterSegmenter.html | 9 +- ...sers.Semantics.ClLinearMotionSemantic.html | 3 +- ...sers.Semantics.CompoundMotionSemantic.html | 3 +- ...i.NcParsers.Semantics.CoolantSemantic.html | 3 +- ...rsers.Semantics.CsScriptBeginSemantic.html | 8 +- ...Parsers.Semantics.CsScriptEndSemantic.html | 8 +- ....NcParsers.Semantics.CsScriptSemantic.html | 5 +- ...mantics.MachineCoordinateStepSemantic.html | 3 +- ...Parsers.Semantics.McArcMotionSemantic.html | 3 +- ...sers.Semantics.McLinearMotionSemantic.html | 3 +- ...arsers.Semantics.SpindleSpeedSemantic.html | 3 +- ...rs.Semantics.StrokeLimitCheckSemantic.html | 3 +- ...cParsers.Semantics.ToolChangeSemantic.html | 3 +- .../api/Hi.NcParsers.Sentence.html | 3 +- .../api/Hi.NcParsers.SoftNcRunner.html | 81 ++-- .../Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html | 13 +- ...Hi.NcParsers.Syntaxs.GenericSyntaxKit.html | 12 +- .../api/Hi.NcParsers.Syntaxs.SyntaxPiece.html | 3 +- .../HiAPI-docsite/api/Hi.NcParsers.html | 7 +- .../api/Hi.Numerical.HardNcLine.html | 3 +- App/wwwroot/HiAPI-docsite/api/toc.html | 21 +- App/wwwroot/HiAPI-docsite/api/toc.json | 2 +- .../fundamentals/common/xml-io.html | 2 +- App/wwwroot/HiAPI-docsite/index.json | 368 ++++++++++-------- App/wwwroot/HiAPI-docsite/manifest.json | 138 +++++-- .../HiAPI-docsite/manual/analysis/index.html | 1 + .../manual/analysis/machinability.html | 7 +- .../manual/analysis/spindle-capability.html | 222 +++++++++++ .../analysis/spindle-power-evaluation.html | 1 + .../HiAPI-docsite/manual/analysis/toc.html | 3 + .../HiAPI-docsite/manual/analysis/toc.json | 2 +- App/wwwroot/HiAPI-docsite/xrefmap.yml | 349 ++++++++++++----- App/zh-Hans/HiMech.resources.dll | Bin 13312 -> 13312 bytes App/zh-Hans/HiNc.resources.dll | Bin 4608 -> 4608 bytes App/zh-Hant/HiGeom.resources.dll | Bin 4608 -> 4608 bytes App/zh-Hant/HiMech.resources.dll | Bin 13312 -> 13312 bytes App/zh-Hant/HiNc.resources.dll | Bin 6656 -> 6656 bytes 197 files changed, 3482 insertions(+), 958 deletions(-) delete mode 100644 App/HiLicense.dll create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeExportExtensions.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.Geom.ObjUtil.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.Geom.PlyUtil.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucPathSmoothing.html create mode 100644 App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html rename App/wwwroot/HiAPI-docsite/api/{Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html => Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html} (70%) create mode 100644 App/wwwroot/HiAPI-docsite/manual/analysis/spindle-capability.html diff --git a/App/Hi.WpfPlus.dll b/App/Hi.WpfPlus.dll index e9d40d387f8d1935d48a12db49a9da510b833461..ff02b3df3e812c5f784f4da6f9f5f1836df36e7d 100644 GIT binary patch delta 318 zcmZoz!_u&ZWkLr_QMl@njXfgrj2)8~%3Ct_PQESQ&Dgv-U16q}z&ZKP*MBgbc3PDw zy_-Aal(%H;nS5Kmo3Uwgy24B`0r~oa|EFB-a@lQm zLyiBvj`d~%^L?zArg{bp45o|>2F7}ZdWOcP+G%DM7OAGDrim8GMyV#|=7|QThDL@K zDF#WF28pJomL|qVsYa<5hLhQC9a(l-CElCtV;dk)bv0;9MSinWQ_p^h+T;e-$!lyq z6rh5iV1gjkA9!9TeNw#e_2_%$37Zw|-ZD-OVC3D*=Wyj5XFCHU12Y2yL;LpEe2gm@ z8BMoO6=2L~3^rxZW=LZ&W3T|iR0dNpOa!u%8H|8@69#i2Ok^+siW>q&41qE!Kwc7q hC6G)6tF{EHG6t&#>9AlhoE|R3XbH4nq7Y*~GXTStUBLhV diff --git a/App/HiCbtr.dll b/App/HiCbtr.dll index 882456d74ca3d8fc082bc3a0372497fda3a17fa7..ad3df807eef395588675e00bb6439191ec7cd714 100644 GIT binary patch delta 21853 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 diff --git a/App/HiGeom.dll b/App/HiGeom.dll index 1c110c2ea69caf961dd74ecb2f10787af74caf5d..607a4a44049cb7345b1d50069058441d8870db54 100644 GIT binary patch delta 199041 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 Sk8yt4E16>QKdgQ2_WuK)H#vR) delta 196391 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%0D25&ilK`Z`IWo8+2*0Z@&OLBi;!6iJfypV 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

u7N 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 UW$`x|F3vlfe6IKldv_-Gf7&_~>Hq)$ diff --git a/App/HiLicense.dll b/App/HiLicense.dll deleted file mode 100644 index 03b464f376337082845f1aac3383eacec407525f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81920 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 diff --git a/App/HiMech.dll b/App/HiMech.dll index ae32d2d1afd9e171649a040b3ce39501362a868a..e531825afa9d3c99c883490cb40fd10bc6172232 100644 GIT binary patch literal 1120256 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

QcsCe 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�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%0Dk@Wq%EdA-DFe|U% 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 z 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 z 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 literal 1118720 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

=;FfB!t~7 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%0DYPtOh(;;CJnGm6q%82GZ7-@vA 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

G3}V|n$*T>q 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Π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 O)7_Sq_e8{_i~k2IXl()j delta 19088 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 diff --git a/App/HiNC-2025-win-desktop.pdb b/App/HiNC-2025-win-desktop.pdb index 3065e16d1240ab821acdfaa575457304ad060ac1..b599751e4bd2c7f25ccd770267b7cc550cf1ccc0 100644 GIT binary patch delta 37008 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 delta 36762 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 delta 301 zcmZqJ!Q8Nec|r%v{Y2&s8+$yM8I3nzWq!{n@Uz^z*(fL8uXB=nTlwbGlO|tb{bFIL zXTZQXFTYXE7;MO(&0x%s$dJrn$zaZq z#9+i=0E8(FsZcRP1{1KHF;EU9W(pQJWB`eq0og`CeWpO2X+RM(h$)jxZ<(?hGUzcF NY~FawpOJ}y0RY>QSz7=A diff --git a/App/HiNc.dll b/App/HiNc.dll index 3609e3753edca7b57e35cc03f6b9fea5d57462ea..d968af032c6ecf3bd849bfcb4b37535ecf7025e3 100644 GIT binary patch delta 132459 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 CC*{`w delta 131753 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
wA7ht1{3j^-a^qzq@KS0)#{EjiP0;Z#ROOa1W^ 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∈{2jR2a_*XGL8&?Uc8c(m0nU( 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

-;YJIigEmWdS{O5l!_J5>y{u}eD zgPn1JaRK;yV}EhYonQ7)y`^v#?x{*cC~Coo;Xf(9Ta8`D(SuDGMp%oUk$6S+4Z%^h z;I~=bIB+rcr@^&QVi5d-s}{*{2jC*6Li$%ZQB|aBss|i41TDrihf5BB{*)?5l=Y%tVFIAAk>%ZtZRrFt-#~{(%`P?pu<6(~ft5Vnq&hvJ7 zJtYw3jOp9e8Gpn1oq93<`S{8byhUqEUCMY|poX2HEq~MF5iwY}UOsQ{)Nt$VGkEP` z(QbfO4n07N>#+NpE9WW}(mXVIP*tRAyso{|ha!XdUSqLYy$hh>!j8^)w5+2RT(IBT373Rn0&xupj!5hhcJPR^3&0LIDw6vzzlX^W(15F;Y z2%F>5)YxnG!t~)r*%E8(n&K7ys(pIaH67BA|GCGZ z#V}`RF|46K)i4=SOT0&OJmYbCJ+M@#gA|1z=zsG}M%5fQT7{M7FN?jrG#7jMtf9BJ zi>Q(n%lei|Pfsj2j*1N$9fjvHeZzrmVX8AvSDwNmsl_cw7x4qkVkyF>VES&y zbTg)k=6$i!T}ANx$r4!U+sAMByCmH?U5EU*B%!T^mHJ>6Zwh$kbkV;~aSgM?tVmRi z&tqzd-=XR^&t#zH*}&7xW12-2ie+rx|CgC(|1Zq5jB_aCamLR4-7$OG zznMM%V&1$lJ^t0Sd3#^|yO#dnoX@b*rW*JU=gR+Vs^Cg%48QH}Z=dcq7g zzP2EV;wY0wli`sNrlyX{_ao6vF3PjIE;hoLH0O)a=4h%*51&(GEwgw1b5#G|TxtK> z7(IwjYx=**Q{aEg|IMgu%P>M_RB-T9W9tCg!EQlpV~MT7xKSRDC;xx*6b^pIN7p7k zGI@^E?f$VI>!GG2&-0eJn=Q(OZioLR8T9%ntHesMcEUW8Jq{Ni!& zdN{MZMl_`TR$+QC=VnL`4iAB}?2K)YKCS_0Y!SQ=vrek93sNg4NqB;>y=3e=k&TSy zhN{nqLUde+sw)K5U4%1OT_LFM8l+zjz60r`8rMV#%3lH+@feOD*Z3XM;DvaM^)C{0 zBXh|O(9puNp0MxbEHAf;hI7ZuMDc8XxZEqwe-I^;#pw#O(+Ynjt^0am0#+d!+|l4k(*vG#vZP4}s%+1EW=_%mv4Z^aawP62G_Q6x4=i z@Hke?%WiK{H{{jP+tfv>;vy9emnVvUr^02YRX?iVpuj0eT^c=7K33Q`OXr6)hb{^! zd;y^4UDnpMt;lt;vaz+`LrlM269H#x#LT30uI?`uuUn`)Shaht*4?dQfuHFrR_Ahi zbtu%3Z0oVshan*%*81{;XF6QKPYj9)BB^2_mk6=Ntsmv(V8G0HE-!MOT1WF5z-^;`srC>w`)x}9-6r>qy;j&$ob-Ivx+YBMctr&dcJt= zUK5U!-0MQx%iTp*i6>)g#F7=YT-S)7T>I%YV)eRikbVGFtP!uhTx2{Mizj27#5}iJ zuA9USXY5#&$6m0kpWY!xd3A#{*V4K!JH+{T7a42ST2t9ANjx0h8`Ack@O8v6k;b^~ zr>mH3jf$P&cGSvOe1qE|F(`9ImqTJF7(OKCX08dxU#zPO>4}vt^0?^aRng_RSnSnL z9~aw~)r8{@z{+tUmb%EZVvX&n=yF!vcJ$L{Md@ZW;W(&qT}XGA%p9>ToKp0xX9b0=I~msx5YNke)_i9V0VLblxJO++oHIqi+m);O|Ihp zNX+-F2kC9sK=VJ;Z#ePY;-2KZ0tTSQ*IgAyr0f3 zSGsqDbZ@h|F1clkW-c-t<Z&-T@xp@i}JiMA`td;%UTApEaegd7JK<6VQ4ts>e%Ml^*LPW^lTw8gBS|$5_?g?kS$3Tjg zDMD6u8{lC_NW6aFhcNT}RK(m6;is}S#~+TZIp>(?1c9?~g2*-hB6u~QPLOfJzF2p+=#G;sr$k!3zl~iYX>;kh_Yv)FY_{c`3@KOdBGp@Xe;7w2{Ux zm=;Vn#YCB98D;hTpLMofX5RPv-rw&-`Tw8iS!+G(zV_PtaP~SZ(Aa7b{HWe1dDFG< z6{iI&P8VwtHn~o3F!a-CT%8eYJ7!qU2tQi0Jdp!@NzMv1dCm$nZO#fbh0Y4k zd(5z0;JIDmxt$fRKk|jgSs~UVUb)1xxgyYvyduy{y&}*Yy&}+jy&{~j&9Gb%ywxu} zt_U=ndxTR8+PX*Rb}cAIS>}d+;n5?|?7hy%%uex}+rF~h*7iqkOai3Ok?Y;MSTE!#{ zvmrvH48nK@iNeesi`7KDv}v6hg~Z`Pgh-<$LZlXq5cvu%e%tRG3uYBkS$R>cyeL*) z6#TU~R)O&%tq$WwS{KHP9caMuBCQnT#n4CZgG?((q8MURWFb*Jf7G>ZqrqRJ1vAD# zhx(<94caoPgMIYSH(nj=r)f5O0_>^4G55Af35NXv^B}*ps#?h5g=`ZCMgG;EC($us3Uu zR|Z9E&*ih&wQ_62x)4tA!3j<>6g;Px~(mcM5gvYCvBaKn9(ipvwIgMT3vyF8bW(+&#D@fE@-AENKm>>`CD?!Gkltpe&>}%!r zK6+?RYN!W=4(cZvsD=Cu)I$CS^6V!q8-c&K3ns!_mI?jfE(7aa+>X-{x%;JG7J@5JocsjWfh48%VyZ+ScZ5R_5b7u@_7w&Z6 z_;%@9-yH+S^8zIrK23gUKnELu8Ix$Bk)CXz86z2JOw_UHjOIS+2KLxEYmT9BTv|Z7 z;iK3^0eObZp(_Fs#F4X}3lKEz?B43%`;(J;eV|g$zL7cLyG;k}j+yyyqM_u4)DQjlXfHi+kx%U^Xo1Kmcrf{c!0OlVUBI${6n^& zov_CRZQz|)Xh_#E+*&X+PO~%I)FsUfu4Dot{UxXl_*PK2RJpH-H9&qRs000XDX7=o z)8fos{|q|IUH3{4*Ew&yVCda$3BCl&pnkp5*193LT{6&)xC?0q1b0dK!7c10&*d1; zF$XcV4Aw2*J9KjJ74*tDYY$8rtWB7V9`#e6*mf$U$MEjHzlKN>HE+B0?5+<&1O*)d z`$zk}4+&PjSS*G5DR-iQK^=0pMz2Jt>2zFqeEZ-*f^r|u67^FDPF@4~g0+$*OEmFJ z>V3N^1|^8eJGKmRs0;bqhiP8)7&L04bY$7Wx+H7ekAr#)>FB>MX;_dtm=f3qrzwL% zWHftrjPKwaUZ*^cg&b*NnSwYoGb>q|vN}^1oQiGolEHShCw0wWKlM@o73Jjt7*Fc8 zK$1r#tsk7EzGtdr8>AjBbwz+v8jC|KoYE;^8U|OYJyrTPHBv~I=-y6HXoW}+hlcJH z{M46LtQl0UXM7@~Zm^(yQcAu1+KOX?oswx2`S}11TdLgl=nt@r;Fcw5*HYy~#t(yo zRTJc3HEr8wW>QnrG&UqyrQkdav@Vv%Xi3S#o!>YsxriJRCH;~$L5`CAADtj~$mPgv zt3)eWhun-y*KXr7(I%F0kJDO!F+~TN{hx5_?3bwEvaugq!w0(<`9?uwO zjgqX7l7~0K?3yD>9Whk2Y{r6qc- zBUpVF=Vv%2!VWob#Z*V4MC;%&9>*!&&+V)4pXzW*sW?o-Db2&N86EQ9xMdlR$;egd zSYfSQ(M%Nl984W@EP~sWk-1BdY@PpR=9F&YxVDp0`ueSo7U}YyCmd&ZUC;0~Xp!hT zMj4-RoJGbfSetkvqaB6&VHnw|6%!?D(GK|xhH5Hi*$T8%HAX{+9DuGV($u7^i;n98 z4Z|AMJEO~Sfjhb&(M9Njv?=rlSYFLnhF;=!EGdg_8%hIn{m>p*GT3!sxX^~Pb@vUu z$z=)aUAT}XzOZ+;?@qOF{f(i=f!K+wOK}+IadpN6Dlj1(PZ(s4qMlY)CJh|c!)w_` zrds;T)T4c5s$ZB)%X0+mxXkeB#=u;R`9%@A%8k+%-wt(Xcy5HCX3j2)$da>Twnij# z7j&n15Ee{SV14#$a74R-R9>tub?Y>*;ZEtJX_c%Ob#0SUdC}7pXU&?yF>;;vhT-Yl zPmbF+#G2#GS7_K|pBtNyRa>fX!GIB~foC-J) z(@#A*;=U0{#->r4lw_<*Dj1PsoPZgeW^`Z@rWxr$jZ=9ie)9;E@o&?1BJC`j3piAD zjmVNGSmx`2}wMkoLmo!06Qg-KC!;+Ln;BIN; zP+UvJ`~`J`P3-2V)6V0@RU`0338`Q=hK9@-)uw^cMztFUP8)}S(2&eg2jq+Y? zbdw$C@?kC?4%QS}>MQf5G<> zcXx%?`wDNfEa}OW4bi#ET+9eTeHDusuym?JP!BA+8GVdjsJhhs(}s-hkpn949(`TL z`u_pzMuV&!-EEwCfAQ#CrDX7S$d9br1B^xXH+eP^=190;1rF+$Dvf{aQzn>F)=eGL z!zW~i!E5YksgFWKxCd8_NI@`ty6e0s$lD*y9Mfy04M?w%HXT>s4WYmc?6PJ(s@8K)~K}j&8)XLv+RuE=6wS=6FaX`)W=dqORt)Q*kMUwi;w8p?BHOWfxJ? zoU?T-P0`hnS#r+`+AS8YKMzY-Zef@|ir#`viled{MJ-(aJa(8q-+f}-R_;33M2}jx@+_mI zK96>>)9k?!S3{fe)VGO6NzY_-F(=|=u-)7#$@|AUP5gd{+dI_T7vO|m)8>`4eUo5m zlT7Nn^#fwlOwrECSb39Xg-i}?lcp^i982hoEmcNN&IoK)wqeJYt5lD@8GC@cKENCQ zFyt0iWO`#>XD4)dPN z<)zyRbj9VGW*)AOJHYK{_0ZOaFUO{tW|?tyFjeozfvu(`c)Rv7o>`h{Uut7uf$8g& zIOfzun@N-UAr8mMH67O)y2rMOiyEGR)8hRv_+C(Y`k#+G%S(ER51g~y#U-9ikwLLc zm{4R$O`SR+OWs-Eh>g@EM;m>Q@tDVWoH`US)qaIn;I#T~(Vr(Yz(Nl(X#nCq;&`-v z+%(yGb;5P!s}OB*{7t2=$6DYvj_0gvg&a4iG%dAquC$47Od6KhCMFD>k+@a29Nbx+ zxSPudI3DJ8J;t*?snXo-H4Q)fz@(EZ&F0-`*hry8Pdj0B>!h=Kp=q>Vz|;zue1@kz ztI~vQ6Q6i!WB3J4Pq6mrn#q^Ad{(77n#?mu=B^KOM{VNOy&+TDaBn+&N{1=1;m#>n zczlz&+B0=x50|fV>`@%)w0&;M$Oyd2EfN-NEXExBaP;SxV9@pl>`k(p{}qEdz)cax z-A8d$ABGPekSKX2f4w`3+Z|@IIDwmzlenB@F2#;4h07`C1qm&_X^?A@)6DPpCwVzA z#T=pSK>XR7E7^pi;KM0(G!B9?smesc&$aqT5U}m`BgsYFkx88nxd0;oAB30=tUHF# zr>37sE;T3be!;iKoU^+*d8hfYc`x{mN3rnXgLw$#7@ju99B{D3H<8;DjkNT}n0?Ft zo;)6Mq(G0E;M1_=UOHVkaQi=!JJiVww6@S>o*7W(3xmXU@5qOqT@1 z)B?1}>c|46VyAg(7%m2HV+qRJ+)^W27 zEz!*7X7gL9eY1JoJi=Jl1KQNnJRr>!mV0S>nyK=!>(g^hlMfs3-DxUVU;{o87I|;F zk%n8kkp^12akw()-W+bp;g%e3$wT&$LLRs0aeJ4E?sy7~G@eeP@gwoTGAwss$_5^1 z1COI!$GF{=(q?9R_NMsrLFdm0oxe)i_^WiiD(5xZ${qQ`(WIE&yqykk`(cj9IG*Hj zav<-Tk@=8@O8$aK=avKhAQzz#Uz{ zMsZQVCGPqP#~$9i9rANS;(Q{w+^l@`=%1Zwe8i-gvdpU^(@b&Bxq;V>VYyGFX33S0 z9Z$V!tbFW=R0(mygkM|yOwTiW%{3GE&go!F^AFAGGSfb_*W5KD zgVhMdJI4uK(zu77nq#+Q4t;7)m$Yl(^K;sjF~h5cc4Zn)%xqUa%Xk%*A2Zs3g`p$n zwkux_9zD0$9J?HklQtl;w*w1JnM1o+yF!mr3XpL!A|0DK6F4+#9&mJ2CK3c?X0RgK zFwJe3{<3cU++fRqhfC+SiT@n6b#6H?dX44j)sG|oib`xQ;D@rOY83IxG;l1koSb)l zZU@;l)}d^j|K40DUmPUN(H7iRezf=U+^wdb)NkgVWslD2DpTDwH3b(tUDwHb|^lCdnU%RFQL{b_#6(~eUi?NZ&);zdkpkZdY;KWCISnv#9GMWu;fl5Bzw0+7QyO{BSxQ? zn=A!XzB2!cNlRb<&io$KU{OGii7uvHeEfGwbh>GZg-(tMw)F0k(y#Nn-sE+aFt)>m zVC$Ogk?B@5wLu>;*B_eIs)hL?JYTl?u0)H!n!C7L99#-R+Yyjh=uKnE%Vhm7x;xFnb$j&*E`)z zOKiHC7AvR8_*k3dG}VOvu&}^7*@tE1aGwR%G#~$rB2+ITqW~D4;WWJ!ewUV!hf+ie zPE&n2cG^7Z29D*xdFe6ovHK5a#K=jbk7smYkJOT}m50*(&086}A+KOHaOb?Og?G>a zUZ5CjbA3cDb`pc(8jsSy*adpzHuZoQ|rLP-up5;@PPNe%v@y( z_SkJw4WlnNC&il9IPKWpzoJz_UEd4!Qr~`0U*ZJvCkple`))i16(JCBiNyxIMHt2?$W+uy9wvserS>>W_FkK zP5(86d(8`1&dj;M$I2z%1}PT$+^C&@dK7F~rjeqM$*B^WI68PF6USi7_6Hu#X}7)? zbtI<^J^iPgE4;?Rmb97w%#jS#1wGv2z$*E3&UG%gD|AccR0-Sp$4$W&k{ujVIGV&A zBelTA9oFNE!WW-r@%<+)PT}iwJLc}(#pEsnNF9`7nH~M6X!01evURZ?OLYsgtKX)+ zx%ei}tQW=lbg|$;C~*%d((t%9#SW#rsCbD3_Od0Cg$mlP%&Mzh(xLp*zHf=sqrLVK zZHbj9i1GLerXmXkSS_?P_JMr`ke8<`Q9<8UzeF& zcU#%|V)(g;jN28GJ2)0uNKTPnx(inXY0Z>3#Uu|;thri}$M|W=(iD$w+~}rw4689r zP4hTiZ-u1}OKF;YJ&oF3JFSxdt-3+;Jg#N+quk{YCq58YT= z@{kN%^hbGyE$>jmG#pdvr`&_jt=cVg>U)&pxV#WGxN6_PYarNu!RL4zEVOi(Y`9V^Z#23Nf4tmedn5w|H5aD6;9Jh? z-DQ4o!sNVmOR&8V=(KOh>owEq>|JIfUq$}3d^2`XA1v2sYd}Y{_nPTQc0Xz9&=y}m zX&M%pV16ZZ0N0LAvCygLDHb{nJ=l`!k2BGgZ>nit&{5_o7COQ_#X?7y)2Efs<=btq z4zIsIMLM+g!~5H$b+}V-@QZS<;bPP=-!^>a8?n-1i9Qsmt@J}Z;#O|8(B+5jg3&ip zW$xwM@F6kI5O+#5aay=jdXHl%P5^gGZ8&<{Db@2230}rY+fM0kI5*oVt;g_mN(a`H zyq(8c&qLSa#BHZk%i|RB=VaS(mbO#+6td=&e&$Mg7A0Pdv$CDiew>Q!lp=8&wo{sf zQ?Q-V``NrGIM~`LeT^f^ol-Flt9D9NIHcMs9l_z$PD#eO(@rS}=S@4MwOoD(@^0Q8 z2RI()gYg*eO6)Lj!gLp2-$EqOanoIrchKJp9B2<*KyCCOuuJ-MSVuvEjn;6JB|r0{ zf|Ksvm2L|(uByYZ3SZR#Z1FvVeNh*7JDZ)GS9LIYzSS*FUG~cA79Rf$$Fm%hr0j}s zRwqfT2+i8cgcp31%)4;+T44Ga1Ej#@NTUnPrrOPGE?DT&e2j0oPI8O^;)#^_c16vG zQlVzk!3~!zbk)zY(MRoxX1bb~EbW0G66^2K65%XeY)Ig~dpwSJZtcbqFOu$`Oo_u?+|RupKfg|2K@ zEOZ6CV&PXX+zWVa?BR9lV4o(3Y%E2~;f{dgPL6dP8#p!s+obC}zQeS5_#Ik@@^zlp z;(MG2H*-8~%N+W+)(-hLsRP)q-9!THT&2kgKR~86T*7J}j=#=mPr|c(aeVotk{I`& z4@#!W86{ThlwBDm-L^^h=9MH#k3Uvc(r%+oSi4QYL+J!Dxa!Ld3F7tSFE^0?omxqa zanBNGX^rvy8RJT?+1ht~y!@K&Y{598#@Ib$oIro?gAd1f;RH`AN*|uRKgTeR^m+LH z(q0=~-vm#>E<>sEAuNUK=LA!#Il(nX^TN`3I>J?n%y%eKY3FWcQl@3 zB1ekaj0C;g-`JE4xrIeosS8peM+(VSY6-h1T^rMRd_TCWEz5ySw`OOSTqw)q_7v&E zf!(mvzlL^_FKz`7zsAspn^hd@CqsKt(xsO?QK_6$!}L{U<0pD}s&tr_3m6@T8N-8e!kh z@%f6Ko_z+r2HaZ_TzSk&yTUfaiK#5K;^Q=IJFUk@C0BNP9v?Lqrr@e|l_nNkRRN>} z>;$i4Q+8FFyxwrsA@o%Koak!u+Wiph1O^12UK)>K0E(hrJvU+ z#P9a3n|}py-kE=`GT5tUf>_nz`NVvs>Ljl~ixv03K~)Z~FQ*KvIs;Q&Rg4#n(l+ic z#p`S`9x!=1*8Qa_%j;DB->Oo)j>KfJEH9siOI&_~owc6v5QSVXuki1xE?D23uU6-J zZCZ25n`H0mou035a#Ua9H7@n~esx0i6`pa8*Bv1cvbOTVt8( zI(Gzrm;2>%5B7!i%jMoI#^ZU(#*#cPW_qxx9ziQ?*pE%kvaxQD1x_Qo=8?_3*|&&e zWIuU?_V;FjjbxLJ>>gaU+sN(<*_%1IWjI2OESh61(1XpgU0mhO(h%yw7TYdrt8DC? z&3B%WU4Y5P-r@55Ji#UI?lO1OX&VC9U0l9mdvmFgeP%lk?6JKA{K|F_c-{69@O#@8 z;7!}(p&rb`lPZ?$NuJkuQpJiqsbUqLQ?rm3b`6O=L;EAKCprDz^P{CU#=PcfHYRzk z0D5>)?R~wdmVRDT<6tkUWjJITi|~5C#K?y8P$v(K=Aki=z1dW5NkOOwrqPodJy<@_ zo3-;$Upu^MEXYo-!=c#NN_)i?8!NQ$18%Ti1(w*^RvRm~JAu{q9N<=a9dL*JE#PkZ z7r=dXYpsnPut(Q=vr=!$xPoI1$2yJ&IW}3pnO;Ea13?V+F?=jOl?sD_!J8@BIBY_?|J}t$$V5-{9c^4}L7Lrom4d>MRlC z#%8lS2QYT$*b^Hw!IVq3&ShWbVY$oxXM-!LEOPDxh5&bhP@Ns%Es@zQ zN#|Uh%fPRWTUAw~>xaOUQ6uTDYkxKbYkRA@^+4i##;kZi2y{m>fKQE|QDXv=^B~>s z(Dis-zfAX^C9pD;@+x8t{;AY_?}T?{`J7C5KfJMeRCTR$Y$L-8-m;g zF@d*4_F3!TywLS(lOf!(C345wGCe{K4|rv5gRVDn{kyeo#4h^_hJJoj0eqi^*Iojj zV&|C&yv3D(V2p`u7Ow{UyiLx9NJf&ZZEzzc4Um>(KQ? z@Gw@wl0ulqGt7d4dM8(pP@{9B&TTq(>ud^jJ9co6T$iMC7MT0d!)tVI)cFjU3eu+Q zS3)t)s3hIG!4#%DCUzAx8v@bX+3Yk_^4q2d6W=pt{kksQ-c5E_bF*QLMuW68+#S6^ z=SDDhqw8(D-lgl^x^BW(zPAKqGY2uU8Q(YaCQw%-`-i3D9RP$zNiWo@ah*Kqy2wGF!7$aS=f&fSAGcLt^*dJS|= z(m4lA9gwT*Mf7wuA zQ?B5RL3et%E}k`nxTJH2v6_UhZ&JyFz?4C-&SAPeUe^Ky9e7_gypojd<7@F_N61H&s#s60VB2ZLd6`tdD8mY{@{ z^J>gHZ@9yC;JhJ7l`42KT&K<(f?Ze68`fz#RTL$gmFwIICWoxr&80fm*SPftFfFpJ zx_(;MyL1*dyTcoFKCN??&TNa@j{t@ruc{#35bQR%K5sW9sEOO% z-nl{zn4@zi80BRh68E4VCj*z%ya+~M(W zVFfOW%vzoaLs?|`@)FKBmUnVa&8t68_HB8soSX7kJLy7x$=l>$LVoApiQmp=_#PUq zJVC^f&)gr+`HTBYI6GFfa(-z=Cuj8HJLG5H%Aj|!VvxW(h!3p{xvk&mot<^1)U zl8@aJg?)l_nAP!M8o%-XBtK!f#G%;gX!YDMK9_hH46R&Wo=Z#-I=Nn*OH4ZZlrnle zmzd%QaXt1vVhWGvx|=CHQ`dljRW zc&Bb>Uy!4hRuEIVAg;TaXAGUjSiBydsq4hUG$d&Kh8*-QAf^PJU>bbHq_gX!KUF}? zGvIn_L6EM;gLwsXF44JO=T@DAzNNvcZ6qc?C1A||k5`dEhI(*WWWUwKq<3;XaWygN z>^lliUrkJU5Z5=XCMG?e>-$#|lb*?SsgRiT5-<&JV$$os<2$fXg%G%*l}DIWNK6qr z!8GcLBcZb!q`z25OyNOXm)8(ecs$qR)(}&8rp_fgw^BG}LnoN8=HF{>A?SO3dg#o0 z^$c__(Yapd%pctGOLT6%#Xq|3ojTY5?ABX#4iW_SG}JjWSacgobPh7O^-i6c?*yavYQ4pFx8A99khh-BRr{eKPz&;bD*BhlbDmmW0;Xnf)wz@GaL4-S zZggh8Zaqlnc%4~afp1NSu{Eg-(sg3e<8_@Fx>i}D8;B`Fy{;3J-m2@wq<88%G3l(I zo*|g@AYCUWJzm#|Nzc@E;txb^LS>0=Af^cQx=zd;+(x{&DpTirom+Jd@^gpB>s+F9 zz0R#Vck0agyWtuL&4qG|kipW^pLp3sE z;|IJb;W^F1Zw1EIFMJnr-I0sHb3SCr=W*OI-x&A^?0YyK<1t_3XgbFeJQR}Uy85x< zhPHm6WMFJ(wh@>&!UK3?vK?5z<|eRzlsCK#EF$|Tj?X;wFEe9*-E|e{y5}2U|Nev< zM-panoRvcIIF8TzlmDh9vQ!ihF6209HOXE0<{N@<3?O_ZkW7=fW&2*ToDbm^FG6=V z{!Wr#A3^AL^#979D)T>P@2^qtjRAzO1U}|P*^~VH?Ej~XzbX%~Gxp3wZ+ri-J>Gnj zik|D0=)>3}9N+OIc|k43ceinWo{JI^s`=hBsq?yjl^Y*^vF|PWYk7P6-I7P~dSBj8 zwRby8kN8b4ty_HCE&Ic{zJ9mlmqz~7xbM4>-xjP?}{5lmC;!8 z0dn#Dm~nUt@;=9(Il7bmZ?c(EN3G?q*-yN#RI~qG#WZ(A{b&8$C4G+9%v}_BGj{QI z`n~1JNu>d|YI!1_DpSVsj(U<;aQw#vl6}(&Q+a4d7ReDBSIitk4{g9RtLTb*@qj5W zz1)fB8dMGRN}|c;&ho~AZrqr= zpFv1D~B)0Gu4P z7PyNKx`ENfkn^We#=i|xjQ`soqw>D%Q-M(^$Yj;DgeB@!^ z!QfDgc6Skf@A~qc^$1-VeiY~~y1Rvv!Zs{rY=6ThV8)PY;MgJCfZVRJx=F22EWFXi z^JdK6n*0D`6B}j#-Su|YcxoV(-CaL-&35n!`K8x##EiBRUSCdA(LEtQT2ArZ)AG=; zeFzPl`UtRtkFCDEE49WQ6v^Em?q(UYh%CRK!G$V0J;Imd-w#Rm+_A<`{2j9>PT$#t z&zcFvjfBDmLa$=NPuCNsaCy{&B*$qy(i9%)l}s{4W)VKY@m-nZl?tI}4rQ}z1i58Zqv1;~q)bTebhbscU#s|KFSU z|K70fcKvOj-C7NQ-<=8&T$jD5j42R}k`J(m}7dFxQJ#4tj)2X{3zw=#Gu z1&kX+*}OlK^Qo2kFkN14cYcNfy*lwrV8x{Cz~PCZW#~jcb=_CIVFSs7 z&nyS*q1%Q7^9~Ufat}A_#zOvK`2$Qx(>Bjxz13;0jQ$B}W1QgkNL9e;Rsp0c^4?+4+~=go!}bATe7s}?{`1LBazdFpB?^MN8u zSJyyZ02J9mbuHu!pvW@SBFI@lku6pq1m>y5u;c?pcE3uUxB@7$m1-&E0-(rNsb!E? z14UM-RzO|@6xjo6738%*%s5T0fl>s-lvB4reh`Q$r`AF)24c#o+aYT}OgVKYPsLy#W=ifp%f1o9rB$o8s_Lv{g0woh$@Tn7}{!|GFz_X9PU zSD%6W1Q3%`Jr4OPASR@Gf*S1&^?8`y1Y*RhO~4Md8J3Gcj8*j%@RIrx@Ur>}@I&=9 zLO%kEtW$jz*rmP({8)V*_=VaA{8D`rcvU?I{7U^B@ETrDC$g{AzXQKj-+_nkfEfQb z)c0T#jU7OP@dE@%K#`e@mm!;hBJ(kR1i24TWWL5O-~i*tz(C_Cum=J0rg7t^kVAkX z3pI8_4g-oT-1s@!o%OoIXf$=BcbmK3u+zS+0ic!FmzZpQ0%`_SyrvgPb%P2#h z4aE4LV^pEc1&Vn4fC=(EpvdMMEs)cJI9|@^0eK-%WEn|7Xd}K+UNth z5Quk)8+{=^0L1&$js1Y@jDEl(;{e##1CgF*d36svGI_vvxW9oY}eT;`#Zq(_D`FlW$8gt^GzR^9-e-8`i%5{q+d(# zv*4)(e_L>Q!M=r0Eqr;QXU5Eof{gVUH5sQfW@OIIT%EZ+^JwNXnK4=Cvodp*eR1{YtM{yVeZ$D&{@O-|c1`mtnOjm+T3Px~>CjEZn`$??HuY{YmQ|F! zS=L$hcKOBfsEU$`ixnSN^i&M1v{m)18eR2e)h|_%)l;gER3ERtRQ*}?57m)157tC) zp1FDc<`bJ=*?e_#S8e$`ku8%XY?=&sH1q_!^%IFl57@ErpE-mAdlL6&?r57x;6JP8 z6WxmFmg^(`-G;Za?)gt!u?w#k^NCIUkLYH0VlzcI5$Hc=_NN#Uf1j1WWLFBgDEwM7cq={U2i6i%MR{?!t;E#;7gN&kDX2S$r{h5$*uwsMj-xBdCd0|CA0M{pE|SUZ zPS=knX`o{r_wmP~j$B2N{%9+9C74nCZeALh!hiiaQbHp6-1@8Sy#f+{@4}yjxLaT} zZvg}I|FvM@?6Cp!|Mvrk-ID1}4iE%3+a@8NFe-=m-6-KJgsk2;!J zJ#UEL7Z6M3uzzd$}!yQ2)UWY!Zoo?3FuQ?H0-B z&ZE51{utEBJMs5<`Lh*=e{;uJJoeEq3N-3*yVo?>D&-rrr*6mHCcB%t_$WH0^AVjN z=j_EAb$&|cr*(dYGh@dY`C;sY&d+o9Vof?X>wHS**YxzBcL|iS7Yh~K4!*?KlgZH! zI#=1 zILk8J;Sky~=3Dw$PZ;}Hy}Z|F+VJZT>N0c1`pl(jedcycedbPtJA{c@KdO&P4&hQ( zuITi!7@p6u7*65$G=5*t@sQpJcjEUNWS_+rgWuv|*4Gx-$|shb)5Ob5W~p12{iyC< zHcNeSnL~I5{Qj~N#;#>{%Z+8{tlqiv%}Gff(uBNdk5l;$;nS7pL{^}&DXZoi`dH72 z7gjrjE340meXMUveXOsGJ;i(2?He^#v~dr+ve83|)aIM-(%v*ZtT_b#l3X#oB-*Bx z%s2a#dPwt2H4mv2!nV>hTVv@tv1-!?hC`c97@yvxF+({r!Jjt#3%|oEp0Z7^@ba#z zu;JIoGq1WIeg}F^uNdfgy*d_hrG0uurTu!fm-qP1HvCTVEZIB-zq9Z=2fr^Mya6ql z>-nO(+;d}XzUS`R0?*y9MqjB)c~TjKJCmldeWhomkUJCZjF~iQ^zey^&cxwS(J_g` z6Glgm8J>_ZYUJp|F_T6|O>Fw4zx1Ba)a5U|?`=q3mD}{^5z?c#H$AvedRT56mLp9R z)ftN?uF1{IXRy0 zPUP8=Q`Id)9sog>GL9XWZl z>$8`n;PC%V%wpGwm!)VgL&WL#eux{BR6S&*sc31T+*J6o^!fazy#Dej&sZPTVDt4Z z-6?oi3BLByMq*2laLeRjyd@cLg_`k6r?0m!MRYlb%2S(u94dQAz8+?Lz-hB@T8#fl zlp>m*JP(`GY!9ud#M`Uw7@Bk5rUm2U+3U$i>=a^MPmGs`@W7@Eat*K}g^k=KmHm-z7|t2M7hOffMA|q+FXCB%&y}Hn>D=o2(MaLzs6- zxdaR%u_~8iKGmk&O3g{Vz_a10AiEAtkoPLZ)F`E{3Gwm--(q)dig|5H-AbwJp?Epm zQOwF$b>Ps~B=Rs@V(G=V!Z z?_E9JT?ulyR%KxW8dypin46ruF*i9e9Nbn5qgJ4Sz3B@wlHhb3s}8zaCdz?c z4KN=OyvxpeS2czSEYKBvm)y^_y;f3O#yjOZ%sh-bpwX3lryRfdX-pSnBYOETIY_Yi zFcl7ti#8kif1Vs6)H~mYVW8Pdy6k1GD4M5CYIJn|eWf&^CAliQMd6)xiHZ@}bl~rEJ3<4rs)LwpX1K zY?!7*CbQ@kY$kl?0{!r`VDk&YkS;mxUDYwrhJO$TdRJY>?>nBDegnO=-wZZ}iP|<$ zMqnGlWh2i674D)6qvqucbfK!71l~{ANTM=*You=Lr8Xjg8VegANIZs#Dj$x?^%Gi> zGq1u=vPQH0C;V}TvU1gm!WG%S;DZE;3kNhHjSOkN#ed%EW#_34kh31cMs0~!(j&`E z6#f0F-w;PZ6L?pB!qe$gEu&2ZFMBmsQk0bZs~S3kEO119>$Y03D)L-!WnArHPz96q zmKh1`x-0vyi3~w_iH_Tw9j?%mCVp%qR{wp&5PHK-tqv5CfQZ zb+jJiR<~BiYVLlmj-`IpaT1o~>Lk51w~Z7<@9Igsd;u(gYMTUK0RmsEsl3#;)d|$& z)d}8ZoqdsjVukZqzeeZfuAYhrR4XTEKDdq;QUHXyW0_K1qPYD z>Lt3SfS-2x-X%wC`S5*(EZ)@xZd&7};{HJjj1}(XeN&CS{_d`)gZ5H5n% zd#G5{rGJRTTWgKqNYNdIH>kU*Z1(C>JY=WkFw8e6$x*x=Z}tt6sKEc;Bz@2r|IrSXAiZE{0e5>g@Y?=+V!b6B zg#Ym1Zb^44TUEoYmb{6Ublr2eJjd&Z93&bIM(k&dHlw}zNYit7%Uwdi^J%cVGYOvlTHyxjb zhigr?d*uUfnV!H+B|SZOqUl6{QXvRqn__~LdxV)|@n_ac@Hx_0{M}j>8^xt)Xk%D3 zTg03Q%VIe!3jbnY%Yt<@j@!&ejIrFF4f`k-iGLKHgETR&_kxueWMB`$r!@ZufN=D5 diff --git a/App/HiUniNc.dll b/App/HiUniNc.dll index a27fbecea71c5bee0b98c02c69f2c6ba3705640e..c945af9dee324fe85fb33da333f907d25522b9ea 100644 GIT binary patch delta 396 zcma)1F-yZx5WbfdMY_232S`PPlJee5-phNNNz)829UO`{J(6_P$-N>%g^F6l2zGRJ zY9*74Ah-!4(!nkwA_z_{I(Z82-f{Qcecy4%bw;JmsC3XRu3c^JZ}l#EqiF zUiu=c)6hq~-mqOIs2%vcVXHu?AdCXP&fTmzA#?wmJerWD+1K}}kH^C9^3L08@9t&s zD}SDl>jf=q6hIK5PL0)=E33wHjWSN^D4m*i!kwheh0rn6CN+jLL3u2_l;=-H>*jW* zkAD{M-+n&4w>}Ax`T2v@A}bQAV88IPYc WEJch#;+_iWD9wCz#UK zDv_-OL4|Z_MAD=Yf5J*Pg1rxhnfGSkF@t$wFfUw=^WR5pGn_n3aD0ntR-9r`9Kqk1 z(njR~;X2b(Y~sYsrg*be;-Ltnq>&p$Ds;K1$8K2jrAzBHq}7lJ=9#lQd{p}$@%$)| z+?6#MyWA(ftD-7(C6zo5JQ_0|XU#S4{V#d7#^c@7<>AGU>@-IEi}uUYbHjYD@%11O z6#^g-2&>Qv<)W-)M^h#RO=#EWiB^4&DMk{V5H4k(OHCN(J!(Gk&SJTp+MYSvH#M_2 z=L=Do`*){>Cj!c#KtcyJP+(RG%ZWu7eBf4T>-WL4p0Xgnm&7u+S!taOYr8Y6IP`#K Nt(6nl2kFW=#~)2;V|xGq diff --git a/App/en/HiGeom.resources.dll b/App/en/HiGeom.resources.dll index 4d48d57494fa552f7f85fc7440bfd51ccaf35909..09c1e916b54ce9026498fa8d3b1efebd650498d3 100644 GIT binary patch delta 232 zcmW-XJxT;Y5QSgwxVVbS7|0%A*Jxp=>YkaNHW2&?H1-5d&1~WU40mA?0|Q|Nb8`{t z19${C^Ag@bP)qr!qQ3WPIbBZgZ#PDVCtt63r+yZPApOBVicDqo7dS^4}%OqpB}dl z28Pq~&ca+VX7C8;bl0#-gBAjYQ|9WG8vT#grqd*-)rctdL)1z6yQ3m-tHoXzG73=I L&(BRV`H%Sp+RrqZ delta 232 zcmW-YF=_%q7=_=siYSR}3QrI_Vfklv-E|<922zVBn000v2^Jo}Wh;vm0gL1aX)I)} zVDAZX0~;@(`6CY=@BQEVt3fsR+&1(6_IUW1M4}F-=&=#cekbGA?DAIqG{4vH)0f@3 zb=8y*FcP3Nk%>%cC`()9o}4q;BKN+q+AE#8)EKQ4*}`Z^rFRsb+smj^Lm&cBhp%qG zAt>x0HeyZ~LZXC4fgBzL$1=#UxOdNY3(Z8aXUtNjhO=VP{qMg?&LyuLXt(L<79jzJ Lr}$L_5#Pign3^_I diff --git a/App/en/HiMech.resources.dll b/App/en/HiMech.resources.dll index 914b29e8d4363be7fa47b7f608e0e91764b90ce8..62701b27b4f3cf555974c27edc9e69e2b8595222 100644 GIT binary patch delta 231 zcmZorX;7Ka!SXDlVfMxzCuYWJo6j?gG6`56V&Gzv&vV$njrFS5T84X+p85s# zQqod4PiOzm#5s+Dk%5_kfnnO_>0Hm5m`xcBHaGItGKK;f4B8B-43-Rr42eLt84xD| zc_|EO49P&42xJ*Bm;gmU;vm`_NSgs!NkC`{W?2B$ngV%-K(!!!sgr~G&B0dm@)t7! E07C&bWB>pF delta 231 zcmZorX;7Ka!QvOP?Z?I*CuYW}o6j?gG6~$gGtd4+yqasv-NPjpKiaO?{Dn1>(aOY9 z&wzo!l##)}SkF+;(8N+ZEy>c@#L~djDA~-?+}I$|#M~q~)y&W!(K0o~$N~fn6HUyL zEjLeR|IWlYm4T6gnSp^}>gMTO&zYD_7%Vq8^42nj0vQb23~3BWK-!oA#4}(pWiVn$ zW-tS?&4FSD42eK-b0AJ;NCk=-f<-KW>=d9n3ph3et1|

Extension Methods
+ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeExportExtensions.html b/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeExportExtensions.html new file mode 100644 index 00000000..0e85f0ea --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.CubeTreeExportExtensions.html @@ -0,0 +1,223 @@ + + + + + Class CubeTreeExportExtensions | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class CubeTreeExportExtensions +

+ +
+
Namespace
Hi.Cbtr
+
Assembly
HiCbtr.dll
+
+ +

Mesh export helpers for CubeTree.

+
+
+ +
+
public static class CubeTreeExportExtensions
+
+ + + + +
+
Inheritance
+
+ +
CubeTreeExportExtensions
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ ToStl(CubeTree, double) + +

+ +

Builds an Stl from the cube tree's surface triangles. +Per-triangle face normals are rebuilt before returning.

+
+
+ +
+
public static Stl ToStl(this CubeTree cubeTree, double resolution = 0)
+
+ +

Parameters

+
+
cubeTree CubeTree
+

Source cube tree.

+
+
resolution double
+

Preferred resolution; 0 keeps the cube tree's default.

+
+
+ +

Returns

+
+
Stl
+

STL containing triangles with rebuilt face normals.

+
+
+ + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.html b/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.html index 9ee4d1bc..c69db8e0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Cbtr.html @@ -128,6 +128,11 @@ including both defect data and visualization drawings.

CubeTree.InfNodeInfo

Info for a single node with inf edge_cuts, containing box and edge indices.

+
+
+
+
CubeTreeExportExtensions
+

Mesh export helpers for CubeTree.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html index 9b89b3ef..9d5c4c05 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.AnchoredCollidablePair.html @@ -277,7 +277,8 @@ Class AnchoredCollidablePair

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional resources for initialization.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html index 67f34878..f44404bf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Collision.CollisionIndexPair.html @@ -238,7 +238,8 @@ Class CollisionIndexPair

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional resources for initialization.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html index 7854debd..b938ed26 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.DictionaryColorGuide.html @@ -270,7 +270,8 @@ Class DictionaryColorGuide

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
colorGuideCtorArgDictionary Dictionary<string, object>

Dictionary containing constructor arguments for color guides.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html index fd6c4712..48896ce3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Coloring.FilteredColorGuide.html @@ -237,7 +237,8 @@ Class FilteredColorGuide

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
colorGuideCtorArgDictionary Dictionary<string, object>

Dictionary containing constructor arguments for color guides.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndex.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndex.html index f29b5ba5..e48f6374 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndex.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndex.html @@ -701,7 +701,8 @@ Start on 0.

-
+

Returns true when both operands point to the same position, treating two null references as equal.

+
@@ -739,7 +740,8 @@ Start on 0.

-
+

Returns true when left orders after right; a null left is never after any value.

+
@@ -777,7 +779,8 @@ Start on 0.

-
+

Returns true when left orders at or after right; treats two null references as equal.

+
@@ -815,7 +818,8 @@ Start on 0.

-
+

Returns true when the operands point to different positions. Inverse of operator ==(FileLineCharIndex, FileLineCharIndex).

+
@@ -853,7 +857,8 @@ Start on 0.

-
+

Returns true when left orders before right; a null left is treated as the lowest position.

+
@@ -891,7 +896,8 @@ Start on 0.

-
+

Returns true when left orders at or before right; a null left is always at-or-before any value.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndexSegment.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndexSegment.html index 1e1718d2..4ca4ff36 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndexSegment.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.FileLines.FileLineCharIndexSegment.html @@ -280,7 +280,9 @@ with specified begin and end positions.

-
+

Initializes a new instance that spans the entire indexedFileLine +— from its first character to one past its last character.

+
@@ -290,7 +292,8 @@ with specified begin and end positions.

Parameters

indexedFileLine IIndexedFileLine
-
+

The file line whose full extent the segment should cover.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.Messages.ActionProgress-1.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.Messages.ActionProgress-1.html index 723b3c06..8fe24225 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.Messages.ActionProgress-1.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.Messages.ActionProgress-1.html @@ -199,7 +199,8 @@ and invokes the handler synchronously on the caller's thread.

-
+

Initializes a new instance that forwards each reported value to handler.

+
@@ -209,7 +210,8 @@ and invokes the handler synchronously on the caller's thread.

Parameters

handler Action<T>
-
+

Delegate invoked synchronously by Report(T).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.PacePlayer.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.PacePlayer.html index c6f5f0fc..eb7963ab 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.PacePlayer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.PacePlayer.html @@ -191,7 +191,8 @@ Class PacePlayer -
+

Initializes a new instance with the specified logger for exception reporting.

+
@@ -201,7 +202,8 @@ Class PacePlayer

Parameters

logger ILogger
-
+

Logger used by the player to report exceptions raised during pace execution.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.ProjectApiVersion.html b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.ProjectApiVersion.html index 77e3c10d..c3036f09 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.ProjectApiVersion.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Common.XmlUtils.ProjectApiVersion.html @@ -188,7 +188,8 @@ Consumers retrieve it with res?.OfType<ProjectApiVersion>().FirstOrD -
+

Initializes a new instance carrying the specified version.

+
@@ -198,7 +199,8 @@ Consumers retrieve it with res?.OfType<ProjectApiVersion>().FirstOrD

Parameters

version Version
-
+

API version read from the project XML; may be null when the source file did not record a version.

+
@@ -223,7 +225,8 @@ Consumers retrieve it with res?.OfType<ProjectApiVersion>().FirstOrD -
+

API version stamped on the source project file at save time.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.ObjUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.ObjUtil.html new file mode 100644 index 00000000..2d25cfb1 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.ObjUtil.html @@ -0,0 +1,221 @@ + + + + + Class ObjUtil | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class ObjUtil +

+ +
+
Namespace
Hi.Geom
+
Assembly
HiGeom.dll
+
+ +

Wavefront OBJ writer for RGB-coloured triangle buffers.

+
+
+ +
+
public static class ObjUtil
+
+ + + + +
+
Inheritance
+
+ +
ObjUtil
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ WriteText(string, double[]) + +

+ +

Write a stride-15 RGB-triangle buffer as Wavefront OBJ text with the +per-vertex colour extension (v x y z r g b). Triangle vertices +are not shared; faces reference vertices/normals via negative +(relative) indices, so no global counters are required.

+
+
+ +
+
public static void WriteText(string file, double[] rgbTrisNativeArray)
+
+ +

Parameters

+
+
file string
+

Destination OBJ file path.

+
+
rgbTrisNativeArray double[]
+

Stride-15 array: r,g,b, nx,ny,nz, p0.x,p0.y,p0.z, p1.x,p1.y,p1.z, p2.x,p2.y,p2.z, +repeated once per triangle. RGB components are in the [0, 1] range. +See Hi.Cbtr.CubeTree.GetRgbTrisNativeArray.

+
+
+ + + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.PlyUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.PlyUtil.html new file mode 100644 index 00000000..06cee4ee --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.PlyUtil.html @@ -0,0 +1,220 @@ + + + + + Class PlyUtil | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PlyUtil +

+ +
+
Namespace
Hi.Geom
+
Assembly
HiGeom.dll
+
+ +

Stanford PLY writer for RGB-coloured triangle buffers.

+
+
+ +
+
public static class PlyUtil
+
+ + + + +
+
Inheritance
+
+ +
PlyUtil
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + + + + +

Methods +

+ + + + +

+ WriteBin(string, double[]) + +

+ +

Write a stride-15 RGB-triangle buffer as little-endian binary PLY with +per-vertex RGB. Vertices are not shared between triangles (the input +is a non-manifold soup), so each triangle contributes 3 unique vertices.

+
+
+ +
+
public static void WriteBin(string file, double[] rgbTrisNativeArray)
+
+ +

Parameters

+
+
file string
+

Destination PLY file path.

+
+
rgbTrisNativeArray double[]
+

Stride-15 array: r,g,b, nx,ny,nz, p0.x,p0.y,p0.z, p1.x,p1.y,p1.z, p2.x,p2.y,p2.z, +repeated once per triangle. RGB components are in the [0, 1] range. +See Hi.Cbtr.CubeTree.GetRgbTrisNativeArray.

+
+
+ + + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html index 8935864e..332f36dd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.StlFile.html @@ -329,7 +329,8 @@ If base directory is provided, the STL will be loaded immediately.

Base directory path

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html index 066f5642..687f185a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.TransformationGeom.html @@ -290,7 +290,8 @@ This class combines a transformer with a target geometry to produce transformed

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.html b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.html index 5b2317cb..ace2f483 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Geom.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Geom.html @@ -193,6 +193,11 @@ A fraction consists of a numerator and denominator using unlimited precision int
NativeTopoStlfr

Native TopoStl with element type fraction.

+
+
+
+
ObjUtil
+

Wavefront OBJ writer for RGB-coloured triangle buffers.

@@ -203,6 +208,11 @@ A fraction consists of a numerator and denominator using unlimited precision int
PairZrUtil

Utility class for working with PairZr objects

+
+
+
+
PlyUtil
+

Stanford PLY writer for RGB-coloured triangle buffers.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html index 45023d43..06918e6c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.FreeformRemover.html @@ -291,7 +291,8 @@ and topology bricks for both the noble and shaper parts.

The relative file path for resolving references.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional resources for initialization.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html index 2ea7100b..a6198ecf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html @@ -266,7 +266,8 @@ Class MachiningEquipment

The relative file path for XML serialization.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html index fdf5505c..c2ce19fd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html @@ -160,7 +160,7 @@ Class MachiningEquipmentUtil -

Get ISO coordinate position from the root.

+

Get ISO coordinate position from the g54seriesOffset.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html index b8c0d221..ca0e6f88 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html @@ -223,7 +223,8 @@ Class MachiningVolumeRemovalProc.StepMotionSnapshot

The machining tool being used.

WorkpieceService WorkpieceService
-
+

Service that owns the workpiece being machined.

+
BackgroundTemperature_K double

Background temperature in Kelvin.

@@ -609,7 +610,8 @@ Class MachiningVolumeRemovalProc.StepMotionSnapshot -
+

Service that owns the workpiece being machined.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.html b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.html index fd000a7b..83e0f711 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Machining.MachiningVolumeRemovalProc.html @@ -297,7 +297,8 @@ Class MachiningVolumeRemovalProc

Parameters

workpieceService WorkpieceService
-
+

Service that owns the workpiece to attach to.

+
clStrip ClStrip

The CL strip to add the attachment to.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html index 3b28b35c..ea9a26f8 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunner.html @@ -1011,6 +1011,50 @@ Internal Use Only.

+ + +

+ WarnIfCurrentToolFluteMaterialMissing(MachiningSession, int?) + +

+ +

Emit a one-shot session warning if the currently equipped +Hi.MachiningProcs.MachiningActRunner.MachiningEquipment.MachiningTool is a MillingCutter +without a FluteMaterial. Gated by +EnablePhysics; deduped per tool reference via +WarnedFluteMaterialMissingTools so each offending +tool is mentioned at most once per session. Pass toolId when +known (e.g. from an IActTooling) and the warning will name the ID; +omit it (the BeginSession path) and the warning falls back to “the currently +equipped tool” — the equipped tool may have been set externally and not appear +in MachiningToolHouse, so reverse-looking up an ID is unreliable +and reference equality is the right unit of dedup anyway.

+
+
+ +
+
public void WarnIfCurrentToolFluteMaterialMissing(MachiningSession machiningSession, int? toolId = null)
+
+ +

Parameters

+
+
machiningSession MachiningSession
+
+
toolId int?
+
+
+ + + + + + + + + + + +

Events

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html index 72703aea..fa7cf97d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningActRunnerConfig.html @@ -236,7 +236,8 @@ Provides settings for physics simulation, evaluation, and temperature control.

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningSession.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningSession.html index 3abcf20e..fb514720 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningSession.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.MachiningSession.html @@ -584,6 +584,44 @@ Takes effect during internal optimization process.

+ + +

+ WarnedFluteMaterialMissingTools + +

+ +

Tools already surfaced via “MillingCutter.FluteMaterial not set” +warning. Keyed by IMachiningTool reference so the dedup is stable +across the two emission points: ProcAct(IAct, MachiningSession, IMachiningStepHost, IGetSentence, CancellationToken) at each +IActTooling, and BeginSession for the tool that may already +be equipped before the session begins (which has no tool ID to dedup with). +Reference equality is more precise than tool ID — the same tool object equipped +twice should warn once, regardless of how it was reached.

+
+
+ +
+
public HashSet<IMachiningTool> WarnedFluteMaterialMissingTools { get; }
+
+ + + + + +

Property Value

+
+
HashSet<IMachiningTool>
+
+
+ + + + + + + +

Methods

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html index 2ec87ca8..11776dde 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.RuntimeApi.html @@ -4377,6 +4377,80 @@ public void WriteRuntimeGeom(string relFile)
+ + +

+ WriteRuntimeGeomToObj(string, double) + +

+ +

Writes the current runtime geometry to a Wavefront OBJ file with per-vertex RGB.

+
+
+ +
+
[JsAce("WriteRuntimeGeomToObj($1\"dstFile\",$2resolution_mm)")]
+public void WriteRuntimeGeomToObj(string relFile, double resolution_mm = 0)
+
+ +

Parameters

+
+
relFile string
+

Relative path to the output OBJ file

+
+
resolution_mm double
+

Resolution in millimeters (0 for default)

+
+
+ + + + + + + + + + + + + + +

+ WriteRuntimeGeomToPly(string, double) + +

+ +

Writes the current runtime geometry to a binary PLY file with per-vertex RGB.

+
+
+ +
+
[JsAce("WriteRuntimeGeomToPly($1\"dstFile\",$2resolution_mm)")]
+public void WriteRuntimeGeomToPly(string relFile, double resolution_mm = 0)
+
+ +

Parameters

+
+
relFile string
+

Relative path to the output PLY file

+
+
resolution_mm double
+

Resolution in millimeters (0 for default)

+
+
+ + + + + + + + + + + +

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html index 5c06478c..02fe4d53 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.GeneralMechanism.html @@ -262,7 +262,8 @@ Class GeneralMechanism

The base directory for resolving relative file paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.Asmb.html b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.Asmb.html index 052a77f9..764a3fac 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.Asmb.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Mech.Topo.Asmb.html @@ -569,7 +569,8 @@ the members will be generated; otherwise, the existed members are applied.

existed branch map

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+

Returns

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.AptProfile.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.AptProfile.html index 0a8b1a96..0867da04 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.AptProfile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.AptProfile.html @@ -291,7 +291,8 @@ This profile uses APT definitions to describe the cutter geometry.

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.CustomSpinningProfile.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.CustomSpinningProfile.html index 31a6b506..3e8a84be 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.CustomSpinningProfile.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.CustomSpinningProfile.html @@ -259,7 +259,8 @@ This profile allows for custom geometry to be used as the cutter profile.

The base directory for resolving relative paths.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional resolution parameters.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.MillingCutter.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.MillingCutter.html index 4418df43..6e849e7a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.MillingCutter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.Cutters.MillingCutter.html @@ -291,7 +291,8 @@ Shank and Flute compose the full cutter.

Relative file path

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional optional resources

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FluteContour.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FluteContour.html index 078de465..6ec00994 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FluteContour.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FluteContour.html @@ -273,7 +273,8 @@ Class FluteContour

The base directory for resolving relative paths

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional resources for initialization

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeContourTray.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeContourTray.html index 832b1a98..061c21ae 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeContourTray.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.FreeContourTray.html @@ -248,7 +248,8 @@ Class FreeContourTray

The base directory for resolving relative paths

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional resources for initialization

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.UniformContourTray.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.UniformContourTray.html index 9f52d03b..9dcae947 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.UniformContourTray.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.FluteContours.UniformContourTray.html @@ -240,7 +240,8 @@ Class UniformContourTray

Base directory path for resolving relative paths

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
res object[]

Additional optional resources

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.MillingTools.MillingTool.html b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.MillingTools.MillingTool.html index 184b16da..0b392a32 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Milling.MillingTools.MillingTool.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Milling.MillingTools.MillingTool.html @@ -269,7 +269,8 @@ Class MillingTool

The relative file path.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.Fixture.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.Fixture.html index ce9468e1..776d86e4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.Fixture.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Fixtures.Fixture.html @@ -262,7 +262,8 @@ Class Fixture

The relative file path.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.CylindroidHolder.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.CylindroidHolder.html index 56656837..4c880fd4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.CylindroidHolder.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.CylindroidHolder.html @@ -311,7 +311,8 @@ Class CylindroidHolder

The relative file path.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.FreeformHolder.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.FreeformHolder.html index 0361608f..bd07faf0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.FreeformHolder.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Holders.FreeformHolder.html @@ -311,7 +311,8 @@ Class FreeformHolder

Relative file path

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.Workpiece.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.Workpiece.html index 490393cf..79935c96 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.Workpiece.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcMech.Workpieces.Workpiece.html @@ -252,7 +252,8 @@ are managed by

Relative file path.

progress IProgress<object>
-
+

Progress reporter for diagnostic messages emitted during construction.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html index 1c8d5408..e0d4489f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html @@ -538,7 +538,8 @@ Null if not defined for this controller brand.

-
+

Returns the per-axis float bucket for paramId, creating it if absent. See AxisParams.

+
@@ -548,7 +549,8 @@ Null if not defined for this controller brand.

Parameters

paramId int
-
+

Brand-specific parameter/MD/MP number.

+

Returns

@@ -809,7 +811,8 @@ Returns a default value if the axis is not configured.

-
+

Returns the per-axis integer bucket for paramId, creating it if absent. See IntAxisParams.

+
@@ -819,7 +822,8 @@ Returns a default value if the axis is not configured.

Parameters

paramId int
-
+

Brand-specific parameter/MD/MP number.

+

Returns

@@ -933,7 +937,8 @@ Since the folder can be moving with the configuration file.

-
+

Populates SystemParams, AxisParams, and IntAxisParams from src using the brand-specific IdAttributeName.

+
@@ -943,7 +948,8 @@ Since the folder can be moving with the configuration file.

Parameters

src XElement
-
+

XML element produced by WriteXml(string).

+
@@ -1202,7 +1208,8 @@ Unit is mm for linear axes, deg for rotary axes.

-
+

Serializes SystemParams, AxisParams, and IntAxisParams into a new XElement. Inverse of ReadXml(XElement).

+
@@ -1212,7 +1219,8 @@ Unit is mm for linear axes, deg for rotary axes.

Parameters

xName string
-
+

Element name for the produced XML element.

+

Returns

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html index 91d1e494..9699edbe 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html @@ -268,7 +268,8 @@ following real Fanuc parameter numbering.

-
+

Initializes a new instance, seeding Param1020, Param3741, Param5003, and the ISO G54-G59/G54.1 P-table coordinate offsets with their default values.

+
@@ -294,7 +295,8 @@ following real Fanuc parameter numbering.

-
+

Initializes a new instance by deserializing from src.

+
@@ -304,7 +306,8 @@ following real Fanuc parameter numbering.

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -1386,7 +1389,8 @@ Null if not defined for this controller brand.

-
+

XML element name used to register this dependency with XFactory.

+
@@ -1449,7 +1453,7 @@ Null if not defined for this controller brand.

Remarks

-

Routes Fanuc system-variable reads to SystemParams: +

Routes Fanuc system-variable reads to SystemParams: #5221-#5328 (G54-G59 work coordinate offsets) and #7001-#7999 (G54.1 P1-P48 extended offsets) are returned directly by parameter address. Other ranges return null so diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html index 94f3c96f..c89a2a8b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html @@ -6,7 +6,7 @@ - + @@ -102,7 +102,7 @@ runtime-state JSON sections:

  • #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz.
  • #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState.
  • #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz.

Stateless. Configured on -VariableEvaluatorSyntax.RuntimeVariableLookups rather than +RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.html index a8e8e450..31e025fb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Fanuc.html @@ -108,7 +108,7 @@ runtime-state JSON sections:

  • #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz.
  • #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState.
  • #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz.

Stateless. Configured on -VariableEvaluatorSyntax.RuntimeVariableLookups rather than +RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html index 8dc9acf0..23dc1283 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html @@ -207,7 +207,8 @@ parameter for G83 peck retraction — it is per-call). -

+

Initializes a new instance with default settings (PeckRetractionDistance_mm = 5.0).

+
@@ -233,7 +234,8 @@ parameter for G83 peck retraction — it is per-call). -
+

Initializes a new instance by deserializing from src.

+
@@ -243,7 +245,8 @@ parameter for G83 peck retraction — it is per-call).

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -301,7 +304,8 @@ bottom before re-entering at feed (mm).

-
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html index 2bca8d1c..ef89d101 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html @@ -202,7 +202,8 @@ When EnabledLayers is absent the default is layer 1 only. -
+

Initializes a new instance with only layer 1 (the bare / prefix) enabled, matching the typical Fanuc factory default.

+
@@ -228,7 +229,8 @@ When EnabledLayers is absent the default is layer 1 only. -
+

Initializes a new instance by deserializing from src. Falls back to layer 1 only when the EnabledLayers child element is absent or blank.

+
@@ -238,7 +240,8 @@ When EnabledLayers is absent the default is layer 1 only.

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -295,7 +298,8 @@ When EnabledLayers is absent the default is layer 1 only. -
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html index f7deb4f7..be7fd8c7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html @@ -206,7 +206,8 @@ Consumed by
+

Initializes a new instance with no KinematicsProvider; assign one before the runner queries kinematics.

+
@@ -232,7 +233,8 @@ Consumed by
+
@@ -242,7 +244,8 @@ Consumed by Parameters
provider Func<IMachineKinematics>
-
+

Delegate that resolves the live IMachineKinematics at lookup time.

+
@@ -300,7 +303,8 @@ Null provider or null return means kinematics is not yet available.

-
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html index 335392e0..18f49653 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html @@ -187,7 +187,8 @@ Matches Fanuc Memory C layout where H and D share the same row.

-
+

Initializes a new instance with all components zero.

+
@@ -213,7 +214,8 @@ Matches Fanuc Memory C layout where H and D share the same row.

-
+

Initializes a new instance with the supplied geometry and wear components.

+
@@ -223,13 +225,17 @@ Matches Fanuc Memory C layout where H and D share the same row.

Parameters

idealHeight_mm double
-
+

Initial value of IdealHeight_mm.

+
axialWear_mm double
-
+

Initial value of AxialWear_mm.

+
idealRadius_mm double
-
+

Initial value of IdealRadius_mm.

+
radialWear_mm double
-
+

Initial value of RadialWear_mm.

+
@@ -254,7 +260,8 @@ Matches Fanuc Memory C layout where H and D share the same row.

-
+

Accumulated axial wear in millimetres, subtracted from IdealHeight_mm by FullHeight_mm.

+
@@ -349,7 +356,8 @@ Matches Fanuc Memory C layout where H and D share the same row.

-
+

Geometric tool height in millimetres before wear is subtracted. Combined with AxialWear_mm via FullHeight_mm.

+
@@ -380,7 +388,8 @@ Matches Fanuc Memory C layout where H and D share the same row.

-
+

Geometric tool radius in millimetres before wear is subtracted. Combined with RadialWear_mm via FullRadius_mm.

+
@@ -411,7 +420,8 @@ Matches Fanuc Memory C layout where H and D share the same row.

-
+

Accumulated radial wear in millimetres, subtracted from IdealRadius_mm by FullRadius_mm.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html index 497ad44b..ad605008 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html @@ -196,7 +196,8 @@ Key = offset number (Fanuc H or D number).

-
+

Initializes a new instance with an empty Offsets table.

+
@@ -222,7 +223,8 @@ Key = offset number (Fanuc H or D number).

-
+

Initializes a new instance by deserializing from src.

+
@@ -232,7 +234,8 @@ Key = offset number (Fanuc H or D number).

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -257,7 +260,8 @@ Key = offset number (Fanuc H or D number).

-
+

Tool offset rows keyed by offset number (Fanuc H or D number, Heidenhain tool number, etc.).

+
@@ -288,7 +292,8 @@ Key = offset number (Fanuc H or D number).

-
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html index 10df1a79..596374ed 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html @@ -196,7 +196,8 @@ Each axis value: a position to move to, or
+
@@ -222,7 +223,8 @@ Each axis value: a position to move to, or
+

Initializes a new instance by deserializing from src.

+
@@ -232,7 +234,8 @@ Each axis value: a position to move to, or Parameters
src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -354,7 +357,8 @@ Does not include axis motion time to/from the tooling position.

-
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html index f8e1291e..6b96eff3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html @@ -268,7 +268,8 @@ MP400–MP499: Axis-specific parameters. -
+

Initializes a new instance with empty parameter tables.

+
@@ -294,7 +295,8 @@ MP400–MP499: Axis-specific parameters. -
+

Initializes a new instance by deserializing from src.

+
@@ -304,7 +306,8 @@ MP400–MP499: Axis-specific parameters.

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -1002,7 +1005,8 @@ Null if not defined for this controller brand.

-
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html index 4ff2854c..0f299e9b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html @@ -208,7 +208,8 @@ compatibility mapping for ISO/DIN programs running on a Heidenhain. -
+

Initializes a new instance with rows 1-20 of DatumPresetTable and DatumShiftTable seeded to zero.

+
@@ -234,7 +235,8 @@ compatibility mapping for ISO/DIN programs running on a Heidenhain. -
+

Initializes a new instance by deserializing from src.

+
@@ -244,7 +246,8 @@ compatibility mapping for ISO/DIN programs running on a Heidenhain.

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -301,7 +304,8 @@ compatibility mapping for ISO/DIN programs running on a Heidenhain. -
+

Preset rows (CYCL DEF 247 Q339=N) keyed by preset id (1-20). Rows 1-6 are aliased to ISO G54-G59 via IIsoCoordinateConfig.

+
@@ -332,7 +336,8 @@ compatibility mapping for ISO/DIN programs running on a Heidenhain. -
+

Datum shift rows (CYCL DEF 7 #N) keyed by table id (1-20).

+
@@ -363,7 +368,8 @@ compatibility mapping for ISO/DIN programs running on a Heidenhain. -
+

XML element name used to register this dependency with XFactory.

+
@@ -437,7 +443,8 @@ Returns null when no offset is configured for that id by this provider -
+

Returns the preset offset for q339, or Zero if absent. See DatumPresetTable.

+
@@ -447,7 +454,8 @@ Returns null when no offset is configured for that id by this provider

Parameters

q339 int
-
+

Preset id (CYCL DEF 247 Q339).

+

Returns

@@ -473,7 +481,8 @@ Returns null when no offset is configured for that id by this provider -
+

Returns the datum shift offset for tableId, or Zero if absent. See DatumShiftTable.

+
@@ -483,7 +492,8 @@ Returns null when no offset is configured for that id by this provider

Parameters

tableId int
-
+

Datum shift row id (CYCL DEF 7 #N).

+

Returns

@@ -594,7 +604,8 @@ Since the folder can be moving with the configuration file.

-
+

Sets the preset offset for q339. See DatumPresetTable.

+
@@ -604,9 +615,11 @@ Since the folder can be moving with the configuration file.

Parameters

q339 int
-
+

Preset id (CYCL DEF 247 Q339).

+
offset Vec3d
-
+

Translation to store.

+
@@ -627,7 +640,8 @@ Since the folder can be moving with the configuration file.

-
+

Sets the datum shift offset for tableId. See DatumShiftTable.

+
@@ -637,9 +651,11 @@ Since the folder can be moving with the configuration file.

Parameters

tableId int
-
+

Datum shift row id (CYCL DEF 7 #N).

+
offset Vec3d
-
+

Translation to store.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.INcDependency.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.INcDependency.html index d523b510..c90afdfb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.INcDependency.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.INcDependency.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,8 @@ Interface INcDependency
Assembly
HiMech.dll
-
+

Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html index ff959c1e..2c32ebb4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html @@ -204,7 +204,8 @@ position, etc.). -
+

Initializes a new instance with G54-G57 and the Siemens extended G505-G599 series seeded as zero Vec3d entries in Frames.

+
@@ -230,7 +231,8 @@ position, etc.). -
+

Initializes a new instance by deserializing from src.

+
@@ -240,7 +242,8 @@ position, etc.).

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html index f2cf6ea2..742532fd 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html @@ -269,7 +269,8 @@ MD30000–MD39999: Axis-specific machine data (extended). -
+

Initializes a new instance with empty machine data tables.

+
@@ -295,7 +296,8 @@ MD30000–MD39999: Axis-specific machine data (extended). -
+

Initializes a new instance by deserializing from src.

+
@@ -305,7 +307,8 @@ MD30000–MD39999: Axis-specific machine data (extended).

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -908,7 +911,8 @@ Null if not defined for this controller brand.

-
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html index 309a37f5..e7f07107 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html @@ -279,7 +279,8 @@ namespace if more brands need it.

-
+

Initializes a new instance, seeding the ISO G54-G59 / G54.1 P-table coordinate offsets with their default values.

+
@@ -305,7 +306,8 @@ namespace if more brands need it.

-
+

Initializes a new instance by deserializing from src.

+
@@ -315,7 +317,8 @@ namespace if more brands need it.

Parameters

src XElement
-
+

XML element produced by MakeXmlSource(string, string, bool).

+
@@ -1277,7 +1280,8 @@ Null if not defined for this controller brand.

-
+

XML element name used to register this dependency with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html index 9fc93a14..aa0b8c46 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html @@ -211,7 +211,8 @@ Compatible with Fanuc, Siemens, Heidenhain, Mazak, Okuma.

INcDependency
-
+

Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime.

+
IPowerResettable
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.IGetSentence.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.IGetSentence.html index 8287be01..71ebfe10 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.IGetSentence.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.IGetSentence.html @@ -153,7 +153,8 @@ Interface IGetSentence -
+

Returns the source Sentence carried by this object.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.HomeMcInitializer.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.HomeMcInitializer.html index 48d4ee40..6a31ff2d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.HomeMcInitializer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.HomeMcInitializer.html @@ -196,7 +196,8 @@ downstream readers must tolerate missing axis keys.

-
+

Creates a new HomeMcInitializer.

+
@@ -222,7 +223,8 @@ downstream readers must tolerate missing axis keys.

-
+

Creates a HomeMcInitializer from an XML source element.

+
@@ -257,7 +259,8 @@ downstream readers must tolerate missing axis keys.

-
+

Display/registration name of the initializer.

+
@@ -288,7 +291,8 @@ downstream readers must tolerate missing axis keys.

-
+

XML element name used to register and serialize this initializer.

+
@@ -323,7 +327,9 @@ downstream readers must tolerate missing axis keys.

-
+

Writes initial sections into jsonObject, optionally +using values resolved from ncDependencyList.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.INcInitializer.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.INcInitializer.html index 05e507ee..abee5b1a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.INcInitializer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.INcInitializer.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,11 @@ Interface INcInitializer
Assembly
HiMech.dll
-
+

Populates the init-block JSON sections (e.g. home position, static defaults) +before the soft-NC runtime processes any source NC syntax. Implementations +such as HomeMcInitializer and StaticInitializer +write into the supplied JsonObject.

+
@@ -159,7 +163,8 @@ Interface INcInitializer -
+

Display/registration name of the initializer.

+
@@ -194,7 +199,9 @@ Interface INcInitializer -
+

Writes initial sections into jsonObject, optionally +using values resolved from ncDependencyList.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.StaticInitializer.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.StaticInitializer.html index 36e39d63..586a2203 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.StaticInitializer.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.StaticInitializer.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,10 @@ Class StaticInitializer
Assembly
HiMech.dll
-
+

Merges a fixed Initialization JSON snippet into the init-block +JSON. Used to seed brand-default sections (e.g. G54, G80) +before any source NC syntax is processed.

+
@@ -191,7 +194,8 @@ Class StaticInitializer -
+

Creates an empty StaticInitializer.

+
@@ -217,7 +221,9 @@ Class StaticInitializer -
+

Creates a StaticInitializer from an XML source element, +reading the embedded JSON from the Initialization child element.

+
@@ -252,7 +258,8 @@ Class StaticInitializer -
+

An empty StaticInitializer with no preset sections.

+
@@ -315,7 +322,9 @@ Class StaticInitializer -
+

JSON sections to merge into the init-block JSON during +Initialize(JsonObject, List<INcDependency>).

+
@@ -378,7 +387,8 @@ Class StaticInitializer -
+

Display/registration name of the initializer.

+
@@ -441,7 +451,8 @@ Class StaticInitializer -
+

XML element name used to register and serialize this initializer.

+
@@ -476,7 +487,9 @@ Class StaticInitializer -
+

Writes initial sections into jsonObject, optionally +using values resolved from ncDependencyList.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.html index e0205448..7f7708db 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Initializers.html @@ -105,14 +105,21 @@ downstream readers must tolerate missing axis keys.

StaticInitializer
-
+

Merges a fixed Initialization JSON snippet into the init-block +JSON. Used to seed brand-default sections (e.g. G54, G80) +before any source NC syntax is processed.

+

Interfaces

INcInitializer
-
+

Populates the init-block JSON sections (e.g. home position, static defaults) +before the soft-NC runtime processes any source NC syntax. Implementations +such as HomeMcInitializer and StaticInitializer +write into the supplied JsonObject.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html index f8295cd4..a9a192e9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html @@ -203,7 +203,8 @@ Place at the end of the syntax list, after all consumers have read the keys. -
+

Creates a CleanupSyntax seeded with the given keys.

+
@@ -213,7 +214,8 @@ Place at the end of the syntax list, after all consumers have read the keys.

Parameters

keys string[]
-
+

JSON keys to remove on each block; copied into Keys.

+
@@ -234,7 +236,9 @@ Place at the end of the syntax list, after all consumers have read the keys. -
+

Reconstructs a CleanupSyntax from a project XML element +previously produced by MakeXmlSource(string, string, bool).

+
@@ -244,7 +248,8 @@ Place at the end of the syntax list, after all consumers have read the keys.

Parameters

src XElement
-
+

XML element with one Key child per entry in Keys.

+
@@ -333,7 +338,8 @@ Place at the end of the syntax list, after all consumers have read the keys. -
+

XML element name for Regs registration.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html index a593edb5..5f579cb1 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html @@ -226,7 +226,8 @@ and diffing easier. -
+

Creates a default ProgramXyzBackfillSyntax.

+
@@ -338,7 +339,8 @@ the value is a modal back-fill to make debug dumps more complete". -
+

XML element name for Regs registration.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html index 19a22582..8fd172a2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html @@ -218,7 +218,8 @@ convenient for toggling a debug pipeline without removing the entries. -
+

Creates a SnapshotSyntax with no SectionName set yet.

+
@@ -244,7 +245,8 @@ convenient for toggling a debug pipeline without removing the entries. -
+

Creates a SnapshotSyntax with the given SectionName.

+
@@ -254,7 +256,8 @@ convenient for toggling a debug pipeline without removing the entries.

Parameters

sectionName string
-
+

Sub-key under SnapshotKey for this instance's capture.

+
@@ -275,7 +278,9 @@ convenient for toggling a debug pipeline without removing the entries. -
+

Reconstructs a SnapshotSyntax from a project XML element +previously produced by MakeXmlSource(string, string, bool).

+
@@ -285,7 +290,8 @@ convenient for toggling a debug pipeline without removing the entries.

Parameters

src XElement
-
+

XML element carrying SectionName and IsEnabled; null is treated as defaults.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CsScript.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CsScript.html index 0bd23597..77f4c316 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CsScript.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.CsScript.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,12 @@ Class CsScript
Assembly
HiMech.dll
-
+

Section-key holder for inline C# scripts attached to an NC block. Carries +BeginScript (run before the block's acts) and +EndScript (run after). Resolved by +CsScriptBeginSemantic and +CsScriptEndSemantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucPathSmoothing.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucPathSmoothing.html new file mode 100644 index 00000000..5c22080a --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.FanucPathSmoothing.html @@ -0,0 +1,253 @@ + + + + + Class FanucPathSmoothing | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FanucPathSmoothing +

+ +
+
Namespace
Hi.NcParsers.Keywords
+
Assembly
HiMech.dll
+
+ +

Section data holder for IFanucPathSmoothingDef.

+
+
+ +
+
public class FanucPathSmoothing : PathSmoothing, IFanucPathSmoothingDef, IPathSmoothingDef
+
+ + + + +
+
Inheritance
+
+ + +
FanucPathSmoothing
+
+
+ +
+
Implements
+
+ + +
+
+ + +
+
Inherited Members
+
+ + + + + + + + + +
+ +
+
Extension Methods
+
+ + + + + + + +
+ + + + + +

Properties +

+ + + + +

+ Level + +

+ +

Fanuc G05.1 R precision / smoothness level number (typically 1..10). +null when the source NC line did not specify R. +Ignored when IsEnabled is false.

+
+
+ +
+
public int? Level { get; set; }
+
+ + + + + +

Property Value

+
+
int?
+
+
+ + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html index 33bcde4b..d87572e7 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,10 @@ Interface ICyclDef
Assembly
HiMech.dll
-
+

JSON section schema for Heidenhain CYCL DEF blocks. The +CyclHead string captures either the cycle title (e.g. +“DATUM SETTING”) or a parameter line (e.g. “Q339=+1”).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.html index f091fb9f..88e1db32 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.Heidenhain.html @@ -96,7 +96,10 @@ Interfaces
ICyclDef
-
+

JSON section schema for Heidenhain CYCL DEF blocks. The +CyclHead string captures either the cycle title (e.g. +“DATUM SETTING”) or a parameter line (e.g. “Q339=+1”).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html new file mode 100644 index 00000000..75a9524d --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html @@ -0,0 +1,238 @@ + + + + + Interface IFanucPathSmoothingDef | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Interface IFanucPathSmoothingDef +

+ +
+
Namespace
Hi.NcParsers.Keywords
+
Assembly
HiMech.dll
+
+ +

Fanuc-specific path smoothing state written by +FanucPathSmoothingSyntax.

+

+Extends IPathSmoothingDef with the Fanuc G05.1 R argument +(precision / smoothness level number, R1..R10 mapping to controller-internal +tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / +Q1 enable), so IsEnabled covers it directly +— no raw Q field is stored. +

+

+JSON section key remains nameof(PathSmoothing) so generic readers +(cache dumps, modal carry, UI) can cast to IPathSmoothingDef +across all controller brands; brand-specific readers cast to +IFanucPathSmoothingDef for the extra fields. +

+
+
+ +
+
public interface IFanucPathSmoothingDef : IPathSmoothingDef
+
+ + + + + + + +
+
Inherited Members
+
+ + +
+ +
+
Extension Methods
+
+ + + + + + + +
+ + +

Examples

+
"PathSmoothing": {
+  "IsEnabled": true,
+  "Term": "G05.1",
+  "Level": 1
+}
+ + + + +

Properties +

+ + + + +

+ Level + +

+ +

Fanuc G05.1 R precision / smoothness level number (typically 1..10). +null when the source NC line did not specify R. +Ignored when IsEnabled is false.

+
+
+ +
+
int? Level { get; set; }
+
+ + + + + +

Property Value

+
+
int?
+
+
+ + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFlagsDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFlagsDef.html index dd2317bb..9490d0a9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFlagsDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IFlagsDef.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,10 @@ Interface IFlagsDef
Assembly
HiMech.dll
-
+

JSON section schema describing the modal/non-modal flags that take effect +on an NC block. Each entry in Flags is a brand-specific +keyword recognized by the soft-NC runtime.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IParsingDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IParsingDef.html index ea114540..892a9b85 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IParsingDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IParsingDef.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,10 @@ Interface IParsingDef
Assembly
HiMech.dll
-
+

JSON section schema carrying the raw, brand-specific parsing trace for an +NC block. The Parsing node holds intermediate parser output +used by downstream syntaxes and diagnostics.

+
@@ -152,7 +155,8 @@ Interface IParsingDef -
+

Raw parsing trace JSON for the current block.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IPathSmoothingDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IPathSmoothingDef.html index 72836ee9..2f9bdfa3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IPathSmoothingDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IPathSmoothingDef.html @@ -6,7 +6,7 @@ - + @@ -97,8 +97,11 @@ Interface IPathSmoothingDef
Assembly
HiMech.dll
-

Path smoothing state written by -PathSmoothingSyntax.

+

Path smoothing state. The base interface is brand-agnostic; controller +brands extend it with their own argument fields (e.g. +IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). +Fanuc-flavour writes are produced by +FanucPathSmoothingSyntax.

ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IProgramXyzDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IProgramXyzDef.html index dfdef16b..28107214 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IProgramXyzDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IProgramXyzDef.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,11 @@ Interface IProgramXyzDef

Assembly
HiMech.dll
-
+

JSON section schema carrying the program-coordinate position commanded on +the current block. Written by ProgramXyzSyntax +before the ProgramToMcTransform chain +composes it into machine coordinates.

+
@@ -152,7 +156,8 @@ Interface IProgramXyzDef -
+

Program-coordinate XYZ (and optional ABC) for the current block.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ITransformationDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ITransformationDef.html index 58d59f1a..ca727e9d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ITransformationDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ITransformationDef.html @@ -181,7 +181,10 @@ the presence of any Dynamic entry on this block. -
+

Ordered chain of named ProgramXyz → MachineCoordinate transformation +entries. See the type-level remarks for the entry schema and +composition rule.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IUnparsedTextDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IUnparsedTextDef.html index 8985d2ba..d1ff8abe 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IUnparsedTextDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IUnparsedTextDef.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,9 @@ Interface IUnparsedTextDef
Assembly
HiMech.dll
-
+

JSON section schema carrying the residual block text that was not consumed +by any registered syntax. Used for diagnostics and round-trip preservation.

+
@@ -152,7 +154,8 @@ Interface IUnparsedTextDef -
+

Residual NC block text not matched by any syntax.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IndexNote.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IndexNote.html index 89166f80..394180ab 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IndexNote.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IndexNote.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,10 @@ Class IndexNote
Assembly
HiMech.dll
-
+

JSON-section data shape pairing a single-character address symbol +(e.g. ‘O’, ‘N’) with its numeric index, used to annotate +program/sequence numbers on an NC block.

+
@@ -184,7 +187,8 @@ Class IndexNote -
+

Numeric value associated with Symbol.

+
@@ -215,7 +219,8 @@ Class IndexNote -
+

Address symbol (e.g. “O” for program number, “N” for sequence number).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PathSmoothing.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PathSmoothing.html index 55b0527b..3ef531ac 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PathSmoothing.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PathSmoothing.html @@ -123,6 +123,12 @@ Class PathSmoothing +
+
Derived
+
+ +
+
Inherited Members
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PlaneSelect.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PlaneSelect.html index a5f12053..6fda9edf 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PlaneSelect.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.PlaneSelect.html @@ -190,7 +190,8 @@ Class PlaneSelect -
+

Plane identifier for the XY plane (Z normal).

+
@@ -220,7 +221,8 @@ Class PlaneSelect -
+

Plane identifier for the YZ plane (X normal).

+
@@ -250,7 +252,8 @@ Class PlaneSelect -
+

Plane identifier for the ZX plane (Y normal).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ToolHeightCompensation.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ToolHeightCompensation.html index 4819a2e0..d198f02f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ToolHeightCompensation.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ToolHeightCompensation.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,8 @@ Class ToolHeightCompensation
Assembly
HiMech.dll
-
+

Section key holder for IToolHeightCompensationDef.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html index 6419c391..fe8e9569 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html @@ -154,11 +154,21 @@ Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift).
CsScript
-
+

Section-key holder for inline C# scripts attached to an NC block. Carries +BeginScript (run before the block's acts) and +EndScript (run after). Resolved by +CsScriptBeginSemantic and +CsScriptEndSemantic.

+
Dwell

Section key holder + concrete implementation for IDwellDef.

+
+
+
+
FanucPathSmoothing
+

Section data holder for IFanucPathSmoothingDef.

@@ -168,7 +178,10 @@ Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift).
IndexNote
-
+

JSON-section data shape pairing a single-character address symbol +(e.g. ‘O’, ‘N’) with its numeric index, used to annotate +program/sequence numbers on an NC block.

+
IsoLocalCoordinateOffset
@@ -265,7 +278,8 @@ Not a comment — the controller uses it as a tape/file boundary marker.

ToolHeightCompensation
-
+

Section key holder for IToolHeightCompensationDef.

+
Unit
@@ -334,6 +348,25 @@ flood vs mist.

Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay.

+
+
+
+
IFanucPathSmoothingDef
+

Fanuc-specific path smoothing state written by +FanucPathSmoothingSyntax.

+

+Extends IPathSmoothingDef with the Fanuc G05.1 R argument +(precision / smoothness level number, R1..R10 mapping to controller-internal +tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / +Q1 enable), so IsEnabled covers it directly +— no raw Q field is stored. +

+

+JSON section key remains nameof(PathSmoothing) so generic readers +(cache dumps, modal carry, UI) can cast to IPathSmoothingDef +across all controller brands; brand-specific readers cast to +IFanucPathSmoothingDef for the extra fields. +

@@ -348,7 +381,10 @@ Supported by all major CNC brands.
IFlagsDef
-
+

JSON section schema describing the modal/non-modal flags that take effect +on an NC block. Each entry in Flags is a brand-specific +keyword recognized by the soft-NC runtime.

+
IMachineCoordinateStateDef
@@ -399,12 +435,18 @@ downstream FindPrevious* can resume motion-mode bookkeeping.
IParsingDef
-
+

JSON section schema carrying the raw, brand-specific parsing trace for an +NC block. The Parsing node holds intermediate parser output +used by downstream syntaxes and diagnostics.

+
IPathSmoothingDef
-

Path smoothing state written by -PathSmoothingSyntax.

+

Path smoothing state. The base interface is brand-agnostic; controller +brands extend it with their own argument fields (e.g. +IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). +Fanuc-flavour writes are produced by +FanucPathSmoothingSyntax.

ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. @@ -467,7 +509,11 @@ semantic layers decide whether to actually pause.

IProgramXyzDef
-
+

JSON section schema carrying the program-coordinate position commanded on +the current block. Written by ProgramXyzSyntax +before the ProgramToMcTransform chain +composes it into machine coordinates.

+
IRadiusCompensationDef
@@ -577,7 +623,9 @@ program to metric before loading.
IUnparsedTextDef
-
+

JSON section schema carrying the residual block text that was not consumed +by any registered syntax. Used for diagnostics and round-trip preservation.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html index 18c41eaa..86b5b013 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html @@ -208,7 +208,8 @@ syntax runs. -
+

Initializes a new instance with default settings.

+
@@ -234,7 +235,8 @@ syntax runs. -
+

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

+
@@ -244,7 +246,8 @@ syntax runs.

Parameters

src XElement
-
+

Source XML element.

+
@@ -301,7 +304,8 @@ syntax runs. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html index 239cea4d..2046c648 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html @@ -214,7 +214,8 @@ the previous direction was CW (M03), which is the typical boring setup.

-
+

Initializes a new instance with default settings.

+
@@ -240,7 +241,8 @@ the previous direction was CW (M03), which is the typical boring setup.

-
+

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

+
@@ -250,7 +252,8 @@ the previous direction was CW (M03), which is the typical boring setup.

Parameters

src XElement
-
+

Source XML element.

+
@@ -307,7 +310,8 @@ the previous direction was CW (M03), which is the typical boring setup.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html index 54923ec1..0f9bf6e6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html @@ -209,7 +209,8 @@ the individual cycle syntaxes in the chain. -
+

Default instance with standard settings.

+
@@ -272,7 +273,8 @@ the individual cycle syntaxes in the chain. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html index 1a042ff1..44b78e9e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html @@ -209,7 +209,8 @@ writes a MotionEve -
+

Initializes a new instance with default settings.

+
@@ -235,7 +236,8 @@ writes a MotionEve -
+

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

+
@@ -245,7 +247,8 @@ writes a MotionEve

Parameters

src XElement
-
+

Source XML element.

+
@@ -302,7 +305,8 @@ writes a MotionEve -
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html index f67b9af6..a83a881b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html @@ -199,7 +199,8 @@ Modal — persists via backward lookback.

-
+

Initializes a new instance with default settings.

+
@@ -225,7 +226,8 @@ Modal — persists via backward lookback.

-
+

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

+
@@ -235,7 +237,8 @@ Modal — persists via backward lookback.

Parameters

src XElement
-
+

Source XML element.

+
@@ -292,7 +295,8 @@ Modal — persists via backward lookback.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html index 187315aa..54016560 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html @@ -161,7 +161,9 @@ backward lookback, and
+
@@ -196,7 +198,9 @@ backward lookback, and
+
@@ -206,9 +210,11 @@ backward lookback, and Parameters
json JsonObject
-
+

Block JSON object to update.

+
offset Vec3d
-
+

Translation offset to apply.

+
@@ -229,7 +235,9 @@ backward lookback, and
+

Walks the previous node and returns its CoordinateId +if any; used for modal lookback when the current block does not specify one.

+
@@ -239,7 +247,8 @@ backward lookback, and Parameters
node LazyLinkedListNode<SyntaxPiece>
-
+

Current node to look back from.

+

Returns

@@ -351,7 +360,9 @@ covers HiNC-extension ids the brand table does not handle (e.g. G59.1–G59.9). -
+

Writes the CoordinateOffset section with the given +coordinate id and XYZ offset components.

+
@@ -361,11 +372,14 @@ covers HiNC-extension ids the brand table does not handle (e.g. G59.1–G59.9).

Parameters

json JsonObject
-
+

Block JSON object to update.

+
coordId string
-
+

Coordinate system identifier (e.g., G54).

+
offset Vec3d
-
+

Offset translation in machine coordinates.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html index 6345adf9..dba9902b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html @@ -209,7 +209,8 @@ retract behaviors and require separate syntax classes.

-
+

Initializes a new instance with default settings.

+
@@ -235,7 +236,8 @@ retract behaviors and require separate syntax classes.

-
+

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

+
@@ -245,7 +247,8 @@ retract behaviors and require separate syntax classes.

Parameters

src XElement
-
+

Source XML element.

+
@@ -302,7 +305,8 @@ retract behaviors and require separate syntax classes.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html similarity index 70% rename from App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html rename to App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html index 701c7118..d5e44c96 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html @@ -2,11 +2,11 @@ - Class PathSmoothingSyntax | HiAPI-C# 2025 + Class FanucPathSmoothingSyntax | HiAPI-C# 2025 - + - + @@ -84,12 +84,12 @@
-
+
-

-Class PathSmoothingSyntax +

+Class FanucPathSmoothingSyntax

@@ -97,14 +97,23 @@ Class PathSmoothingSyntax
Assembly
HiMech.dll
-

Consumes G05.1 (high-precision contour / path smoothing) and records -its modal state. Q1 enables, Q0 disables. The simulation does not alter -the tool path — this is a controller-internal interpolation black box.

+

Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) +and records the modal state in the PathSmoothing JSON +section using the FanucPathSmoothing schema. Q1 enables, +Q0 disables; the optional R{n} precision-level is preserved as +Level. The simulation does not +alter the tool path — this is a controller-internal interpolation black +box; the captured state exists for bidirectional NC-text reconstruction.

+

+Modal carry to subsequent blocks is handled by +ModalCarrySyntax, which already tracks the +PathSmoothing section key and deep-clones it forward. +

-
public class PathSmoothingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
+
public class FanucPathSmoothingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource
@@ -114,7 +123,7 @@ the tool path — this is a controller-internal interpolation black box.

Inheritance
-
PathSmoothingSyntax
+
FanucPathSmoothingSyntax
@@ -188,18 +197,19 @@ the tool path — this is a controller-internal interpolation black box.

- + -

- PathSmoothingSyntax() +

+ FanucPathSmoothingSyntax()

-
+

Initializes a new instance with default settings.

+
-
public PathSmoothingSyntax()
+
public FanucPathSmoothingSyntax()
@@ -214,24 +224,26 @@ the tool path — this is a controller-internal interpolation black box.

- + -

- PathSmoothingSyntax(XElement) +

+ FanucPathSmoothingSyntax(XElement)

-
+

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

+
-
public PathSmoothingSyntax(XElement src)
+
public FanucPathSmoothingSyntax(XElement src)

Parameters

src XElement
-
+

Source XML element.

+
@@ -249,9 +261,9 @@ the tool path — this is a controller-internal interpolation black box.

- + -

+

Name

@@ -281,14 +293,15 @@ the tool path — this is a controller-internal interpolation black box.

- + -

+

XName

-
+

XML element name used to register this syntax with XFactory.

+
@@ -316,9 +329,9 @@ the tool path — this is a controller-internal interpolation black box.

- + -

+

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

@@ -353,9 +366,9 @@ the tool path — this is a controller-internal interpolation black box.

- + -

+

MakeXmlSource(string, string, bool)

@@ -395,7 +408,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.LogicSyntaxs.FeedrateSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html index 9cb0ab29..fa98944c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html @@ -196,7 +196,8 @@ Writes resolved state to a
+

Initializes a new instance with default settings.

+
+

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

+
@@ -232,7 +234,8 @@ Writes resolved state to a Parameters
src XElement
-
+

Source XML element.

+
@@ -289,7 +292,8 @@ Writes resolved state to a
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html index 0fe8c420..a02c3045 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html @@ -207,7 +207,8 @@ syntax runs. -
+

Initializes a new instance with default settings.

+
@@ -233,7 +234,8 @@ syntax runs. -
+

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

+
@@ -243,7 +245,8 @@ syntax runs.

Parameters

src XElement
-
+

Source XML element.

+
@@ -300,7 +303,8 @@ syntax runs. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html index 0cf2fc6e..8772dab6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html @@ -221,7 +221,8 @@ ToolHeightCompensation entry when RTCP is active) and before -
+

Initializes a new instance with default settings.

+
@@ -247,7 +248,8 @@ ToolHeightCompensation entry when RTCP is active) and before -
+

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

+
@@ -257,7 +259,8 @@ ToolHeightCompensation entry when RTCP is active) and before

Parameters

src XElement
-
+

Source XML element.

+
@@ -314,7 +317,8 @@ ToolHeightCompensation entry when RTCP is active) and before -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html index 57f5a11f..f539b030 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html @@ -222,7 +222,8 @@ to prevent McA -
+

Initializes a new instance with default settings.

+
@@ -248,7 +249,8 @@ to prevent McA -
+

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

+
@@ -258,7 +260,8 @@ to prevent McA

Parameters

src XElement
-
+

Source XML element.

+
@@ -315,7 +318,8 @@ to prevent McA -
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html index cff8e7bf..45448d26 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html @@ -203,7 +203,8 @@ so both syntaxes can coexist without double-composing. -
+

Initializes a new instance with default settings.

+
@@ -229,7 +230,8 @@ so both syntaxes can coexist without double-composing. -
+

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

+
@@ -239,7 +241,8 @@ so both syntaxes can coexist without double-composing.

Parameters

src XElement
-
+

Source XML element.

+
@@ -296,7 +299,8 @@ so both syntaxes can coexist without double-composing. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html index f0a85c04..e44a4f72 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html @@ -207,7 +207,8 @@ Must be placed after
+

Initializes a new instance with default settings.

+
+

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

+
@@ -243,7 +245,8 @@ Must be placed after Parameters
src XElement
-
+

Source XML element.

+
@@ -300,7 +303,8 @@ Must be placed after
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html index db033bbe..48420913 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html @@ -218,7 +218,8 @@ incremental logic. -
+

Initializes a new instance with the given working path list.

+
@@ -228,7 +229,8 @@ incremental logic.

Parameters

workingPathList List<List<string>>
-
+

JSON paths to scan for incremental axis values; see WorkingPathList.

+
@@ -249,7 +251,10 @@ incremental logic. -
+

Initializes a new instance by deserializing the working path list from the +given XML element. Falls back to Default.WorkingPathList +when the element has no Path children.

+
@@ -259,7 +264,8 @@ incremental logic.

Parameters

src XElement
-
+

Source XML element.

+
@@ -284,7 +290,9 @@ incremental logic. -
+

Default instance with working paths covering the Parsing root +and the Parsing.G28 intermediate XYZ subsection.

+
@@ -386,7 +394,8 @@ All matching paths are converted.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html index 8f4fbb19..c1ce1eeb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html @@ -199,7 +199,8 @@ Default coordinate ID is set by
+

Initializes a new instance with default settings.

+
+

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

+
@@ -235,7 +237,8 @@ Default coordinate ID is set by Parameters
src XElement
-
+

Source XML element.

+
@@ -292,7 +295,8 @@ Default coordinate ID is set by
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html index bbc7ef49..97a37b1f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html @@ -207,7 +207,8 @@ active plane: G17→Z, G18→Y, G19→X.

-
+

Initializes a new instance with default settings.

+
@@ -233,7 +234,8 @@ active plane: G17→Z, G18→Y, G19→X.

-
+

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

+
@@ -243,7 +245,8 @@ active plane: G17→Z, G18→Y, G19→X.

Parameters

src XElement
-
+

Source XML element.

+
@@ -300,7 +303,8 @@ active plane: G17→Z, G18→Y, G19→X.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html index 3d7ca318..0ad47296 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html @@ -214,7 +214,8 @@ preserves the exact IJK orientation while aligning with the post-processor's sol -
+

Initializes a new instance with default settings.

+
@@ -240,7 +241,8 @@ preserves the exact IJK orientation while aligning with the post-processor's sol -
+

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

+
@@ -250,7 +252,8 @@ preserves the exact IJK orientation while aligning with the post-processor's sol

Parameters

src XElement
-
+

Source XML element.

+
@@ -307,7 +310,8 @@ preserves the exact IJK orientation while aligning with the post-processor's sol -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html index 500124de..95a4850b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html @@ -202,7 +202,8 @@ Modal — persists via backward lookback until changed or cancelled. -
+

Initializes a new instance with default settings.

+
@@ -228,7 +229,8 @@ Modal — persists via backward lookback until changed or cancelled. -
+

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

+
@@ -238,7 +240,8 @@ Modal — persists via backward lookback until changed or cancelled.

Parameters

src XElement
-
+

Source XML element.

+
@@ -262,7 +265,9 @@ Modal — persists via backward lookback until changed or cancelled. -
+

Identifier used as the transform source key when composing the +local coordinate offset translation into the transform chain.

+
@@ -329,7 +334,8 @@ Modal — persists via backward lookback until changed or cancelled. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html index e58bf1c6..244eef22 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html @@ -204,7 +204,8 @@ Must be placed after
+

Initializes a new instance with default settings.

+
+

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

+
@@ -240,7 +242,8 @@ Must be placed after Parameters
src XElement
-
+

Source XML element.

+
@@ -297,7 +300,8 @@ Must be placed after
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html index 4f0dadf8..b738a9c6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html @@ -215,7 +215,8 @@ Output: MachineCoordinate = (prevMcX, prevMcY, 0) -
+

Initializes a new instance with default settings.

+
@@ -241,7 +242,8 @@ Output: MachineCoordinate = (prevMcX, prevMcY, 0) -
+

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

+
@@ -251,7 +253,8 @@ Output: MachineCoordinate = (prevMcX, prevMcY, 0)

Parameters

src XElement
-
+

Source XML element.

+
@@ -308,7 +311,8 @@ Output: MachineCoordinate = (prevMcX, prevMcY, 0) -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html index 73793bdf..214eefcb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html @@ -197,7 +197,8 @@ Must be placed after
+

Initializes a new instance with default settings.

+
+

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

+
@@ -233,7 +235,8 @@ Must be placed after Parameters
src XElement
-
+

Source XML element.

+
@@ -290,7 +293,8 @@ Must be placed after
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html index 323f581a..f750c62b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html @@ -257,7 +257,8 @@ that need the current-block ABC to compute transforms -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html index f276ad20..8af2a71e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html @@ -264,7 +264,8 @@ Does nothing when the section already carries all three of X/Y/Z -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html index 9a3a777f..930ed849 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html @@ -237,7 +237,8 @@ and before syntaxes that read MachineCoordinate -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html index 299643c9..31e18bc4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html @@ -215,7 +215,8 @@ back to R — see
+

Initializes a new instance with default settings.

+
+

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

+
@@ -251,7 +253,8 @@ back to R — see Parameters
src XElement
-
+

Source XML element.

+
@@ -308,7 +311,8 @@ back to R — see
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html index 5bc5dd3b..5296e1ea 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html @@ -223,7 +223,8 @@ Silently no-ops when
+

Initializes a new instance with default settings.

+
+

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

+
@@ -259,7 +261,8 @@ Silently no-ops when Parameters
src XElement
-
+

Source XML element.

+
@@ -316,7 +319,8 @@ Silently no-ops when
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html index 193e4f9c..5e04f016 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html @@ -201,7 +201,8 @@ Downstream consumers (
+

Default instance with standard settings.

+
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html index f4ace5fa..0b5c5afa 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html @@ -207,7 +207,8 @@ their parameters with cycle-specific G91 semantics. -
+

Default instance with standard settings.

+
@@ -270,7 +271,8 @@ their parameters with cycle-specific G91 semantics. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html index a49f537a..1daed1ff 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html @@ -201,7 +201,8 @@ Must be placed before syntaxes that depend on the ProgramEnd section. -
+

Initializes a new instance with default settings.

+
@@ -227,7 +228,8 @@ Must be placed before syntaxes that depend on the ProgramEnd section. -
+

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

+
@@ -237,7 +239,8 @@ Must be placed before syntaxes that depend on the ProgramEnd section.

Parameters

src XElement
-
+

Source XML element.

+
@@ -294,7 +297,8 @@ Must be placed before syntaxes that depend on the ProgramEnd section. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html index 6f59b4f3..5dd7e17b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html @@ -207,7 +207,8 @@ pauses the run is a runtime/semantic decision gated by the operator's -
+

Initializes a new instance with default settings.

+
@@ -233,7 +234,8 @@ pauses the run is a runtime/semantic decision gated by the operator's -
+

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

+
@@ -243,7 +245,8 @@ pauses the run is a runtime/semantic decision gated by the operator's

Parameters

src XElement
-
+

Source XML element.

+
@@ -300,7 +303,8 @@ pauses the run is a runtime/semantic decision gated by the operator's -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html index c1a02013..e8b5bbf3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html @@ -206,7 +206,8 @@ The coordinate is usually the final node from the chain of coordinate transforma -
+

Initializes a new instance with the given working path list.

+
@@ -216,7 +217,8 @@ The coordinate is usually the final node from the chain of coordinate transforma

Parameters

workingPathList List<List<string>>
-
+

JSON paths to scan for axis values; see WorkingPathList.

+
@@ -237,7 +239,10 @@ The coordinate is usually the final node from the chain of coordinate transforma -
+

Initializes a new instance by deserializing the working path list from the +given XML element. Falls back to Default.WorkingPathList +when the element has no Path children.

+
@@ -247,7 +252,8 @@ The coordinate is usually the final node from the chain of coordinate transforma

Parameters

src XElement
-
+

Source XML element.

+
@@ -272,7 +278,8 @@ The coordinate is usually the final node from the chain of coordinate transforma -
+

Default instance with the working path resolving to the Parsing root.

+
@@ -374,7 +381,8 @@ First match is used. Empty list means root level.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html index ede1f96f..d4bc7ad2 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html @@ -688,9 +688,11 @@ Fills missing axes from last program position via lookback.

Current node for lookback.

sentence Sentence
-
+

Source sentence used to attach diagnostics to the offending text span.

+
diag NcDiagnosticProgress
-
+

Diagnostic sink that receives parse errors for malformed X/Y/Z values.

+

Returns

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html index df1a3037..47ed6816 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html @@ -227,7 +227,8 @@ Root ProgramXyz is overwritten to the final position; -
+

Initializes a new instance with default settings.

+
@@ -253,7 +254,8 @@ Root ProgramXyz is overwritten to the final position; -
+

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

+
@@ -263,7 +265,8 @@ Root ProgramXyz is overwritten to the final position;

Parameters

src XElement
-
+

Source XML element.

+
@@ -320,7 +323,8 @@ Root ProgramXyz is overwritten to the final position; -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html index dd08c944..8c7c4165 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html @@ -197,7 +197,8 @@ composes into
+

Initializes a new instance with default settings.

+
+

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

+
@@ -233,7 +235,8 @@ composes into Parameters
src XElement
-
+

Source XML element.

+
@@ -290,7 +293,8 @@ composes into
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html index f36f0ca0..3058363e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html @@ -198,7 +198,8 @@ Direction is converted from ISO M-codes to the conventional -
+

Initializes a new instance with default settings.

+
@@ -224,7 +225,8 @@ Direction is converted from ISO M-codes to the conventional -
+

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

+
@@ -234,7 +236,8 @@ Direction is converted from ISO M-codes to the conventional

Parameters

src XElement
-
+

Source XML element.

+
@@ -291,7 +294,8 @@ Direction is converted from ISO M-codes to the conventional -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html index 952e9f61..e4982643 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html @@ -209,7 +209,8 @@ Must be placed after
+

Initializes a new instance with default settings.

+
+

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

+
@@ -245,7 +247,8 @@ Must be placed after Parameters
src XElement
-
+

Source XML element.

+
@@ -302,7 +305,8 @@ Must be placed after
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html index ba341ac7..c441b905 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html @@ -161,7 +161,9 @@ backward lookback, and
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html index 5a4cd9b6..0cc8bb55 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html @@ -199,7 +199,8 @@ the tool-change M code); modal-only blocks omit it.

-
+

Section key indicating whether the current block actually triggers a tool change.

+
@@ -229,7 +230,8 @@ the tool-change M code); modal-only blocks omit it.

-
+

JSON section name where the resolved tool-change state is written.

+
@@ -259,7 +261,8 @@ the tool-change M code); modal-only blocks omit it.

-
+

Section key recording the trigger command (e.g., M06) when IsChangeKey is true.

+
@@ -289,7 +292,8 @@ the tool-change M code); modal-only blocks omit it.

-
+

Section key holding the active tool number (modal).

+
@@ -356,7 +360,8 @@ the tool-change M code); modal-only blocks omit it.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html index 0b00b118..3ee14d83 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html @@ -205,7 +205,8 @@ section (not syntax fields) and recovered from backward node traversal. -
+

Initializes a new instance with default settings.

+
@@ -231,7 +232,8 @@ section (not syntax fields) and recovered from backward node traversal. -
+

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

+
@@ -241,7 +243,8 @@ section (not syntax fields) and recovered from backward node traversal.

Parameters

src XElement
-
+

Source XML element.

+
@@ -265,7 +268,8 @@ section (not syntax fields) and recovered from backward node traversal. -
+

JSON key under which the upstream tool orientation vector is read.

+
@@ -295,7 +299,9 @@ section (not syntax fields) and recovered from backward node traversal. -
+

Identifier used as the transform source key when composing the +tool-height translation into ProgramToMcTransform.

+
@@ -362,7 +368,8 @@ section (not syntax fields) and recovered from backward node traversal. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html index a32b24a7..b60d794f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html @@ -205,7 +205,8 @@ the default. -
+

Initializes a new instance with default settings.

+
@@ -231,7 +232,8 @@ the default. -
+

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

+
@@ -241,7 +243,8 @@ the default.

Parameters

src XElement
-
+

Source XML element.

+
@@ -266,7 +269,8 @@ the default. -
+

Default instance with standard settings.

+
@@ -329,7 +333,8 @@ the default. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html index 1380d524..714419e6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html @@ -210,6 +210,22 @@ G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain.

+ + +
+
FanucPathSmoothingSyntax
+

Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) +and records the modal state in the PathSmoothing JSON +section using the FanucPathSmoothing schema. Q1 enables, +Q0 disables; the optional R{n} precision-level is preserved as +Level. The simulation does not +alter the tool path — this is a controller-internal interpolation black +box; the captured state exists for bidirectional NC-text reconstruction.

+

+Modal carry to subsequent blocks is handled by +ModalCarrySyntax, which already tracks the +PathSmoothing section key and deep-clones it forward. +

@@ -531,13 +547,6 @@ Must be placed after syntaxes that write ProgramXyz and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). - -
-
-
PathSmoothingSyntax
-

Consumes G05.1 (high-precision contour / path smoothing) and records -its modal state. Q1 enables, Q0 disables. The simulation does not alter -the tool path — this is a controller-internal interpolation black box.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html index def6cfb6..92aeba3f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnostic.html @@ -188,7 +188,8 @@ For irregular cases that don't fit the pattern, use a custom string. -
+

Creates a fully-populated NcDiagnostic.

+
@@ -198,17 +199,23 @@ For irregular cases that don't fit the pattern, use a custom string.

Parameters

severity NcDiagnosticSeverity
-
+

Importance level — see NcDiagnosticSeverity.

+
category NcDiagnosticCategory
-
+

Diagnostic category — see NcDiagnosticCategory.

+
id string
-
+

Structured diagnostic ID (see Id).

+
text string
-
+

End-user friendly message text.

+
detail object
-
+

Optional detail data or exception. Null if not applicable.

+
sentence Sentence
-
+

The NC source block that triggered this diagnostic; null for pipeline-level messages.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html index 6007e8b7..4fe25751 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.NcDiagnosticProgress.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,12 @@ Class NcDiagnosticProgress
Assembly
HiMech.dll
-
+

Helper that emits NcDiagnostic records via an +IProgress<T> sink. Provides one method per +(NcDiagnosticCategory, NcDiagnosticSeverity) +pair, each with an optional Sentence overload locating +the issue in the NC source.

+
@@ -190,7 +195,9 @@ Class NcDiagnosticProgress -
+

Creates a NcDiagnosticProgress that forwards every +reported NcDiagnostic to progress.

+
@@ -200,7 +207,8 @@ Class NcDiagnosticProgress

Parameters

progress IProgress<object>
-
+

Sink that receives each diagnostic as object.

+
@@ -225,7 +233,8 @@ Class NcDiagnosticProgress -
+

Emits Configuration + Error located at sentence.

+
@@ -262,7 +271,8 @@ Class NcDiagnosticProgress -
+

Emits Configuration + Error (dependency/config missing, cannot proceed).

+
@@ -297,7 +307,8 @@ Class NcDiagnosticProgress -
+

Emits Configuration + Message located at sentence.

+
@@ -332,7 +343,8 @@ Class NcDiagnosticProgress -
+

Emits Configuration + Message (dependency/config applied, informational event).

+
@@ -365,7 +377,8 @@ Class NcDiagnosticProgress -
+

Emits Configuration + Warning located at sentence.

+
@@ -402,7 +415,8 @@ Class NcDiagnosticProgress -
+

Emits Configuration + Warning (dependency/config missing, using fallback).

+
@@ -470,7 +484,8 @@ Class NcDiagnosticProgress -
+

Emits System + Error located at sentence.

+
@@ -507,7 +522,8 @@ Class NcDiagnosticProgress -
+

Emits System + Error (pipeline exception or unconsidered case).

+
@@ -542,7 +558,8 @@ Class NcDiagnosticProgress -
+

Emits System + Message located at sentence.

+
@@ -577,7 +594,8 @@ Class NcDiagnosticProgress -
+

Emits System + Message (pipeline lifecycle / informational).

+
@@ -610,7 +628,8 @@ Class NcDiagnosticProgress -
+

Emits Unsupported + Error located at sentence.

+
@@ -647,7 +666,8 @@ Class NcDiagnosticProgress -
+

Emits Unsupported + Error (recognized but unimplemented, likely matters).

+
@@ -682,7 +702,8 @@ Class NcDiagnosticProgress -
+

Emits Unsupported + Warning located at sentence.

+
@@ -719,7 +740,8 @@ Class NcDiagnosticProgress -
+

Emits Unsupported + Warning (recognized but unimplemented, likely harmless).

+
@@ -754,7 +776,8 @@ Class NcDiagnosticProgress -
+

Emits Validation + Error located at sentence.

+
@@ -791,7 +814,8 @@ Class NcDiagnosticProgress -
+

Emits Validation + Error (manufacturing/physics is unfeasible).

+
@@ -826,7 +850,8 @@ Class NcDiagnosticProgress -
+

Emits Validation + Warning located at sentence.

+
@@ -863,7 +888,8 @@ Class NcDiagnosticProgress -
+

Emits Validation + Warning (manufacturing/physics may be unfeasible).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html index aa7da847..cdb79d7a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html @@ -209,7 +209,8 @@ regardless of the skip switch. -
+

Initializes a new instance with default settings.

+
@@ -235,7 +236,8 @@ regardless of the skip switch. -
+

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

+
@@ -245,7 +247,8 @@ regardless of the skip switch.

Parameters

src XElement
-
+

Source XML element.

+
@@ -302,7 +305,8 @@ regardless of the skip switch. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html index f5a279b5..f0fce607 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html @@ -6,7 +6,7 @@ - + @@ -97,7 +97,10 @@ Class QuoteCommentSyntax
Assembly
HiMech.dll
-
+

Parses parenthesized comments such as (comment text) from the +remaining unparsed text and emits a Comment section with +the () symbol.

+
@@ -192,7 +195,8 @@ Class QuoteCommentSyntax -
+

Initializes a new instance with default settings.

+
@@ -218,7 +222,8 @@ Class QuoteCommentSyntax -
+

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

+
@@ -228,7 +233,8 @@ Class QuoteCommentSyntax

Parameters

src XElement
-
+

Source XML element.

+
@@ -285,7 +291,8 @@ Class QuoteCommentSyntax -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html index a429d091..04f8de38 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html @@ -96,7 +96,10 @@ Classes
QuoteCommentSyntax
-
+

Parses parenthesized comments such as (comment text) from the +remaining unparsed text and emits a Comment section with +the () symbol.

+
TailCommentSyntax
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html index 5b2f1241..0a585315 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html @@ -213,7 +213,9 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as
+

Initializes a new instance with the given category path, tag list, and +variable-tag pattern.

+
@@ -223,11 +225,14 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as Parameters
categoryPath IEnumerable<string>
-
+

JSON path under Parsing where matches are written.

+
tags IEnumerable<string>
-
+

Single-letter tag names whose values are grabbed.

+
variableTag string
-
+

Regex/literal recognizing a variable reference as a value.

+
@@ -248,7 +253,8 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as
+

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

+
@@ -258,7 +264,8 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as Parameters
src XElement
-
+

Source XML element.

+
@@ -283,7 +290,8 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html index e320bc30..00ce651f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html @@ -193,7 +193,8 @@ Class HeidenhainDatumSettingSyntax -
+

Initializes a new instance with default settings.

+
@@ -219,7 +220,8 @@ Class HeidenhainDatumSettingSyntax -
+

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

+
@@ -229,7 +231,8 @@ Class HeidenhainDatumSettingSyntax

Parameters

src XElement
-
+

Source XML element.

+
@@ -286,7 +289,8 @@ Class HeidenhainDatumSettingSyntax -
+

Tags to grab as float-valued coordinates within the cycle body.

+
@@ -317,7 +321,8 @@ Class HeidenhainDatumSettingSyntax -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html index 23c8e690..86ed4b09 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html @@ -193,7 +193,8 @@ Class HeidenhainDatumShiftSyntax -
+

Initializes a new instance with default settings.

+
@@ -219,7 +220,8 @@ Class HeidenhainDatumShiftSyntax -
+

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

+
@@ -229,7 +231,8 @@ Class HeidenhainDatumShiftSyntax

Parameters

src XElement
-
+

Source XML element.

+
@@ -286,7 +289,8 @@ Class HeidenhainDatumShiftSyntax -
+

Tags to grab as float-valued coordinates within the cycle body.

+
@@ -317,7 +321,8 @@ Class HeidenhainDatumShiftSyntax -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html index fe264630..0956c00c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html @@ -226,7 +226,8 @@ Output:

-
+

Initializes a new instance with default settings.

+
@@ -252,7 +253,8 @@ Output:

-
+

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

+
@@ -262,7 +264,8 @@ Output:

Parameters

src XElement
-
+

Source XML element.

+
@@ -354,7 +357,8 @@ Output:

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html index 2211cf2d..e921baf3 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html @@ -220,7 +220,8 @@ Output:

-
+

Initializes a new instance with default settings.

+
@@ -246,7 +247,8 @@ Output:

-
+

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

+
@@ -256,7 +258,8 @@ Output:

Parameters

src XElement
-
+

Source XML element.

+
@@ -313,7 +316,8 @@ Output:

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html index c76d1a33..afbcc35e 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html @@ -193,7 +193,8 @@ Class HeidenhainCyclDefSyntax -
+

Initializes a new instance with default settings.

+
@@ -219,7 +220,8 @@ Class HeidenhainCyclDefSyntax -
+

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

+
@@ -229,7 +231,8 @@ Class HeidenhainCyclDefSyntax

Parameters

src XElement
-
+

Source XML element.

+
@@ -253,7 +256,9 @@ Class HeidenhainCyclDefSyntax -
+

JSON key under Parsing that holds the parsed cycle number +(e.g. 247 for CYCL DEF 247).

+
@@ -320,7 +325,8 @@ Class HeidenhainCyclDefSyntax -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html index 36427969..0cf1e7e4 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html @@ -225,7 +225,8 @@ Extends
+

Initializes a new instance with default settings.

+
+

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

+
@@ -261,7 +263,8 @@ Extends Parameters
src XElement
-
+

Source XML element.

+
@@ -286,7 +289,8 @@ Extends
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html index cc95cf84..c3eb0814 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html @@ -193,7 +193,8 @@ Class HeidenhainLSyntax -
+

Initializes a new instance with default settings.

+
@@ -219,7 +220,8 @@ Class HeidenhainLSyntax -
+

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

+
@@ -229,7 +231,8 @@ Class HeidenhainLSyntax

Parameters

src XElement
-
+

Source XML element.

+
@@ -286,7 +289,8 @@ Class HeidenhainLSyntax -
+

Axis tags grabbed as float-valued coordinates after the leading L.

+
@@ -317,7 +321,8 @@ Class HeidenhainLSyntax -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html index 330b8e23..26ff1ecb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html @@ -218,7 +218,8 @@ Output:

-
+

Initializes a new instance with default settings.

+
@@ -244,7 +245,8 @@ Output:

-
+

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

+
@@ -254,7 +256,8 @@ Output:

Parameters

src XElement
-
+

Source XML element.

+
@@ -311,7 +314,8 @@ Output:

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html index 8a216285..fdd622b0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html @@ -234,7 +234,8 @@ Output:

-
+

Initializes a new instance with default settings.

+
@@ -260,7 +261,8 @@ Output:

-
+

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

+
@@ -270,7 +272,8 @@ Output:

Parameters

src XElement
-
+

Source XML element.

+
@@ -394,7 +397,8 @@ PROPR: projection angle, PROMIN: minimum angle, ROT: rotation of tilted plane. -
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html index be2813eb..f664889c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html @@ -213,7 +213,8 @@ Output:

-
+

Initializes a new instance with default settings.

+
@@ -239,7 +240,8 @@ Output:

-
+

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

+
@@ -249,7 +251,8 @@ Output:

Parameters

src XElement
-
+

Source XML element.

+
@@ -306,7 +309,8 @@ Output:

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html index d8ab3a1c..cf71b99a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html @@ -216,7 +216,8 @@ Output:

-
+

Initializes a new instance with default settings.

+
@@ -242,7 +243,8 @@ Output:

-
+

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

+
@@ -252,7 +254,8 @@ Output:

Parameters

src XElement
-
+

Source XML element.

+
@@ -309,7 +312,8 @@ Output:

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html index cdc9b8f6..1b160103 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html @@ -213,7 +213,9 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as
+

Initializes a new instance with the given category path, tag list, and +variable-tag pattern.

+
@@ -223,11 +225,14 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as Parameters
categoryPath IEnumerable<string>
-
+

JSON path under Parsing where matches are written.

+
tags IEnumerable<string>
-
+

Single-letter tag names whose values are grabbed.

+
variableTag string
-
+

Regex/literal recognizing a variable reference as a value.

+
@@ -248,7 +253,8 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as
+

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

+
@@ -258,7 +264,8 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as Parameters
src XElement
-
+

Source XML element.

+
@@ -283,7 +290,8 @@ Variable text (e.g. Q2, #1, [#1+#2]) remains as
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html index 477f6f44..c445c035 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html @@ -208,7 +208,9 @@ before {prefix}{digits} patterns (e.g., R1) attempt to match. -
+

Initializes a new instance with the given category path, optional terminator +keywords, and an identifier regex pattern.

+
@@ -218,11 +220,14 @@ before {prefix}{digits} patterns (e.g., R1) attempt to match.

Parameters

categoryPath IEnumerable<string>
-
+

JSON path under Parsing where assignments are written.

+
terminateWords IEnumerable<string>
-
+

Optional keywords that end the right-hand expression.

+
identPattern string
-
+

Regex matching the variable identifier; defaults to DefaultIdentPattern.

+
@@ -243,7 +248,8 @@ before {prefix}{digits} patterns (e.g., R1) attempt to match. -
+

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

+
@@ -253,7 +259,8 @@ before {prefix}{digits} patterns (e.g., R1) attempt to match.

Parameters

src XElement
-
+

Source XML element.

+
@@ -277,7 +284,9 @@ before {prefix}{digits} patterns (e.g., R1) attempt to match. -
+

Default identifier regex (at least 2 characters; first char letter or underscore). +Used when IdentPattern is not overridden.

+
@@ -312,7 +321,8 @@ before {prefix}{digits} patterns (e.g., R1) attempt to match. -
+

JSON path under Parsing where matched assignments are written.

+
@@ -408,7 +418,9 @@ Default: [A-Za-z_]\w+ (at least 2 characters).

-
+

Optional words (e.g. block-end keywords) that terminate the right-hand +expression so the remainder is left in UnparsedText.

+
@@ -439,7 +451,8 @@ Default: [A-Za-z_]\w+ (at least 2 characters).

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html index a52a35e2..c0bcb97d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html @@ -247,7 +247,8 @@ collection only if assignments should land at the Parsing root.

-
+

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

+
@@ -257,7 +258,8 @@ collection only if assignments should land at the Parsing root.

Parameters

src XElement
-
+

Source XML element.

+
@@ -282,7 +284,8 @@ collection only if assignments should land at the Parsing root.

-
+

JSON path under Parsing where matched assignments are written.

+
@@ -380,7 +383,8 @@ variable-reading syntaxes can target a single well-defined subtree.

-
+

Numeric tag suffixes accepted (e.g. 1, 100) when paired with VarPrefix.

+
@@ -411,7 +415,9 @@ variable-reading syntaxes can target a single well-defined subtree.

-
+

Optional keywords that terminate the right-hand expression so the +remainder is left in UnparsedText.

+
@@ -442,7 +448,8 @@ variable-reading syntaxes can target a single well-defined subtree.

-
+

Variable prefix (e.g. #, R, Q) preceding the numeric tag.

+
@@ -473,7 +480,8 @@ variable-reading syntaxes can target a single well-defined subtree.

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html index 6ac23ea8..1bf52450 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html @@ -203,7 +203,9 @@ ISO: X100.3Y3.3

-
+

Initializes a new instance with the given category path, tag list, and +variable-tag pattern.

+
@@ -213,11 +215,14 @@ ISO: X100.3Y3.3

Parameters

categoryPath IEnumerable<string>
-
+

JSON path under Parsing where matches are written.

+
tags IEnumerable<string>
-
+

Single-letter tag names whose values are grabbed.

+
variableTag string
-
+

Regex/literal recognizing a variable reference as a value.

+
@@ -238,7 +243,8 @@ ISO: X100.3Y3.3

-
+

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

+
@@ -248,7 +254,8 @@ ISO: X100.3Y3.3

Parameters

src XElement
-
+

Source XML element.

+
@@ -273,7 +280,8 @@ ISO: X100.3Y3.3

-
+

JSON path under Parsing where matched tag-values are written.

+
@@ -336,7 +344,8 @@ ISO: X100.3Y3.3

-
+

Single-letter tag names whose values are grabbed (e.g. X, Y, Z, F).

+
@@ -367,7 +376,9 @@ ISO: X100.3Y3.3

-
+

Regex (or literal) that recognizes a variable reference token +(e.g. Q2, #1, [#1+#2]) as the value of a tag.

+
@@ -398,7 +409,8 @@ ISO: X100.3Y3.3

-
+

XML element name used to register this syntax with XFactory.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html index eca9e96c..4e8d3555 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html @@ -207,7 +207,8 @@ project files. -
+

Creates an empty ModalCarrySyntax; populate TrackedKeys before use.

+
@@ -233,7 +234,9 @@ project files. -
+

Reconstructs a ModalCarrySyntax from a project XML element +previously produced by MakeXmlSource(string, string, bool).

+
@@ -243,7 +246,8 @@ project files.

Parameters

src XElement
-
+

XML element carrying a TrackedKeys child with one Key per entry; null is treated as defaults.

+
@@ -309,7 +313,11 @@ authored values (the latter have no -
+

Default-configured ModalCarrySyntax with the standard +modal sections (TiltTransform, PathSmoothing, +IsoLocalCoordinateOffset, CannedCycle, MotionState, +MachineCoordinateState) tracked.

+
@@ -404,7 +412,8 @@ authored values (the latter have no -
+

XML element name for Regs registration.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html index b5ca1935..5a718866 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html @@ -206,7 +206,8 @@ replaced with a -
+
@@ -232,7 +233,10 @@ replaced with a -
+

Reconstructs a RadiusCompensationSyntax from a project XML element +previously produced by MakeXmlSource(string, string, bool). The element carries no fields, +so src is used only for factory dispatch.

+
@@ -242,7 +246,8 @@ replaced with a Parameters
src XElement
-
+

XML element previously produced by MakeXmlSource(string, string, bool).

+
@@ -366,7 +371,8 @@ and CompoundMotion arc items.

-
+

XML element name for Regs registration.

+
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 22ae6259..0e7b67b5 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html @@ -193,7 +193,8 @@ Also support single line NC block.

-
+

Creates a HeidenhainSegmenter with the default block-keyword list.

+
@@ -255,7 +256,8 @@ Also support single line NC block.

-
+

XML element name used to register and serialize this segmenter.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html index 7cfd136f..89204ece 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html @@ -195,7 +195,8 @@ Lines without the delimiter produce a single
+
@@ -221,7 +222,8 @@ Lines without the delimiter produce a single
+

Creates an InlineDelimiterSegmenter with a custom delimiter character.

+
@@ -355,7 +357,8 @@ Lines without the delimiter produce a single
+

XML element name used to register and serialize this segmenter.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html index b9ed69bd..b9bd7192 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html @@ -232,7 +232,8 @@ non-linear because the tool orientation changes during the move. -
+

XML element name used to register and serialize this semantic.

+
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CoolantSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CoolantSemantic.html index 8a5639bf..23ff9047 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CoolantSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CoolantSemantic.html @@ -229,7 +229,8 @@ act per real transition rather than one per block.

-
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html index dae0201f..d29e819d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html @@ -233,7 +233,10 @@ so that the script runs before motion and other acts.

-
+

JSON property key on the CsScript section to read for this +semantic (typically BeginScript or +EndScript).

+
@@ -264,7 +267,8 @@ so that the script runs before motion and other acts.

-
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html index 0b6b17d4..9c0670c9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html @@ -233,7 +233,10 @@ so that the script runs after motion and other acts.

-
+

JSON property key on the CsScript section to read for this +semantic (typically BeginScript or +EndScript).

+
@@ -264,7 +267,8 @@ so that the script runs after motion and other acts.

-
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptSemantic.html index 026e7376..41b23f41 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.CsScriptSemantic.html @@ -275,7 +275,10 @@ modified at runtime.

-
+

JSON property key on the CsScript section to read for this +semantic (typically BeginScript or +EndScript).

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html index 338503dc..17510546 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html @@ -226,7 +226,8 @@ Requires -
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McArcMotionSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McArcMotionSemantic.html index 3ab04be0..81564d5a 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McArcMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McArcMotionSemantic.html @@ -228,7 +228,8 @@ Reads arc center, plane normal, and direction from the -
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html index 7c38e9e0..4875ad45 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html @@ -232,7 +232,8 @@ composite feedrate: d = √(ΔX² + ΔY² + ΔZ² + ΔA_deg² + ΔB_deg² -
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html index 32da213f..5eb09d8d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html @@ -227,7 +227,8 @@ from the previous block.

-
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html index 40e792c8..9cdbe75f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html @@ -226,7 +226,8 @@ Does not emit any IAct; o -
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ToolChangeSemantic.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ToolChangeSemantic.html index c60147a9..3d5185e1 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ToolChangeSemantic.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Semantics.ToolChangeSemantic.html @@ -227,7 +227,8 @@ Reads
+

XML element name used to register and serialize this semantic.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html index 3303774f..55479d96 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Sentence.html @@ -432,7 +432,8 @@ public Sentence(List<IndexedFileLine> indexedFileLineList) -
+

Returns the source Sentence carried by this object.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html index 14b73b9e..6fcdaa73 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.SoftNcRunner.html @@ -192,7 +192,8 @@ Class SoftNcRunner -
+

Creates an empty runner; populate the pipeline lists before use.

+
@@ -218,7 +219,11 @@ Class SoftNcRunner -
+

Reconstructs a SoftNcRunner from a project XML element. +Each pipeline list (NcDependencyList, Segmenter, +NcInitializationList, NcSyntaxList, +NcSemanticList) is rehydrated via XFactory.

+
@@ -228,15 +233,20 @@ Class SoftNcRunner

Parameters

src XElement
-
+

XML element previously produced by MakeXmlSource(string, string, bool).

+
baseDirectory string
-
+

Project base directory for resolving relative paths.

+
relFile string
-
+

Project file path relative to baseDirectory.

+
progress IProgress<object>
-
+

Diagnostic sink propagated to nested factories.

+
res object[]
-
+

Optional ambient resources (e.g. ProjectApiVersion for legacy patches).

+
@@ -261,7 +271,9 @@ Class SoftNcRunner -
+

Brand preset for Fanuc — composes a SoftNcRunner whose +NcSyntaxList comes from DefaultSyntaxList.

+
@@ -292,7 +304,9 @@ Class SoftNcRunner -
+

Brand preset for Heidenhain — composes a SoftNcRunner whose +NcSyntaxList comes from DefaultSyntaxList.

+
@@ -323,7 +337,9 @@ Class SoftNcRunner -
+

Brand preset for Mazak — composes a SoftNcRunner whose +NcSyntaxList comes from DefaultSyntaxList.

+
@@ -354,7 +370,9 @@ Class SoftNcRunner -
+

External configuration providers consumed by syntaxes/semantics +(machine axes, tool offsets, coordinate tables, block-skip flags, etc.).

+
@@ -385,7 +403,8 @@ Class SoftNcRunner -
+

Seeds the initial SyntaxPiece JSON state (e.g. home position, defaults).

+
@@ -416,7 +435,9 @@ Class SoftNcRunner -
+

Final-stage semantics that turn the last syntax layer into +SourcedActEntry records consumed by the runtime.

+
@@ -447,7 +468,9 @@ Class SoftNcRunner -
+

Ordered syntax pipeline. Each entry consumes the previous layer's +SyntaxPiece stream and emits the next layer.

+
@@ -478,7 +501,8 @@ Class SoftNcRunner -
+

Splits raw NC text into Sentence blocks.

+
@@ -509,7 +533,9 @@ Class SoftNcRunner -
+

Brand preset for Siemens — composes a SoftNcRunner whose +NcSyntaxList comes from DefaultSyntaxList.

+
@@ -540,7 +566,9 @@ Class SoftNcRunner -
+

Brand preset for Syntec — composes a SoftNcRunner whose +NcSyntaxList comes from DefaultSyntaxList.

+
@@ -571,7 +599,8 @@ Class SoftNcRunner -
+

XML element name for Regs registration.

+
@@ -737,7 +766,12 @@ Remove this region when HardNcEnv is fully replaced.

-
+

Drives the NcSemanticList over the post-syntax +SyntaxPiece stream starting at startNode, +yielding a SourcedActEntry for each emitted IAct +(or a single null-act entry when a semantic produces no acts but still +updates the source SyntaxPiece).

+
@@ -747,11 +781,14 @@ Remove this region when HardNcEnv is fully replaced.

Parameters

startNode LazyLinkedListNode<SyntaxPiece>
-
+

First node to evaluate; iteration walks Next.

+
ncDiagnosticProgress NcDiagnosticProgress
-
+

Sink for semantic exceptions.

+
cancellationToken CancellationToken
-
+

Cancellation token (checked between blocks).

+

Returns

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html index d5d1888d..2d90c7ab 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html @@ -228,7 +228,12 @@ Class FanucSyntaxUtil

G05.1 High-precision contour control (Fanuc AICC / Nano Smoothing). -Q1 enables, Q0 disables.

+Q1 enables, Q0 disables. Optional R{n} selects the precision / +smoothness level number (R1..R10) — captured here so the parameter +does not leak into the standalone Parsing.R tag and so +FanucPathSmoothingSyntax can record it +in the PathSmoothing modal section for bidirectional NC-text +reconstruction.

@@ -262,7 +267,11 @@ Q1 enables, Q0 disables.

G43.4: Fanuc TCPM (Tool Center Point Management / RTCP). Fanuc-specific — not in GenericSyntaxKit. -Siemens equivalent: TRAORI. Heidenhain equivalent: M128.

+Siemens equivalent: TRAORI. Heidenhain equivalent: M128. +TerminateWords intentionally only M: H (offset id) commonly +appears after move axes or other G modifiers in the same block +(e.g., G43.4 Z5. H1, G43.4 G54 H1). Using G/X/Y/Z +would truncate scope before H and lose the offset id.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GenericSyntaxKit.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GenericSyntaxKit.html index 3c95f763..bdbaf25c 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GenericSyntaxKit.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.GenericSyntaxKit.html @@ -292,7 +292,11 @@ Terminates at G/M only.

-

G41/G42 Cutter radius compensation syntax.

+

G41/G42 Cutter radius compensation syntax. +TerminateWords intentionally only M: D (offset id) commonly +appears after move axes or other G modifiers in the same block +(e.g., G41 X10. D1, G54 G41 D1). Using G/X/Y/Z would +truncate scope before D and lose the offset id.

@@ -325,7 +329,11 @@ Terminates at G/M only.

G43/G44 Tool length compensation syntax (ISO standard). -G43.4 (TCPM) is Fanuc-specific — see G43p4Syntax.

+G43.4 (TCPM) is Fanuc-specific — see G43p4Syntax. +TerminateWords intentionally only M: H (offset id) commonly +appears after move axes or other G modifiers in the same block +(e.g., G43Z5.H01, G43 G54 H1). Using G/X/Y/Z would +truncate scope before H and lose the offset id.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html index 093a3598..da0db851 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.SyntaxPiece.html @@ -309,7 +309,8 @@ to store typed values at parse time. -
+

Returns the source Sentence carried by this object.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html index 1c43ec76..24bbd59d 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.html @@ -107,7 +107,12 @@ For irregular cases that don't fit the pattern, use a custom string.
NcDiagnosticProgress
-
+

Helper that emits NcDiagnostic records via an +IProgress<T> sink. Provides one method per +(NcDiagnosticCategory, NcDiagnosticSeverity) +pair, each with an optional Sentence overload locating +the issue in the NC source.

+
Sentence
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html index 9cd6e625..e9d513bb 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.HardNcLine.html @@ -2302,7 +2302,8 @@ So be care that do not change the NC XYZ if not needed.

-
+

Returns the source Sentence carried by this object.

+
diff --git a/App/wwwroot/HiAPI-docsite/api/toc.html b/App/wwwroot/HiAPI-docsite/api/toc.html index 355d39c9..c9b41de8 100644 --- a/App/wwwroot/HiAPI-docsite/api/toc.html +++ b/App/wwwroot/HiAPI-docsite/api/toc.html @@ -50,6 +50,9 @@
  • CubeTree.diff_response_func_t
  • +
  • + CubeTreeExportExtensions +
  • CubeTreeFile
  • @@ -1008,12 +1011,18 @@
  • NativeTopoStlfr
  • +
  • + ObjUtil +
  • PairZr
  • PairZrUtil
  • +
  • + PlyUtil +
  • Polar3d
  • @@ -2600,6 +2609,9 @@
  • Dwell
  • +
  • + FanucPathSmoothing +
  • Feedrate
  • @@ -2618,6 +2630,9 @@
  • IDwellDef
  • +
  • + IFanucPathSmoothingDef +
  • IFeedrateDef
  • @@ -2806,6 +2821,9 @@
  • DrillingCycleSyntax
  • +
  • + FanucPathSmoothingSyntax +
  • FeedrateSyntax
  • @@ -2854,9 +2872,6 @@
  • McXyzSyntax
  • -
  • - PathSmoothingSyntax -
  • PeckDrillingCycleSyntax
  • diff --git a/App/wwwroot/HiAPI-docsite/api/toc.json b/App/wwwroot/HiAPI-docsite/api/toc.json index cb9ed538..9e395154 100644 --- a/App/wwwroot/HiAPI-docsite/api/toc.json +++ b/App/wwwroot/HiAPI-docsite/api/toc.json @@ -1,2 +1,2 @@ -{"items":[{"name":"Hi.Cbtr","href":"Hi.Cbtr.html","topicHref":"Hi.Cbtr.html","topicUid":"Hi.Cbtr","type":"Namespace","items":[{"name":"CachedTris","href":"Hi.Cbtr.CachedTris.html","topicHref":"Hi.Cbtr.CachedTris.html","topicUid":"Hi.Cbtr.CachedTris","type":"Class"},{"name":"CachedTris.SweepingMode","href":"Hi.Cbtr.CachedTris.SweepingMode.html","topicHref":"Hi.Cbtr.CachedTris.SweepingMode.html","topicUid":"Hi.Cbtr.CachedTris.SweepingMode","type":"Enum"},{"name":"CbtrPickable","href":"Hi.Cbtr.CbtrPickable.html","topicHref":"Hi.Cbtr.CbtrPickable.html","topicUid":"Hi.Cbtr.CbtrPickable","type":"Class"},{"name":"ConstructionDefectDisplayee","href":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicHref":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicUid":"Hi.Cbtr.ConstructionDefectDisplayee","type":"Class"},{"name":"CubeTree","href":"Hi.Cbtr.CubeTree.html","topicHref":"Hi.Cbtr.CubeTree.html","topicUid":"Hi.Cbtr.CubeTree","type":"Class"},{"name":"CubeTree.DefectNodeInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo","type":"Class"},{"name":"CubeTree.DefectNodeInfo.TriWireInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo","type":"Class"},{"name":"CubeTree.DefectTriWireInfoInterop","href":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicHref":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicUid":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop","type":"Struct"},{"name":"CubeTree.InfNodeInfo","href":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.InfNodeInfo","type":"Class"},{"name":"CubeTree.TriWireRelationInterop","href":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicHref":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicUid":"Hi.Cbtr.CubeTree.TriWireRelationInterop","type":"Struct"},{"name":"CubeTree.diff_response_func_t","href":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicHref":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicUid":"Hi.Cbtr.CubeTree.diff_response_func_t","type":"Delegate"},{"name":"CubeTreeFile","href":"Hi.Cbtr.CubeTreeFile.html","topicHref":"Hi.Cbtr.CubeTreeFile.html","topicUid":"Hi.Cbtr.CubeTreeFile","type":"Class"},{"name":"DiffAttachment","href":"Hi.Cbtr.DiffAttachment.html","topicHref":"Hi.Cbtr.DiffAttachment.html","topicUid":"Hi.Cbtr.DiffAttachment","type":"Class"},{"name":"GeomBoolCache","href":"Hi.Cbtr.GeomBoolCache.html","topicHref":"Hi.Cbtr.GeomBoolCache.html","topicUid":"Hi.Cbtr.GeomBoolCache","type":"Class"},{"name":"GeomBoolCacheEnum","href":"Hi.Cbtr.GeomBoolCacheEnum.html","topicHref":"Hi.Cbtr.GeomBoolCacheEnum.html","topicUid":"Hi.Cbtr.GeomBoolCacheEnum","type":"Enum"},{"name":"IGetInitStickConvex","href":"Hi.Cbtr.IGetInitStickConvex.html","topicHref":"Hi.Cbtr.IGetInitStickConvex.html","topicUid":"Hi.Cbtr.IGetInitStickConvex","type":"Interface"},{"name":"InfDefectDisplayee","href":"Hi.Cbtr.InfDefectDisplayee.html","topicHref":"Hi.Cbtr.InfDefectDisplayee.html","topicUid":"Hi.Cbtr.InfDefectDisplayee","type":"Class"},{"name":"InitStickConvex","href":"Hi.Cbtr.InitStickConvex.html","topicHref":"Hi.Cbtr.InitStickConvex.html","topicUid":"Hi.Cbtr.InitStickConvex","type":"Class"},{"name":"LsStl","href":"Hi.Cbtr.LsStl.html","topicHref":"Hi.Cbtr.LsStl.html","topicUid":"Hi.Cbtr.LsStl","type":"Class"},{"name":"Substraction","href":"Hi.Cbtr.Substraction.html","topicHref":"Hi.Cbtr.Substraction.html","topicUid":"Hi.Cbtr.Substraction","type":"Class"},{"name":"UnhighlightablePickable","href":"Hi.Cbtr.UnhighlightablePickable.html","topicHref":"Hi.Cbtr.UnhighlightablePickable.html","topicUid":"Hi.Cbtr.UnhighlightablePickable","type":"Class"},{"name":"UnmanagedSubstraction","href":"Hi.Cbtr.UnmanagedSubstraction.html","topicHref":"Hi.Cbtr.UnmanagedSubstraction.html","topicUid":"Hi.Cbtr.UnmanagedSubstraction","type":"Class"},{"name":"WireCube","href":"Hi.Cbtr.WireCube.html","topicHref":"Hi.Cbtr.WireCube.html","topicUid":"Hi.Cbtr.WireCube","type":"Class"},{"name":"node_diff_t","href":"Hi.Cbtr.node_diff_t.html","topicHref":"Hi.Cbtr.node_diff_t.html","topicUid":"Hi.Cbtr.node_diff_t","type":"Struct"}]},{"name":"Hi.Collision","href":"Hi.Collision.html","topicHref":"Hi.Collision.html","topicUid":"Hi.Collision","type":"Namespace","items":[{"name":"AnchoredCollidableLeaf","href":"Hi.Collision.AnchoredCollidableLeaf.html","topicHref":"Hi.Collision.AnchoredCollidableLeaf.html","topicUid":"Hi.Collision.AnchoredCollidableLeaf","type":"Class"},{"name":"AnchoredCollidablePair","href":"Hi.Collision.AnchoredCollidablePair.html","topicHref":"Hi.Collision.AnchoredCollidablePair.html","topicUid":"Hi.Collision.AnchoredCollidablePair","type":"Class"},{"name":"CollidableStl","href":"Hi.Collision.CollidableStl.html","topicHref":"Hi.Collision.CollidableStl.html","topicUid":"Hi.Collision.CollidableStl","type":"Class"},{"name":"CollisionFlag","href":"Hi.Collision.CollisionFlag.html","topicHref":"Hi.Collision.CollisionFlag.html","topicUid":"Hi.Collision.CollisionFlag","type":"Enum"},{"name":"CollisionIndexPair","href":"Hi.Collision.CollisionIndexPair.html","topicHref":"Hi.Collision.CollisionIndexPair.html","topicUid":"Hi.Collision.CollisionIndexPair","type":"Class"},{"name":"CollisionUtil","href":"Hi.Collision.CollisionUtil.html","topicHref":"Hi.Collision.CollisionUtil.html","topicUid":"Hi.Collision.CollisionUtil","type":"Class"},{"name":"FuncAnchoredCollidable","href":"Hi.Collision.FuncAnchoredCollidable.html","topicHref":"Hi.Collision.FuncAnchoredCollidable.html","topicUid":"Hi.Collision.FuncAnchoredCollidable","type":"Class"},{"name":"IAnchoredCollidableBased","href":"Hi.Collision.IAnchoredCollidableBased.html","topicHref":"Hi.Collision.IAnchoredCollidableBased.html","topicUid":"Hi.Collision.IAnchoredCollidableBased","type":"Interface"},{"name":"IAnchoredCollidableLeaf","href":"Hi.Collision.IAnchoredCollidableLeaf.html","topicHref":"Hi.Collision.IAnchoredCollidableLeaf.html","topicUid":"Hi.Collision.IAnchoredCollidableLeaf","type":"Interface"},{"name":"IAnchoredCollidableNode","href":"Hi.Collision.IAnchoredCollidableNode.html","topicHref":"Hi.Collision.IAnchoredCollidableNode.html","topicUid":"Hi.Collision.IAnchoredCollidableNode","type":"Interface"},{"name":"IAnchoredCollidableStem","href":"Hi.Collision.IAnchoredCollidableStem.html","topicHref":"Hi.Collision.IAnchoredCollidableStem.html","topicUid":"Hi.Collision.IAnchoredCollidableStem","type":"Interface"},{"name":"ICollidable","href":"Hi.Collision.ICollidable.html","topicHref":"Hi.Collision.ICollidable.html","topicUid":"Hi.Collision.ICollidable","type":"Interface"},{"name":"ICollidee","href":"Hi.Collision.ICollidee.html","topicHref":"Hi.Collision.ICollidee.html","topicUid":"Hi.Collision.ICollidee","type":"Interface"},{"name":"ICollisionArena","href":"Hi.Collision.ICollisionArena.html","topicHref":"Hi.Collision.ICollisionArena.html","topicUid":"Hi.Collision.ICollisionArena","type":"Interface"},{"name":"ICollisionIndex","href":"Hi.Collision.ICollisionIndex.html","topicHref":"Hi.Collision.ICollisionIndex.html","topicUid":"Hi.Collision.ICollisionIndex","type":"Interface"},{"name":"IGetAnchoredCollidablePairs","href":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicHref":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicUid":"Hi.Collision.IGetAnchoredCollidablePairs","type":"Interface"},{"name":"IGetCollidable","href":"Hi.Collision.IGetCollidable.html","topicHref":"Hi.Collision.IGetCollidable.html","topicUid":"Hi.Collision.IGetCollidable","type":"Interface"},{"name":"IGetCollisionIndexPairs","href":"Hi.Collision.IGetCollisionIndexPairs.html","topicHref":"Hi.Collision.IGetCollisionIndexPairs.html","topicUid":"Hi.Collision.IGetCollisionIndexPairs","type":"Interface"},{"name":"IGetDefaultCollidablePairs","href":"Hi.Collision.IGetDefaultCollidablePairs.html","topicHref":"Hi.Collision.IGetDefaultCollidablePairs.html","topicUid":"Hi.Collision.IGetDefaultCollidablePairs","type":"Interface"},{"name":"IGetTriTree","href":"Hi.Collision.IGetTriTree.html","topicHref":"Hi.Collision.IGetTriTree.html","topicUid":"Hi.Collision.IGetTriTree","type":"Interface"},{"name":"MechCollisionResult","href":"Hi.Collision.MechCollisionResult.html","topicHref":"Hi.Collision.MechCollisionResult.html","topicUid":"Hi.Collision.MechCollisionResult","type":"Class"},{"name":"MechCollisionUtil","href":"Hi.Collision.MechCollisionUtil.html","topicHref":"Hi.Collision.MechCollisionUtil.html","topicUid":"Hi.Collision.MechCollisionUtil","type":"Class"},{"name":"TriTree","href":"Hi.Collision.TriTree.html","topicHref":"Hi.Collision.TriTree.html","topicUid":"Hi.Collision.TriTree","type":"Class"}]},{"name":"Hi.Collisions","href":"Hi.Collisions.html","topicHref":"Hi.Collisions.html","topicUid":"Hi.Collisions","type":"Namespace","items":[{"name":"AnchoredCollidabled","href":"Hi.Collisions.AnchoredCollidabled.html","topicHref":"Hi.Collisions.AnchoredCollidabled.html","topicUid":"Hi.Collisions.AnchoredCollidabled","type":"Class"},{"name":"IAnchoredCollidabled","href":"Hi.Collisions.IAnchoredCollidabled.html","topicHref":"Hi.Collisions.IAnchoredCollidabled.html","topicUid":"Hi.Collisions.IAnchoredCollidabled","type":"Interface"}]},{"name":"Hi.Coloring","href":"Hi.Coloring.html","topicHref":"Hi.Coloring.html","topicUid":"Hi.Coloring","type":"Namespace","items":[{"name":"ColorUtil","href":"Hi.Coloring.ColorUtil.html","topicHref":"Hi.Coloring.ColorUtil.html","topicUid":"Hi.Coloring.ColorUtil","type":"Class"},{"name":"DictionaryColorGuide","href":"Hi.Coloring.DictionaryColorGuide.html","topicHref":"Hi.Coloring.DictionaryColorGuide.html","topicUid":"Hi.Coloring.DictionaryColorGuide","type":"Class"},{"name":"DiscreteQuantityColorGuide","href":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicHref":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicUid":"Hi.Coloring.DiscreteQuantityColorGuide","type":"Class"},{"name":"FilteredColorGuide","href":"Hi.Coloring.FilteredColorGuide.html","topicHref":"Hi.Coloring.FilteredColorGuide.html","topicUid":"Hi.Coloring.FilteredColorGuide","type":"Class"},{"name":"FuncRangeColorGuide","href":"Hi.Coloring.FuncRangeColorGuide.html","topicHref":"Hi.Coloring.FuncRangeColorGuide.html","topicUid":"Hi.Coloring.FuncRangeColorGuide","type":"Class"},{"name":"IColorGuide","href":"Hi.Coloring.IColorGuide.html","topicHref":"Hi.Coloring.IColorGuide.html","topicUid":"Hi.Coloring.IColorGuide","type":"Interface"},{"name":"IColorGuideProperty","href":"Hi.Coloring.IColorGuideProperty.html","topicHref":"Hi.Coloring.IColorGuideProperty.html","topicUid":"Hi.Coloring.IColorGuideProperty","type":"Interface"},{"name":"IGetColorGuide","href":"Hi.Coloring.IGetColorGuide.html","topicHref":"Hi.Coloring.IGetColorGuide.html","topicUid":"Hi.Coloring.IGetColorGuide","type":"Interface"},{"name":"IGetRangeColorRule","href":"Hi.Coloring.IGetRangeColorRule.html","topicHref":"Hi.Coloring.IGetRangeColorRule.html","topicUid":"Hi.Coloring.IGetRangeColorRule","type":"Interface"},{"name":"IGetRgb","href":"Hi.Coloring.IGetRgb.html","topicHref":"Hi.Coloring.IGetRgb.html","topicUid":"Hi.Coloring.IGetRgb","type":"Interface"},{"name":"IGetRgbWithPriority","href":"Hi.Coloring.IGetRgbWithPriority.html","topicHref":"Hi.Coloring.IGetRgbWithPriority.html","topicUid":"Hi.Coloring.IGetRgbWithPriority","type":"Interface"},{"name":"PlainColorGuide","href":"Hi.Coloring.PlainColorGuide.html","topicHref":"Hi.Coloring.PlainColorGuide.html","topicUid":"Hi.Coloring.PlainColorGuide","type":"Class"},{"name":"QuantityColorGuide","href":"Hi.Coloring.QuantityColorGuide.html","topicHref":"Hi.Coloring.QuantityColorGuide.html","topicUid":"Hi.Coloring.QuantityColorGuide","type":"Class"},{"name":"RangeColorRule","href":"Hi.Coloring.RangeColorRule.html","topicHref":"Hi.Coloring.RangeColorRule.html","topicUid":"Hi.Coloring.RangeColorRule","type":"Class"},{"name":"RatioRgbFuncEnum","href":"Hi.Coloring.RatioRgbFuncEnum.html","topicHref":"Hi.Coloring.RatioRgbFuncEnum.html","topicUid":"Hi.Coloring.RatioRgbFuncEnum","type":"Enum"},{"name":"RgbSeed","href":"Hi.Coloring.RgbSeed.html","topicHref":"Hi.Coloring.RgbSeed.html","topicUid":"Hi.Coloring.RgbSeed","type":"Class"}]},{"name":"Hi.Common","href":"Hi.Common.html","topicHref":"Hi.Common.html","topicUid":"Hi.Common","type":"Namespace","items":[{"name":"BinIoUtil","href":"Hi.Common.BinIoUtil.html","topicHref":"Hi.Common.BinIoUtil.html","topicUid":"Hi.Common.BinIoUtil","type":"Class"},{"name":"BitUtil","href":"Hi.Common.BitUtil.html","topicHref":"Hi.Common.BitUtil.html","topicUid":"Hi.Common.BitUtil","type":"Class"},{"name":"BlockingTimer","href":"Hi.Common.BlockingTimer.html","topicHref":"Hi.Common.BlockingTimer.html","topicUid":"Hi.Common.BlockingTimer","type":"Class"},{"name":"BytesUtil","href":"Hi.Common.BytesUtil.html","topicHref":"Hi.Common.BytesUtil.html","topicUid":"Hi.Common.BytesUtil","type":"Class"},{"name":"ConcurrentTimeCounter","href":"Hi.Common.ConcurrentTimeCounter.html","topicHref":"Hi.Common.ConcurrentTimeCounter.html","topicUid":"Hi.Common.ConcurrentTimeCounter","type":"Class"},{"name":"ConsoleUtil","href":"Hi.Common.ConsoleUtil.html","topicHref":"Hi.Common.ConsoleUtil.html","topicUid":"Hi.Common.ConsoleUtil","type":"Class"},{"name":"CppLogUtil","href":"Hi.Common.CppLogUtil.html","topicHref":"Hi.Common.CppLogUtil.html","topicUid":"Hi.Common.CppLogUtil","type":"Class"},{"name":"CppLogUtil.LogDelegate","href":"Hi.Common.CppLogUtil.LogDelegate.html","topicHref":"Hi.Common.CppLogUtil.LogDelegate.html","topicUid":"Hi.Common.CppLogUtil.LogDelegate","type":"Delegate"},{"name":"CultureUtil","href":"Hi.Common.CultureUtil.html","topicHref":"Hi.Common.CultureUtil.html","topicUid":"Hi.Common.CultureUtil","type":"Class"},{"name":"DuplicateUtil","href":"Hi.Common.DuplicateUtil.html","topicHref":"Hi.Common.DuplicateUtil.html","topicUid":"Hi.Common.DuplicateUtil","type":"Class"},{"name":"EnumUtil","href":"Hi.Common.EnumUtil.html","topicHref":"Hi.Common.EnumUtil.html","topicUid":"Hi.Common.EnumUtil","type":"Class"},{"name":"EnumerablePlayer","href":"Hi.Common.EnumerablePlayer.html","topicHref":"Hi.Common.EnumerablePlayer.html","topicUid":"Hi.Common.EnumerablePlayer","type":"Class"},{"name":"IAbstractNote","href":"Hi.Common.IAbstractNote.html","topicHref":"Hi.Common.IAbstractNote.html","topicUid":"Hi.Common.IAbstractNote","type":"Interface"},{"name":"IBinaryIo","href":"Hi.Common.IBinaryIo.html","topicHref":"Hi.Common.IBinaryIo.html","topicUid":"Hi.Common.IBinaryIo","type":"Interface"},{"name":"IClearCache","href":"Hi.Common.IClearCache.html","topicHref":"Hi.Common.IClearCache.html","topicUid":"Hi.Common.IClearCache","type":"Interface"},{"name":"IDuplicate","href":"Hi.Common.IDuplicate.html","topicHref":"Hi.Common.IDuplicate.html","topicUid":"Hi.Common.IDuplicate","type":"Interface"},{"name":"IGetQuantityByKey","href":"Hi.Common.IGetQuantityByKey.html","topicHref":"Hi.Common.IGetQuantityByKey.html","topicUid":"Hi.Common.IGetQuantityByKey","type":"Interface"},{"name":"IGetSelectionName","href":"Hi.Common.IGetSelectionName.html","topicHref":"Hi.Common.IGetSelectionName.html","topicUid":"Hi.Common.IGetSelectionName","type":"Interface"},{"name":"INameNote","href":"Hi.Common.INameNote.html","topicHref":"Hi.Common.INameNote.html","topicUid":"Hi.Common.INameNote","type":"Interface"},{"name":"IPreferredFileName","href":"Hi.Common.IPreferredFileName.html","topicHref":"Hi.Common.IPreferredFileName.html","topicUid":"Hi.Common.IPreferredFileName","type":"Interface"},{"name":"IProgressFraction","href":"Hi.Common.IProgressFraction.html","topicHref":"Hi.Common.IProgressFraction.html","topicUid":"Hi.Common.IProgressFraction","type":"Interface"},{"name":"ISourceFile","href":"Hi.Common.ISourceFile.html","topicHref":"Hi.Common.ISourceFile.html","topicUid":"Hi.Common.ISourceFile","type":"Interface"},{"name":"IToPresentDto","href":"Hi.Common.IToPresentDto.html","topicHref":"Hi.Common.IToPresentDto.html","topicUid":"Hi.Common.IToPresentDto","type":"Interface"},{"name":"IUpdateByContent","href":"Hi.Common.IUpdateByContent.html","topicHref":"Hi.Common.IUpdateByContent.html","topicUid":"Hi.Common.IUpdateByContent","type":"Interface"},{"name":"IUriGetter","href":"Hi.Common.IUriGetter.html","topicHref":"Hi.Common.IUriGetter.html","topicUid":"Hi.Common.IUriGetter","type":"Interface"},{"name":"IWriteBin","href":"Hi.Common.IWriteBin.html","topicHref":"Hi.Common.IWriteBin.html","topicUid":"Hi.Common.IWriteBin","type":"Interface"},{"name":"IndexSegment","href":"Hi.Common.IndexSegment.html","topicHref":"Hi.Common.IndexSegment.html","topicUid":"Hi.Common.IndexSegment","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter`1","type":"Class"},{"name":"InternalException","href":"Hi.Common.InternalException.html","topicHref":"Hi.Common.InternalException.html","topicUid":"Hi.Common.InternalException","type":"Class"},{"name":"InvokeUtil","href":"Hi.Common.InvokeUtil.html","topicHref":"Hi.Common.InvokeUtil.html","topicUid":"Hi.Common.InvokeUtil","type":"Class"},{"name":"JsonUtil","href":"Hi.Common.JsonUtil.html","topicHref":"Hi.Common.JsonUtil.html","topicUid":"Hi.Common.JsonUtil","type":"Class"},{"name":"LooseRunner","href":"Hi.Common.LooseRunner.html","topicHref":"Hi.Common.LooseRunner.html","topicUid":"Hi.Common.LooseRunner","type":"Class"},{"name":"LooseRunner.MergedCancellationTokenRun","href":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicHref":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicUid":"Hi.Common.LooseRunner.MergedCancellationTokenRun","type":"Delegate"},{"name":"ManualUtil","href":"Hi.Common.ManualUtil.html","topicHref":"Hi.Common.ManualUtil.html","topicUid":"Hi.Common.ManualUtil","type":"Class"},{"name":"MaskUtil","href":"Hi.Common.MaskUtil.html","topicHref":"Hi.Common.MaskUtil.html","topicUid":"Hi.Common.MaskUtil","type":"Class"},{"name":"NameUtil","href":"Hi.Common.NameUtil.html","topicHref":"Hi.Common.NameUtil.html","topicUid":"Hi.Common.NameUtil","type":"Class"},{"name":"PacePlayee","href":"Hi.Common.PacePlayee.html","topicHref":"Hi.Common.PacePlayee.html","topicUid":"Hi.Common.PacePlayee","type":"Class"},{"name":"PacePlayer","href":"Hi.Common.PacePlayer.html","topicHref":"Hi.Common.PacePlayer.html","topicUid":"Hi.Common.PacePlayer","type":"Class"},{"name":"Pair","href":"Hi.Common.Pair-2.html","topicHref":"Hi.Common.Pair-2.html","topicUid":"Hi.Common.Pair`2","type":"Class"},{"name":"ProgressFraction","href":"Hi.Common.ProgressFraction.html","topicHref":"Hi.Common.ProgressFraction.html","topicUid":"Hi.Common.ProgressFraction","type":"Class"},{"name":"Range","href":"Hi.Common.Range-1.html","topicHref":"Hi.Common.Range-1.html","topicUid":"Hi.Common.Range`1","type":"Class"},{"name":"ResourceUtil","href":"Hi.Common.ResourceUtil.html","topicHref":"Hi.Common.ResourceUtil.html","topicUid":"Hi.Common.ResourceUtil","type":"Class"},{"name":"RoutineBlocker","href":"Hi.Common.RoutineBlocker.html","topicHref":"Hi.Common.RoutineBlocker.html","topicUid":"Hi.Common.RoutineBlocker","type":"Class"},{"name":"SearchResult","href":"Hi.Common.SearchResult.html","topicHref":"Hi.Common.SearchResult.html","topicUid":"Hi.Common.SearchResult","type":"Enum"},{"name":"SeqPairUtil","href":"Hi.Common.SeqPairUtil.html","topicHref":"Hi.Common.SeqPairUtil.html","topicUid":"Hi.Common.SeqPairUtil","type":"Class"},{"name":"SeqPair","href":"Hi.Common.SeqPair-1.html","topicHref":"Hi.Common.SeqPair-1.html","topicUid":"Hi.Common.SeqPair`1","type":"Class"},{"name":"ServerFileExplorerConfig","href":"Hi.Common.ServerFileExplorerConfig.html","topicHref":"Hi.Common.ServerFileExplorerConfig.html","topicUid":"Hi.Common.ServerFileExplorerConfig","type":"Class"},{"name":"StringLocalizer","href":"Hi.Common.StringLocalizer.html","topicHref":"Hi.Common.StringLocalizer.html","topicUid":"Hi.Common.StringLocalizer","type":"Class"},{"name":"StringUtil","href":"Hi.Common.StringUtil.html","topicHref":"Hi.Common.StringUtil.html","topicUid":"Hi.Common.StringUtil","type":"Class"},{"name":"TaskUtil","href":"Hi.Common.TaskUtil.html","topicHref":"Hi.Common.TaskUtil.html","topicUid":"Hi.Common.TaskUtil","type":"Class"},{"name":"TimeCounter","href":"Hi.Common.TimeCounter.html","topicHref":"Hi.Common.TimeCounter.html","topicUid":"Hi.Common.TimeCounter","type":"Class"}]},{"name":"Hi.Common.Collections","href":"Hi.Common.Collections.html","topicHref":"Hi.Common.Collections.html","topicUid":"Hi.Common.Collections","type":"Namespace","items":[{"name":"DictionaryUtil","href":"Hi.Common.Collections.DictionaryUtil.html","topicHref":"Hi.Common.Collections.DictionaryUtil.html","topicUid":"Hi.Common.Collections.DictionaryUtil","type":"Class"},{"name":"EnumerableUtil","href":"Hi.Common.Collections.EnumerableUtil.html","topicHref":"Hi.Common.Collections.EnumerableUtil.html","topicUid":"Hi.Common.Collections.EnumerableUtil","type":"Class"},{"name":"FixedSizeConcurrentLinkedListUtil","href":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicHref":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicUid":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil","type":"Class"},{"name":"LazyLinkedListNode","href":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicHref":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicUid":"Hi.Common.Collections.LazyLinkedListNode`1","type":"Class"},{"name":"LazyLinkedList","href":"Hi.Common.Collections.LazyLinkedList-1.html","topicHref":"Hi.Common.Collections.LazyLinkedList-1.html","topicUid":"Hi.Common.Collections.LazyLinkedList`1","type":"Class"},{"name":"LinkedListUtil","href":"Hi.Common.Collections.LinkedListUtil.html","topicHref":"Hi.Common.Collections.LinkedListUtil.html","topicUid":"Hi.Common.Collections.LinkedListUtil","type":"Class"},{"name":"ListIndexBasedEnumerable","href":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedEnumerable`1","type":"Class"},{"name":"ListIndexBasedIEnumerator","href":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedIEnumerator`1","type":"Class"},{"name":"ListUtil","href":"Hi.Common.Collections.ListUtil.html","topicHref":"Hi.Common.Collections.ListUtil.html","topicUid":"Hi.Common.Collections.ListUtil","type":"Class"},{"name":"ListUtil.OuterPolationMode","href":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicHref":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicUid":"Hi.Common.Collections.ListUtil.OuterPolationMode","type":"Enum"},{"name":"SearchTargetMode","href":"Hi.Common.Collections.SearchTargetMode.html","topicHref":"Hi.Common.Collections.SearchTargetMode.html","topicUid":"Hi.Common.Collections.SearchTargetMode","type":"Enum"},{"name":"SeekDirection","href":"Hi.Common.Collections.SeekDirection.html","topicHref":"Hi.Common.Collections.SeekDirection.html","topicUid":"Hi.Common.Collections.SeekDirection","type":"Enum"},{"name":"SortedListUtil","href":"Hi.Common.Collections.SortedListUtil.html","topicHref":"Hi.Common.Collections.SortedListUtil.html","topicUid":"Hi.Common.Collections.SortedListUtil","type":"Class"},{"name":"SubList","href":"Hi.Common.Collections.SubList-1.html","topicHref":"Hi.Common.Collections.SubList-1.html","topicUid":"Hi.Common.Collections.SubList`1","type":"Class"},{"name":"SynList","href":"Hi.Common.Collections.SynList-1.html","topicHref":"Hi.Common.Collections.SynList-1.html","topicUid":"Hi.Common.Collections.SynList`1","type":"Class"}]},{"name":"Hi.Common.CsvUtils","href":"Hi.Common.CsvUtils.html","topicHref":"Hi.Common.CsvUtils.html","topicUid":"Hi.Common.CsvUtils","type":"Namespace","items":[{"name":"CsvInputKit","href":"Hi.Common.CsvUtils.CsvInputKit.html","topicHref":"Hi.Common.CsvUtils.CsvInputKit.html","topicUid":"Hi.Common.CsvUtils.CsvInputKit","type":"Class"},{"name":"CsvOutputKit","href":"Hi.Common.CsvUtils.CsvOutputKit.html","topicHref":"Hi.Common.CsvUtils.CsvOutputKit.html","topicUid":"Hi.Common.CsvUtils.CsvOutputKit","type":"Class"},{"name":"CsvUtil","href":"Hi.Common.CsvUtils.CsvUtil.html","topicHref":"Hi.Common.CsvUtils.CsvUtil.html","topicUid":"Hi.Common.CsvUtils.CsvUtil","type":"Class"},{"name":"ICsvRowIo","href":"Hi.Common.CsvUtils.ICsvRowIo.html","topicHref":"Hi.Common.CsvUtils.ICsvRowIo.html","topicUid":"Hi.Common.CsvUtils.ICsvRowIo","type":"Interface"},{"name":"IGetCsvDictionary","href":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicHref":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicUid":"Hi.Common.CsvUtils.IGetCsvDictionary","type":"Interface"}]},{"name":"Hi.Common.FileLines","href":"Hi.Common.FileLines.html","topicHref":"Hi.Common.FileLines.html","topicUid":"Hi.Common.FileLines","type":"Namespace","items":[{"name":"FileBeginEventArgs","href":"Hi.Common.FileLines.FileBeginEventArgs.html","topicHref":"Hi.Common.FileLines.FileBeginEventArgs.html","topicUid":"Hi.Common.FileLines.FileBeginEventArgs","type":"Class"},{"name":"FileEndEventArgs","href":"Hi.Common.FileLines.FileEndEventArgs.html","topicHref":"Hi.Common.FileLines.FileEndEventArgs.html","topicUid":"Hi.Common.FileLines.FileEndEventArgs","type":"Class"},{"name":"FileLineCharIndex","href":"Hi.Common.FileLines.FileLineCharIndex.html","topicHref":"Hi.Common.FileLines.FileLineCharIndex.html","topicUid":"Hi.Common.FileLines.FileLineCharIndex","type":"Class"},{"name":"FileLineCharIndexSegment","href":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicHref":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicUid":"Hi.Common.FileLines.FileLineCharIndexSegment","type":"Class"},{"name":"FileLineIndex","href":"Hi.Common.FileLines.FileLineIndex.html","topicHref":"Hi.Common.FileLines.FileLineIndex.html","topicUid":"Hi.Common.FileLines.FileLineIndex","type":"Class"},{"name":"FileLineUtil","href":"Hi.Common.FileLines.FileLineUtil.html","topicHref":"Hi.Common.FileLines.FileLineUtil.html","topicUid":"Hi.Common.FileLines.FileLineUtil","type":"Class"},{"name":"FileUtil","href":"Hi.Common.FileLines.FileUtil.html","topicHref":"Hi.Common.FileLines.FileUtil.html","topicUid":"Hi.Common.FileLines.FileUtil","type":"Class"},{"name":"IFileChangedEventSupport","href":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicHref":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicUid":"Hi.Common.FileLines.IFileChangedEventSupport","type":"Interface"},{"name":"IFileLine","href":"Hi.Common.FileLines.IFileLine.html","topicHref":"Hi.Common.FileLines.IFileLine.html","topicUid":"Hi.Common.FileLines.IFileLine","type":"Interface"},{"name":"IFileLineCharIndex","href":"Hi.Common.FileLines.IFileLineCharIndex.html","topicHref":"Hi.Common.FileLines.IFileLineCharIndex.html","topicUid":"Hi.Common.FileLines.IFileLineCharIndex","type":"Interface"},{"name":"IFileLineIndex","href":"Hi.Common.FileLines.IFileLineIndex.html","topicHref":"Hi.Common.FileLines.IFileLineIndex.html","topicUid":"Hi.Common.FileLines.IFileLineIndex","type":"Interface"},{"name":"IGetFileLineIndex","href":"Hi.Common.FileLines.IGetFileLineIndex.html","topicHref":"Hi.Common.FileLines.IGetFileLineIndex.html","topicUid":"Hi.Common.FileLines.IGetFileLineIndex","type":"Interface"},{"name":"IGetIndexedFileLine","href":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IGetIndexedFileLine","type":"Interface"},{"name":"IIndexedFileLine","href":"Hi.Common.FileLines.IIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IIndexedFileLine","type":"Interface"},{"name":"ILineChangedEventSupport","href":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicHref":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicUid":"Hi.Common.FileLines.ILineChangedEventSupport","type":"Interface"},{"name":"IndexedFile","href":"Hi.Common.FileLines.IndexedFile.html","topicHref":"Hi.Common.FileLines.IndexedFile.html","topicUid":"Hi.Common.FileLines.IndexedFile","type":"Class"},{"name":"IndexedFileLine","href":"Hi.Common.FileLines.IndexedFileLine.html","topicHref":"Hi.Common.FileLines.IndexedFileLine.html","topicUid":"Hi.Common.FileLines.IndexedFileLine","type":"Class"},{"name":"IndexedFileLineChar","href":"Hi.Common.FileLines.IndexedFileLineChar.html","topicHref":"Hi.Common.FileLines.IndexedFileLineChar.html","topicUid":"Hi.Common.FileLines.IndexedFileLineChar","type":"Class"},{"name":"LineBeginEventArgs","href":"Hi.Common.FileLines.LineBeginEventArgs.html","topicHref":"Hi.Common.FileLines.LineBeginEventArgs.html","topicUid":"Hi.Common.FileLines.LineBeginEventArgs","type":"Class"},{"name":"LineEndEventArgs","href":"Hi.Common.FileLines.LineEndEventArgs.html","topicHref":"Hi.Common.FileLines.LineEndEventArgs.html","topicUid":"Hi.Common.FileLines.LineEndEventArgs","type":"Class"}]},{"name":"Hi.Common.Messages","href":"Hi.Common.Messages.html","topicHref":"Hi.Common.Messages.html","topicUid":"Hi.Common.Messages","type":"Namespace","items":[{"name":"ActionProgress","href":"Hi.Common.Messages.ActionProgress-1.html","topicHref":"Hi.Common.Messages.ActionProgress-1.html","topicUid":"Hi.Common.Messages.ActionProgress`1","type":"Class"},{"name":"BootstrapTheme","href":"Hi.Common.Messages.BootstrapTheme.html","topicHref":"Hi.Common.Messages.BootstrapTheme.html","topicUid":"Hi.Common.Messages.BootstrapTheme","type":"Enum"},{"name":"DebugUtil","href":"Hi.Common.Messages.DebugUtil.html","topicHref":"Hi.Common.Messages.DebugUtil.html","topicUid":"Hi.Common.Messages.DebugUtil","type":"Class"},{"name":"ExceptionUtil","href":"Hi.Common.Messages.ExceptionUtil.html","topicHref":"Hi.Common.Messages.ExceptionUtil.html","topicUid":"Hi.Common.Messages.ExceptionUtil","type":"Class"},{"name":"MessageBoardUtil","href":"Hi.Common.Messages.MessageBoardUtil.html","topicHref":"Hi.Common.Messages.MessageBoardUtil.html","topicUid":"Hi.Common.Messages.MessageBoardUtil","type":"Class"},{"name":"MessageFlag","href":"Hi.Common.Messages.MessageFlag.html","topicHref":"Hi.Common.Messages.MessageFlag.html","topicUid":"Hi.Common.Messages.MessageFlag","type":"Enum"},{"name":"MultiTagMessage","href":"Hi.Common.Messages.MultiTagMessage.html","topicHref":"Hi.Common.Messages.MultiTagMessage.html","topicUid":"Hi.Common.Messages.MultiTagMessage","type":"Class"},{"name":"MultiTagMessageUtil","href":"Hi.Common.Messages.MultiTagMessageUtil.html","topicHref":"Hi.Common.Messages.MultiTagMessageUtil.html","topicUid":"Hi.Common.Messages.MultiTagMessageUtil","type":"Class"},{"name":"ShowMessageBoardDelegate","href":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicHref":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicUid":"Hi.Common.Messages.ShowMessageBoardDelegate","type":"Delegate"}]},{"name":"Hi.Common.MinMaxUtils","href":"Hi.Common.MinMaxUtils.html","topicHref":"Hi.Common.MinMaxUtils.html","topicUid":"Hi.Common.MinMaxUtils","type":"Namespace","items":[{"name":"IndexedMinMaxPos","href":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicHref":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicUid":"Hi.Common.MinMaxUtils.IndexedMinMaxPos`2","type":"Class"},{"name":"MinMaxUtil","href":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicHref":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicUid":"Hi.Common.MinMaxUtils.MinMaxUtil","type":"Class"}]},{"name":"Hi.Common.NativeProgresses","href":"Hi.Common.NativeProgresses.html","topicHref":"Hi.Common.NativeProgresses.html","topicUid":"Hi.Common.NativeProgresses","type":"Namespace","items":[{"name":"NativeProgressFraction","href":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicHref":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicUid":"Hi.Common.NativeProgresses.NativeProgressFraction","type":"Class"},{"name":"progress_monitor_t","href":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicHref":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicUid":"Hi.Common.NativeProgresses.progress_monitor_t","type":"Struct"},{"name":"report_progress_func_t","href":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicHref":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicUid":"Hi.Common.NativeProgresses.report_progress_func_t","type":"Delegate"}]},{"name":"Hi.Common.ParallelBulkUtils","href":"Hi.Common.ParallelBulkUtils.html","topicHref":"Hi.Common.ParallelBulkUtils.html","topicUid":"Hi.Common.ParallelBulkUtils","type":"Namespace","items":[{"name":"ParallelBulkReader","href":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkReader`1","type":"Class"},{"name":"ParallelBulkWriter","href":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter`1","type":"Class"},{"name":"ReadBulkDelegate","href":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate`1","type":"Delegate"},{"name":"SequentialBulkReader","href":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.SequentialBulkReader`1","type":"Class"}]},{"name":"Hi.Common.PathUtils","href":"Hi.Common.PathUtils.html","topicHref":"Hi.Common.PathUtils.html","topicUid":"Hi.Common.PathUtils","type":"Namespace","items":[{"name":"ExtendedNamedPath","href":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicHref":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicUid":"Hi.Common.PathUtils.ExtendedNamedPath","type":"Class"},{"name":"HttpUtil","href":"Hi.Common.PathUtils.HttpUtil.html","topicHref":"Hi.Common.PathUtils.HttpUtil.html","topicUid":"Hi.Common.PathUtils.HttpUtil","type":"Class"},{"name":"Lang","href":"Hi.Common.PathUtils.Lang.html","topicHref":"Hi.Common.PathUtils.Lang.html","topicUid":"Hi.Common.PathUtils.Lang","type":"Class"},{"name":"NamedPath","href":"Hi.Common.PathUtils.NamedPath.html","topicHref":"Hi.Common.PathUtils.NamedPath.html","topicUid":"Hi.Common.PathUtils.NamedPath","type":"Class"},{"name":"PathUtil","href":"Hi.Common.PathUtils.PathUtil.html","topicHref":"Hi.Common.PathUtils.PathUtil.html","topicUid":"Hi.Common.PathUtils.PathUtil","type":"Class"}]},{"name":"Hi.Common.QueueCacheUtils","href":"Hi.Common.QueueCacheUtils.html","topicHref":"Hi.Common.QueueCacheUtils.html","topicUid":"Hi.Common.QueueCacheUtils","type":"Namespace","items":[{"name":"QueueCacherHost","href":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacherHost`1","type":"Class"},{"name":"QueueCacher","href":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacher`1","type":"Class"}]},{"name":"Hi.Common.XmlUtils","href":"Hi.Common.XmlUtils.html","topicHref":"Hi.Common.XmlUtils.html","topicUid":"Hi.Common.XmlUtils","type":"Namespace","items":[{"name":"FileRefSource","href":"Hi.Common.XmlUtils.FileRefSource-1.html","topicHref":"Hi.Common.XmlUtils.FileRefSource-1.html","topicUid":"Hi.Common.XmlUtils.FileRefSource`1","type":"Class"},{"name":"IMakeXmlSource","href":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicHref":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicUid":"Hi.Common.XmlUtils.IMakeXmlSource","type":"Interface"},{"name":"IToXElement","href":"Hi.Common.XmlUtils.IToXElement.html","topicHref":"Hi.Common.XmlUtils.IToXElement.html","topicUid":"Hi.Common.XmlUtils.IToXElement","type":"Interface"},{"name":"ProjectApiVersion","href":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicHref":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicUid":"Hi.Common.XmlUtils.ProjectApiVersion","type":"Class"},{"name":"SetFileDelegate","href":"Hi.Common.XmlUtils.SetFileDelegate.html","topicHref":"Hi.Common.XmlUtils.SetFileDelegate.html","topicUid":"Hi.Common.XmlUtils.SetFileDelegate","type":"Delegate"},{"name":"XFactory","href":"Hi.Common.XmlUtils.XFactory.html","topicHref":"Hi.Common.XmlUtils.XFactory.html","topicUid":"Hi.Common.XmlUtils.XFactory","type":"Class"},{"name":"XFactory.GenByXElementDelegate","href":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate","type":"Delegate"},{"name":"XFactory.XmlExceptionDelegate","href":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate","type":"Delegate"},{"name":"XmlUtil","href":"Hi.Common.XmlUtils.XmlUtil.html","topicHref":"Hi.Common.XmlUtils.XmlUtil.html","topicUid":"Hi.Common.XmlUtils.XmlUtil","type":"Class"}]},{"name":"Hi.CutterLocations","href":"Hi.CutterLocations.html","topicHref":"Hi.CutterLocations.html","topicUid":"Hi.CutterLocations","type":"Namespace","items":[{"name":"IGetProgramCl","href":"Hi.CutterLocations.IGetProgramCl.html","topicHref":"Hi.CutterLocations.IGetProgramCl.html","topicUid":"Hi.CutterLocations.IGetProgramCl","type":"Interface"},{"name":"SimpleCl","href":"Hi.CutterLocations.SimpleCl.html","topicHref":"Hi.CutterLocations.SimpleCl.html","topicUid":"Hi.CutterLocations.SimpleCl","type":"Class"}]},{"name":"Hi.CutterLocations.ClPath","href":"Hi.CutterLocations.ClPath.html","topicHref":"Hi.CutterLocations.ClPath.html","topicUid":"Hi.CutterLocations.ClPath","type":"Namespace","items":[{"name":"ClCircleArc","href":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicHref":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicUid":"Hi.CutterLocations.ClPath.ClCircleArc","type":"Class"},{"name":"ClLinear","href":"Hi.CutterLocations.ClPath.ClLinear.html","topicHref":"Hi.CutterLocations.ClPath.ClLinear.html","topicUid":"Hi.CutterLocations.ClPath.ClLinear","type":"Class"},{"name":"IClPath","href":"Hi.CutterLocations.ClPath.IClPath.html","topicHref":"Hi.CutterLocations.ClPath.IClPath.html","topicUid":"Hi.CutterLocations.ClPath.IClPath","type":"Interface"}]},{"name":"Hi.CutterLocations.ClStrips","href":"Hi.CutterLocations.ClStrips.html","topicHref":"Hi.CutterLocations.ClStrips.html","topicUid":"Hi.CutterLocations.ClStrips","type":"Namespace","items":[{"name":"ClStrip","href":"Hi.CutterLocations.ClStrips.ClStrip.html","topicHref":"Hi.CutterLocations.ClStrips.ClStrip.html","topicUid":"Hi.CutterLocations.ClStrips.ClStrip","type":"Class"},{"name":"ClStripPos","href":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicHref":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicUid":"Hi.CutterLocations.ClStrips.ClStripPos","type":"Class"},{"name":"RgbFunc","href":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicHref":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicUid":"Hi.CutterLocations.ClStrips.RgbFunc","type":"Delegate"}]},{"name":"Hi.Disp","href":"Hi.Disp.html","topicHref":"Hi.Disp.html","topicUid":"Hi.Disp","type":"Namespace","items":[{"name":"Bind","href":"Hi.Disp.Bind.html","topicHref":"Hi.Disp.Bind.html","topicUid":"Hi.Disp.Bind","type":"Class"},{"name":"Box3dDispUtil","href":"Hi.Disp.Box3dDispUtil.html","topicHref":"Hi.Disp.Box3dDispUtil.html","topicUid":"Hi.Disp.Box3dDispUtil","type":"Class"},{"name":"Box3dDispUtil.BoxableExpandToBox3dDel","href":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicHref":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicUid":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel","type":"Delegate"},{"name":"DelegateFuncDisplayee","href":"Hi.Disp.DelegateFuncDisplayee.html","topicHref":"Hi.Disp.DelegateFuncDisplayee.html","topicUid":"Hi.Disp.DelegateFuncDisplayee","type":"Class"},{"name":"DispEngine","href":"Hi.Disp.DispEngine.html","topicHref":"Hi.Disp.DispEngine.html","topicUid":"Hi.Disp.DispEngine","type":"Class"},{"name":"DispEngine.ImageRequestedDelegate","href":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicHref":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicUid":"Hi.Disp.DispEngine.ImageRequestedDelegate","type":"Delegate"},{"name":"DispEngineConfig","href":"Hi.Disp.DispEngineConfig.html","topicHref":"Hi.Disp.DispEngineConfig.html","topicUid":"Hi.Disp.DispEngineConfig","type":"Class"},{"name":"DispFrameUtil","href":"Hi.Disp.DispFrameUtil.html","topicHref":"Hi.Disp.DispFrameUtil.html","topicUid":"Hi.Disp.DispFrameUtil","type":"Class"},{"name":"DispList","href":"Hi.Disp.DispList.html","topicHref":"Hi.Disp.DispList.html","topicUid":"Hi.Disp.DispList","type":"Class"},{"name":"DispUtil","href":"Hi.Disp.DispUtil.html","topicHref":"Hi.Disp.DispUtil.html","topicUid":"Hi.Disp.DispUtil","type":"Class"},{"name":"Drawing","href":"Hi.Disp.Drawing.html","topicHref":"Hi.Disp.Drawing.html","topicUid":"Hi.Disp.Drawing","type":"Class"},{"name":"FuncDisplayee","href":"Hi.Disp.FuncDisplayee.html","topicHref":"Hi.Disp.FuncDisplayee.html","topicUid":"Hi.Disp.FuncDisplayee","type":"Class"},{"name":"GL","href":"Hi.Disp.GL.html","topicHref":"Hi.Disp.GL.html","topicUid":"Hi.Disp.GL","type":"Class"},{"name":"IDisplayee","href":"Hi.Disp.IDisplayee.html","topicHref":"Hi.Disp.IDisplayee.html","topicUid":"Hi.Disp.IDisplayee","type":"Interface"},{"name":"IGetDispEngine","href":"Hi.Disp.IGetDispEngine.html","topicHref":"Hi.Disp.IGetDispEngine.html","topicUid":"Hi.Disp.IGetDispEngine","type":"Interface"},{"name":"IGetPickable","href":"Hi.Disp.IGetPickable.html","topicHref":"Hi.Disp.IGetPickable.html","topicUid":"Hi.Disp.IGetPickable","type":"Interface"},{"name":"IGlContextDirver","href":"Hi.Disp.IGlContextDirver.html","topicHref":"Hi.Disp.IGlContextDirver.html","topicUid":"Hi.Disp.IGlContextDirver","type":"Interface"},{"name":"MatStack","href":"Hi.Disp.MatStack.html","topicHref":"Hi.Disp.MatStack.html","topicUid":"Hi.Disp.MatStack","type":"Class"},{"name":"MatStack.ItemDisposable","href":"Hi.Disp.MatStack.ItemDisposable.html","topicHref":"Hi.Disp.MatStack.ItemDisposable.html","topicUid":"Hi.Disp.MatStack.ItemDisposable","type":"Class"},{"name":"MvpBoxRelation","href":"Hi.Disp.MvpBoxRelation.html","topicHref":"Hi.Disp.MvpBoxRelation.html","topicUid":"Hi.Disp.MvpBoxRelation","type":"Enum"},{"name":"Pickable","href":"Hi.Disp.Pickable.html","topicHref":"Hi.Disp.Pickable.html","topicUid":"Hi.Disp.Pickable","type":"Class"},{"name":"PopModelMat","href":"Hi.Disp.PopModelMat.html","topicHref":"Hi.Disp.PopModelMat.html","topicUid":"Hi.Disp.PopModelMat","type":"Class"},{"name":"PushModelMat","href":"Hi.Disp.PushModelMat.html","topicHref":"Hi.Disp.PushModelMat.html","topicUid":"Hi.Disp.PushModelMat","type":"Class"},{"name":"Segment3dDispUtil","href":"Hi.Disp.Segment3dDispUtil.html","topicHref":"Hi.Disp.Segment3dDispUtil.html","topicUid":"Hi.Disp.Segment3dDispUtil","type":"Class"},{"name":"ShowEventPickable","href":"Hi.Disp.ShowEventPickable.html","topicHref":"Hi.Disp.ShowEventPickable.html","topicUid":"Hi.Disp.ShowEventPickable","type":"Class"},{"name":"Stamp","href":"Hi.Disp.Stamp.html","topicHref":"Hi.Disp.Stamp.html","topicUid":"Hi.Disp.Stamp","type":"Enum"},{"name":"StringDrawing","href":"Hi.Disp.StringDrawing.html","topicHref":"Hi.Disp.StringDrawing.html","topicUid":"Hi.Disp.StringDrawing","type":"Class"},{"name":"Tri3dDispUtil","href":"Hi.Disp.Tri3dDispUtil.html","topicHref":"Hi.Disp.Tri3dDispUtil.html","topicUid":"Hi.Disp.Tri3dDispUtil","type":"Class"},{"name":"Vec3dDispUtil","href":"Hi.Disp.Vec3dDispUtil.html","topicHref":"Hi.Disp.Vec3dDispUtil.html","topicUid":"Hi.Disp.Vec3dDispUtil","type":"Class"},{"name":"WrappedDisplayee","href":"Hi.Disp.WrappedDisplayee.html","topicHref":"Hi.Disp.WrappedDisplayee.html","topicUid":"Hi.Disp.WrappedDisplayee","type":"Class"}]},{"name":"Hi.Disp.Flag","href":"Hi.Disp.Flag.html","topicHref":"Hi.Disp.Flag.html","topicUid":"Hi.Disp.Flag","type":"Namespace","items":[{"name":"ColorScaleBar","href":"Hi.Disp.Flag.ColorScaleBar.html","topicHref":"Hi.Disp.Flag.ColorScaleBar.html","topicUid":"Hi.Disp.Flag.ColorScaleBar","type":"Class"},{"name":"CoordinateDrawing","href":"Hi.Disp.Flag.CoordinateDrawing.html","topicHref":"Hi.Disp.Flag.CoordinateDrawing.html","topicUid":"Hi.Disp.Flag.CoordinateDrawing","type":"Class"},{"name":"CubicalFlagDrawing","href":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicHref":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicUid":"Hi.Disp.Flag.CubicalFlagDrawing","type":"Class"},{"name":"DimensionBar","href":"Hi.Disp.Flag.DimensionBar.html","topicHref":"Hi.Disp.Flag.DimensionBar.html","topicUid":"Hi.Disp.Flag.DimensionBar","type":"Class"},{"name":"DispCoverUtil","href":"Hi.Disp.Flag.DispCoverUtil.html","topicHref":"Hi.Disp.Flag.DispCoverUtil.html","topicUid":"Hi.Disp.Flag.DispCoverUtil","type":"Class"}]},{"name":"Hi.Disp.Treat","href":"Hi.Disp.Treat.html","topicHref":"Hi.Disp.Treat.html","topicUid":"Hi.Disp.Treat","type":"Namespace","items":[{"name":"LineWidthSwap","href":"Hi.Disp.Treat.LineWidthSwap.html","topicHref":"Hi.Disp.Treat.LineWidthSwap.html","topicUid":"Hi.Disp.Treat.LineWidthSwap","type":"Class"},{"name":"LineWidthTreat","href":"Hi.Disp.Treat.LineWidthTreat.html","topicHref":"Hi.Disp.Treat.LineWidthTreat.html","topicUid":"Hi.Disp.Treat.LineWidthTreat","type":"Class"},{"name":"PointSizeSwap","href":"Hi.Disp.Treat.PointSizeSwap.html","topicHref":"Hi.Disp.Treat.PointSizeSwap.html","topicUid":"Hi.Disp.Treat.PointSizeSwap","type":"Class"},{"name":"PointSizeTreat","href":"Hi.Disp.Treat.PointSizeTreat.html","topicHref":"Hi.Disp.Treat.PointSizeTreat.html","topicUid":"Hi.Disp.Treat.PointSizeTreat","type":"Class"},{"name":"RgbSwap","href":"Hi.Disp.Treat.RgbSwap.html","topicHref":"Hi.Disp.Treat.RgbSwap.html","topicUid":"Hi.Disp.Treat.RgbSwap","type":"Class"},{"name":"RgbTreat","href":"Hi.Disp.Treat.RgbTreat.html","topicHref":"Hi.Disp.Treat.RgbTreat.html","topicUid":"Hi.Disp.Treat.RgbTreat","type":"Class"},{"name":"RgbWrapper","href":"Hi.Disp.Treat.RgbWrapper.html","topicHref":"Hi.Disp.Treat.RgbWrapper.html","topicUid":"Hi.Disp.Treat.RgbWrapper","type":"Class"},{"name":"TransformationWrapper","href":"Hi.Disp.Treat.TransformationWrapper.html","topicHref":"Hi.Disp.Treat.TransformationWrapper.html","topicUid":"Hi.Disp.Treat.TransformationWrapper","type":"Class"}]},{"name":"Hi.Fanuc","href":"Hi.Fanuc.html","topicHref":"Hi.Fanuc.html","topicUid":"Hi.Fanuc","type":"Namespace","items":[{"name":"FanucVarTable","href":"Hi.Fanuc.FanucVarTable.html","topicHref":"Hi.Fanuc.FanucVarTable.html","topicUid":"Hi.Fanuc.FanucVarTable","type":"Class"},{"name":"FanucVarValue","href":"Hi.Fanuc.FanucVarValue.html","topicHref":"Hi.Fanuc.FanucVarValue.html","topicUid":"Hi.Fanuc.FanucVarValue","type":"Struct"}]},{"name":"Hi.Geom","href":"Hi.Geom.html","topicHref":"Hi.Geom.html","topicUid":"Hi.Geom","type":"Namespace","items":[{"name":"ArrayUtil","href":"Hi.Geom.ArrayUtil.html","topicHref":"Hi.Geom.ArrayUtil.html","topicUid":"Hi.Geom.ArrayUtil","type":"Class"},{"name":"AxisAngle4d","href":"Hi.Geom.AxisAngle4d.html","topicHref":"Hi.Geom.AxisAngle4d.html","topicUid":"Hi.Geom.AxisAngle4d","type":"Class"},{"name":"Box2d","href":"Hi.Geom.Box2d.html","topicHref":"Hi.Geom.Box2d.html","topicUid":"Hi.Geom.Box2d","type":"Class"},{"name":"Box2d.NoInit","href":"Hi.Geom.Box2d.NoInit.html","topicHref":"Hi.Geom.Box2d.NoInit.html","topicUid":"Hi.Geom.Box2d.NoInit","type":"Class"},{"name":"Box3d","href":"Hi.Geom.Box3d.html","topicHref":"Hi.Geom.Box3d.html","topicUid":"Hi.Geom.Box3d","type":"Class"},{"name":"Box3d.NoInit","href":"Hi.Geom.Box3d.NoInit.html","topicHref":"Hi.Geom.Box3d.NoInit.html","topicUid":"Hi.Geom.Box3d.NoInit","type":"Class"},{"name":"Cylindroid","href":"Hi.Geom.Cylindroid.html","topicHref":"Hi.Geom.Cylindroid.html","topicUid":"Hi.Geom.Cylindroid","type":"Class"},{"name":"DVec3d","href":"Hi.Geom.DVec3d.html","topicHref":"Hi.Geom.DVec3d.html","topicUid":"Hi.Geom.DVec3d","type":"Class"},{"name":"Dir","href":"Hi.Geom.Dir.html","topicHref":"Hi.Geom.Dir.html","topicUid":"Hi.Geom.Dir","type":"Enum"},{"name":"ExtendedCylinder","href":"Hi.Geom.ExtendedCylinder.html","topicHref":"Hi.Geom.ExtendedCylinder.html","topicUid":"Hi.Geom.ExtendedCylinder","type":"Class"},{"name":"Flat3d","href":"Hi.Geom.Flat3d.html","topicHref":"Hi.Geom.Flat3d.html","topicUid":"Hi.Geom.Flat3d","type":"Class"},{"name":"FractionStatus","href":"Hi.Geom.FractionStatus.html","topicHref":"Hi.Geom.FractionStatus.html","topicUid":"Hi.Geom.FractionStatus","type":"Enum"},{"name":"Fraction","href":"Hi.Geom.Fraction-1.html","topicHref":"Hi.Geom.Fraction-1.html","topicUid":"Hi.Geom.Fraction`1","type":"Struct"},{"name":"GeomCombination","href":"Hi.Geom.GeomCombination.html","topicHref":"Hi.Geom.GeomCombination.html","topicUid":"Hi.Geom.GeomCombination","type":"Class"},{"name":"GeomUtil","href":"Hi.Geom.GeomUtil.html","topicHref":"Hi.Geom.GeomUtil.html","topicUid":"Hi.Geom.GeomUtil","type":"Class"},{"name":"IExpandToBox2d","href":"Hi.Geom.IExpandToBox2d.html","topicHref":"Hi.Geom.IExpandToBox2d.html","topicUid":"Hi.Geom.IExpandToBox2d","type":"Interface"},{"name":"IExpandToBox3d","href":"Hi.Geom.IExpandToBox3d.html","topicHref":"Hi.Geom.IExpandToBox3d.html","topicUid":"Hi.Geom.IExpandToBox3d","type":"Interface"},{"name":"IFlat3d","href":"Hi.Geom.IFlat3d.html","topicHref":"Hi.Geom.IFlat3d.html","topicUid":"Hi.Geom.IFlat3d","type":"Interface"},{"name":"IGenStl","href":"Hi.Geom.IGenStl.html","topicHref":"Hi.Geom.IGenStl.html","topicUid":"Hi.Geom.IGenStl","type":"Interface"},{"name":"IGeomProperty","href":"Hi.Geom.IGeomProperty.html","topicHref":"Hi.Geom.IGeomProperty.html","topicUid":"Hi.Geom.IGeomProperty","type":"Interface"},{"name":"IGetStl","href":"Hi.Geom.IGetStl.html","topicHref":"Hi.Geom.IGetStl.html","topicUid":"Hi.Geom.IGetStl","type":"Interface"},{"name":"IGetZrContour","href":"Hi.Geom.IGetZrContour.html","topicHref":"Hi.Geom.IGetZrContour.html","topicUid":"Hi.Geom.IGetZrContour","type":"Interface"},{"name":"IGetZrList","href":"Hi.Geom.IGetZrList.html","topicHref":"Hi.Geom.IGetZrList.html","topicUid":"Hi.Geom.IGetZrList","type":"Interface"},{"name":"IStlSource","href":"Hi.Geom.IStlSource.html","topicHref":"Hi.Geom.IStlSource.html","topicUid":"Hi.Geom.IStlSource","type":"Interface"},{"name":"ITri3d","href":"Hi.Geom.ITri3d.html","topicHref":"Hi.Geom.ITri3d.html","topicUid":"Hi.Geom.ITri3d","type":"Interface"},{"name":"IVec","href":"Hi.Geom.IVec-1.html","topicHref":"Hi.Geom.IVec-1.html","topicUid":"Hi.Geom.IVec`1","type":"Interface"},{"name":"IZrListSourceProperty","href":"Hi.Geom.IZrListSourceProperty.html","topicHref":"Hi.Geom.IZrListSourceProperty.html","topicUid":"Hi.Geom.IZrListSourceProperty","type":"Interface"},{"name":"Mat4d","href":"Hi.Geom.Mat4d.html","topicHref":"Hi.Geom.Mat4d.html","topicUid":"Hi.Geom.Mat4d","type":"Class"},{"name":"Mat4d.IndexFlag","href":"Hi.Geom.Mat4d.IndexFlag.html","topicHref":"Hi.Geom.Mat4d.IndexFlag.html","topicUid":"Hi.Geom.Mat4d.IndexFlag","type":"Enum"},{"name":"MathNetUtil","href":"Hi.Geom.MathNetUtil.html","topicHref":"Hi.Geom.MathNetUtil.html","topicUid":"Hi.Geom.MathNetUtil","type":"Class"},{"name":"MathUtil","href":"Hi.Geom.MathUtil.html","topicHref":"Hi.Geom.MathUtil.html","topicUid":"Hi.Geom.MathUtil","type":"Class"},{"name":"NativeFraction","href":"Hi.Geom.NativeFraction.html","topicHref":"Hi.Geom.NativeFraction.html","topicUid":"Hi.Geom.NativeFraction","type":"Class"},{"name":"NativeStl","href":"Hi.Geom.NativeStl.html","topicHref":"Hi.Geom.NativeStl.html","topicUid":"Hi.Geom.NativeStl","type":"Class"},{"name":"NativeTopoStld","href":"Hi.Geom.NativeTopoStld.html","topicHref":"Hi.Geom.NativeTopoStld.html","topicUid":"Hi.Geom.NativeTopoStld","type":"Class"},{"name":"NativeTopoStlfr","href":"Hi.Geom.NativeTopoStlfr.html","topicHref":"Hi.Geom.NativeTopoStlfr.html","topicUid":"Hi.Geom.NativeTopoStlfr","type":"Class"},{"name":"PairZr","href":"Hi.Geom.PairZr.html","topicHref":"Hi.Geom.PairZr.html","topicUid":"Hi.Geom.PairZr","type":"Class"},{"name":"PairZrUtil","href":"Hi.Geom.PairZrUtil.html","topicHref":"Hi.Geom.PairZrUtil.html","topicUid":"Hi.Geom.PairZrUtil","type":"Class"},{"name":"Polar3d","href":"Hi.Geom.Polar3d.html","topicHref":"Hi.Geom.Polar3d.html","topicUid":"Hi.Geom.Polar3d","type":"Class"},{"name":"Segment3d","href":"Hi.Geom.Segment3d.html","topicHref":"Hi.Geom.Segment3d.html","topicUid":"Hi.Geom.Segment3d","type":"Class"},{"name":"Stl","href":"Hi.Geom.Stl.html","topicHref":"Hi.Geom.Stl.html","topicUid":"Hi.Geom.Stl","type":"Class"},{"name":"Stl.StlType","href":"Hi.Geom.Stl.StlType.html","topicHref":"Hi.Geom.Stl.StlType.html","topicUid":"Hi.Geom.Stl.StlType","type":"Enum"},{"name":"StlFile","href":"Hi.Geom.StlFile.html","topicHref":"Hi.Geom.StlFile.html","topicUid":"Hi.Geom.StlFile","type":"Class"},{"name":"StlFuncHost","href":"Hi.Geom.StlFuncHost.html","topicHref":"Hi.Geom.StlFuncHost.html","topicUid":"Hi.Geom.StlFuncHost","type":"Class"},{"name":"StlUtil","href":"Hi.Geom.StlUtil.html","topicHref":"Hi.Geom.StlUtil.html","topicUid":"Hi.Geom.StlUtil","type":"Class"},{"name":"TransformationGeom","href":"Hi.Geom.TransformationGeom.html","topicHref":"Hi.Geom.TransformationGeom.html","topicUid":"Hi.Geom.TransformationGeom","type":"Class"},{"name":"Tri3d","href":"Hi.Geom.Tri3d.html","topicHref":"Hi.Geom.Tri3d.html","topicUid":"Hi.Geom.Tri3d","type":"Class"},{"name":"Tri3dUtil","href":"Hi.Geom.Tri3dUtil.html","topicHref":"Hi.Geom.Tri3dUtil.html","topicUid":"Hi.Geom.Tri3dUtil","type":"Class"},{"name":"Vec2d","href":"Hi.Geom.Vec2d.html","topicHref":"Hi.Geom.Vec2d.html","topicUid":"Hi.Geom.Vec2d","type":"Class"},{"name":"Vec2i","href":"Hi.Geom.Vec2i.html","topicHref":"Hi.Geom.Vec2i.html","topicUid":"Hi.Geom.Vec2i","type":"Class"},{"name":"Vec3d","href":"Hi.Geom.Vec3d.html","topicHref":"Hi.Geom.Vec3d.html","topicUid":"Hi.Geom.Vec3d","type":"Class"}]},{"name":"Hi.Geom.Resolution","href":"Hi.Geom.Resolution.html","topicHref":"Hi.Geom.Resolution.html","topicUid":"Hi.Geom.Resolution","type":"Namespace","items":[{"name":"IPolarResolution2d","href":"Hi.Geom.Resolution.IPolarResolution2d.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2d.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2d","type":"Interface"},{"name":"IPolarResolution2dSourceProperty","href":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty","type":"Interface"},{"name":"PolarResolution2d","href":"Hi.Geom.Resolution.PolarResolution2d.html","topicHref":"Hi.Geom.Resolution.PolarResolution2d.html","topicUid":"Hi.Geom.Resolution.PolarResolution2d","type":"Class"}]},{"name":"Hi.Geom.Solvers","href":"Hi.Geom.Solvers.html","topicHref":"Hi.Geom.Solvers.html","topicUid":"Hi.Geom.Solvers","type":"Namespace","items":[{"name":"BinarySolverUtil","href":"Hi.Geom.Solvers.BinarySolverUtil.html","topicHref":"Hi.Geom.Solvers.BinarySolverUtil.html","topicUid":"Hi.Geom.Solvers.BinarySolverUtil","type":"Class"},{"name":"BinarySolvingEntry","href":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicHref":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicUid":"Hi.Geom.Solvers.BinarySolvingEntry","type":"Class"},{"name":"DeepSolvingStatus","href":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicHref":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicUid":"Hi.Geom.Solvers.DeepSolvingStatus","type":"Class"},{"name":"NumericalSolver","href":"Hi.Geom.Solvers.NumericalSolver.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.html","topicUid":"Hi.Geom.Solvers.NumericalSolver","type":"Class"},{"name":"NumericalSolver.GetRepondsDelegate","href":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate","type":"Delegate"},{"name":"NumericalSolver.SetParasDelegate","href":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate","type":"Delegate"},{"name":"SolverUtil","href":"Hi.Geom.Solvers.SolverUtil.html","topicHref":"Hi.Geom.Solvers.SolverUtil.html","topicUid":"Hi.Geom.Solvers.SolverUtil","type":"Class"},{"name":"SolvingResult","href":"Hi.Geom.Solvers.SolvingResult.html","topicHref":"Hi.Geom.Solvers.SolvingResult.html","topicUid":"Hi.Geom.Solvers.SolvingResult","type":"Class"},{"name":"SolvingStatus","href":"Hi.Geom.Solvers.SolvingStatus.html","topicHref":"Hi.Geom.Solvers.SolvingStatus.html","topicUid":"Hi.Geom.Solvers.SolvingStatus","type":"Enum"},{"name":"SolvingTerm","href":"Hi.Geom.Solvers.SolvingTerm.html","topicHref":"Hi.Geom.Solvers.SolvingTerm.html","topicUid":"Hi.Geom.Solvers.SolvingTerm","type":"Enum"}]},{"name":"Hi.Geom.Topo","href":"Hi.Geom.Topo.html","topicHref":"Hi.Geom.Topo.html","topicUid":"Hi.Geom.Topo","type":"Namespace","items":[{"name":"TopoLine3Hfr","href":"Hi.Geom.Topo.TopoLine3Hfr.html","topicHref":"Hi.Geom.Topo.TopoLine3Hfr.html","topicUid":"Hi.Geom.Topo.TopoLine3Hfr","type":"Class"},{"name":"TopoLine3StockHfr","href":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoLine3StockHfr","type":"Class"},{"name":"TopoPoint3Hfr","href":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3Hfr","type":"Class"},{"name":"TopoPoint3StockHfr","href":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3StockHfr","type":"Class"},{"name":"TopoStl3Hfr","href":"Hi.Geom.Topo.TopoStl3Hfr.html","topicHref":"Hi.Geom.Topo.TopoStl3Hfr.html","topicUid":"Hi.Geom.Topo.TopoStl3Hfr","type":"Class"},{"name":"TopoStl3HfrFlatDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee","type":"Class"},{"name":"TopoStl3HfrSmoothDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee","type":"Class"},{"name":"TopoTri3Hfr","href":"Hi.Geom.Topo.TopoTri3Hfr.html","topicHref":"Hi.Geom.Topo.TopoTri3Hfr.html","topicUid":"Hi.Geom.Topo.TopoTri3Hfr","type":"Class"},{"name":"TopoTri3StockHfr","href":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoTri3StockHfr","type":"Class"},{"name":"Vec3Hfr","href":"Hi.Geom.Topo.Vec3Hfr.html","topicHref":"Hi.Geom.Topo.Vec3Hfr.html","topicUid":"Hi.Geom.Topo.Vec3Hfr","type":"Struct"}]},{"name":"Hi.Geom.UnitUtils","href":"Hi.Geom.UnitUtils.html","topicHref":"Hi.Geom.UnitUtils.html","topicUid":"Hi.Geom.UnitUtils","type":"Namespace","items":[{"name":"PhysicsUnit","href":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicHref":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicUid":"Hi.Geom.UnitUtils.PhysicsUnit","type":"Enum"},{"name":"StringValueAttribute","href":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicHref":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicUid":"Hi.Geom.UnitUtils.StringValueAttribute","type":"Class"},{"name":"UnitConvertUtil","href":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicHref":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicUid":"Hi.Geom.UnitUtils.UnitConvertUtil","type":"Class"}]},{"name":"Hi.Grpcs","href":"Hi.Grpcs.html","topicHref":"Hi.Grpcs.html","topicUid":"Hi.Grpcs","type":"Namespace","items":[{"name":"ClStripService","href":"Hi.Grpcs.ClStripService.html","topicHref":"Hi.Grpcs.ClStripService.html","topicUid":"Hi.Grpcs.ClStripService","type":"Class"},{"name":"ClStripService.ClStripServiceBase","href":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceBase","type":"Class"},{"name":"ClStripService.ClStripServiceClient","href":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceClient","type":"Class"},{"name":"ClStripServiceReflection","href":"Hi.Grpcs.ClStripServiceReflection.html","topicHref":"Hi.Grpcs.ClStripServiceReflection.html","topicUid":"Hi.Grpcs.ClStripServiceReflection","type":"Class"},{"name":"ClStripServiceRunner","href":"Hi.Grpcs.ClStripServiceRunner.html","topicHref":"Hi.Grpcs.ClStripServiceRunner.html","topicUid":"Hi.Grpcs.ClStripServiceRunner","type":"Class"},{"name":"DictionaryStep","href":"Hi.Grpcs.DictionaryStep.html","topicHref":"Hi.Grpcs.DictionaryStep.html","topicUid":"Hi.Grpcs.DictionaryStep","type":"Class"},{"name":"PlayerService","href":"Hi.Grpcs.PlayerService.html","topicHref":"Hi.Grpcs.PlayerService.html","topicUid":"Hi.Grpcs.PlayerService","type":"Class"},{"name":"PlayerService.PlayerServiceBase","href":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceBase","type":"Class"},{"name":"PlayerService.PlayerServiceClient","href":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceClient","type":"Class"},{"name":"PlayerServiceReflection","href":"Hi.Grpcs.PlayerServiceReflection.html","topicHref":"Hi.Grpcs.PlayerServiceReflection.html","topicUid":"Hi.Grpcs.PlayerServiceReflection","type":"Class"},{"name":"PlayerServiceRunner","href":"Hi.Grpcs.PlayerServiceRunner.html","topicHref":"Hi.Grpcs.PlayerServiceRunner.html","topicUid":"Hi.Grpcs.PlayerServiceRunner","type":"Class"}]},{"name":"Hi.HiNcKits","href":"Hi.HiNcKits.html","topicHref":"Hi.HiNcKits.html","topicUid":"Hi.HiNcKits","type":"Namespace","items":[{"name":"BasePathEnum","href":"Hi.HiNcKits.BasePathEnum.html","topicHref":"Hi.HiNcKits.BasePathEnum.html","topicUid":"Hi.HiNcKits.BasePathEnum","type":"Enum"},{"name":"HiNcHost","href":"Hi.HiNcKits.HiNcHost.html","topicHref":"Hi.HiNcKits.HiNcHost.html","topicUid":"Hi.HiNcKits.HiNcHost","type":"Class"},{"name":"LocalApp","href":"Hi.HiNcKits.LocalApp.html","topicHref":"Hi.HiNcKits.LocalApp.html","topicUid":"Hi.HiNcKits.LocalApp","type":"Class"},{"name":"LocalAppConfig","href":"Hi.HiNcKits.LocalAppConfig.html","topicHref":"Hi.HiNcKits.LocalAppConfig.html","topicUid":"Hi.HiNcKits.LocalAppConfig","type":"Class"},{"name":"PlayerDivConfig","href":"Hi.HiNcKits.PlayerDivConfig.html","topicHref":"Hi.HiNcKits.PlayerDivConfig.html","topicUid":"Hi.HiNcKits.PlayerDivConfig","type":"Class"},{"name":"ProxyConfig","href":"Hi.HiNcKits.ProxyConfig.html","topicHref":"Hi.HiNcKits.ProxyConfig.html","topicUid":"Hi.HiNcKits.ProxyConfig","type":"Class"},{"name":"UserConfig","href":"Hi.HiNcKits.UserConfig.html","topicHref":"Hi.HiNcKits.UserConfig.html","topicUid":"Hi.HiNcKits.UserConfig","type":"Class"},{"name":"UserService","href":"Hi.HiNcKits.UserService.html","topicHref":"Hi.HiNcKits.UserService.html","topicUid":"Hi.HiNcKits.UserService","type":"Class"}]},{"name":"Hi.Licenses","href":"Hi.Licenses.html","topicHref":"Hi.Licenses.html","topicUid":"Hi.Licenses","type":"Namespace","items":[{"name":"AuthFeature","href":"Hi.Licenses.AuthFeature.html","topicHref":"Hi.Licenses.AuthFeature.html","topicUid":"Hi.Licenses.AuthFeature","type":"Enum"},{"name":"AuthorizationFailedEventArgs","href":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicHref":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicUid":"Hi.Licenses.AuthorizationFailedEventArgs","type":"Class"},{"name":"BlockType","href":"Hi.Licenses.BlockType.html","topicHref":"Hi.Licenses.BlockType.html","topicUid":"Hi.Licenses.BlockType","type":"Enum"},{"name":"License","href":"Hi.Licenses.License.html","topicHref":"Hi.Licenses.License.html","topicUid":"Hi.Licenses.License","type":"Class"},{"name":"LicenseType","href":"Hi.Licenses.LicenseType.html","topicHref":"Hi.Licenses.LicenseType.html","topicUid":"Hi.Licenses.LicenseType","type":"Enum"}]},{"name":"Hi.Machining","href":"Hi.Machining.html","topicHref":"Hi.Machining.html","topicUid":"Hi.Machining","type":"Namespace","items":[{"name":"FreeformRemover","href":"Hi.Machining.FreeformRemover.html","topicHref":"Hi.Machining.FreeformRemover.html","topicUid":"Hi.Machining.FreeformRemover","type":"Class"},{"name":"ICutter","href":"Hi.Machining.ICutter.html","topicHref":"Hi.Machining.ICutter.html","topicUid":"Hi.Machining.ICutter","type":"Interface"},{"name":"ICutterAnchorable","href":"Hi.Machining.ICutterAnchorable.html","topicHref":"Hi.Machining.ICutterAnchorable.html","topicUid":"Hi.Machining.ICutterAnchorable","type":"Interface"},{"name":"IGetSweptable","href":"Hi.Machining.IGetSweptable.html","topicHref":"Hi.Machining.IGetSweptable.html","topicUid":"Hi.Machining.IGetSweptable","type":"Interface"},{"name":"IMachiningTool","href":"Hi.Machining.IMachiningTool.html","topicHref":"Hi.Machining.IMachiningTool.html","topicUid":"Hi.Machining.IMachiningTool","type":"Interface"},{"name":"IVolumeRemover","href":"Hi.Machining.IVolumeRemover.html","topicHref":"Hi.Machining.IVolumeRemover.html","topicUid":"Hi.Machining.IVolumeRemover","type":"Interface"},{"name":"MachiningToolHouse","href":"Hi.Machining.MachiningToolHouse.html","topicHref":"Hi.Machining.MachiningToolHouse.html","topicUid":"Hi.Machining.MachiningToolHouse","type":"Class"},{"name":"MachiningVolumeRemovalProc","href":"Hi.Machining.MachiningVolumeRemovalProc.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc","type":"Class"},{"name":"MachiningVolumeRemovalProc.StepMotionSnapshot","href":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot","type":"Class"},{"name":"MatInterpolationKit","href":"Hi.Machining.MatInterpolationKit.html","topicHref":"Hi.Machining.MatInterpolationKit.html","topicUid":"Hi.Machining.MatInterpolationKit","type":"Class"},{"name":"MatRelation","href":"Hi.Machining.MatRelation.html","topicHref":"Hi.Machining.MatRelation.html","topicUid":"Hi.Machining.MatRelation","type":"Enum"},{"name":"MatRelationUtil","href":"Hi.Machining.MatRelationUtil.html","topicHref":"Hi.Machining.MatRelationUtil.html","topicUid":"Hi.Machining.MatRelationUtil","type":"Class"},{"name":"Sweptable","href":"Hi.Machining.Sweptable.html","topicHref":"Hi.Machining.Sweptable.html","topicUid":"Hi.Machining.Sweptable","type":"Class"},{"name":"SweptableUtil","href":"Hi.Machining.SweptableUtil.html","topicHref":"Hi.Machining.SweptableUtil.html","topicUid":"Hi.Machining.SweptableUtil","type":"Class"},{"name":"ToolNotFoundException","href":"Hi.Machining.ToolNotFoundException.html","topicHref":"Hi.Machining.ToolNotFoundException.html","topicUid":"Hi.Machining.ToolNotFoundException","type":"Class"}]},{"name":"Hi.Machining.MachiningEquipmentUtils","href":"Hi.Machining.MachiningEquipmentUtils.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.html","topicUid":"Hi.Machining.MachiningEquipmentUtils","type":"Namespace","items":[{"name":"CollidableComponentEnum","href":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum","type":"Enum"},{"name":"IGetMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment","type":"Interface"},{"name":"IMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment","type":"Interface"},{"name":"MachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment","type":"Class"},{"name":"MachiningEquipmentCollisionIndex","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex","type":"Class"},{"name":"MachiningEquipmentCollisionIndexPairsSource","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource","type":"Class"},{"name":"MachiningEquipmentUtil","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil","type":"Class"}]},{"name":"Hi.MachiningProcs","href":"Hi.MachiningProcs.html","topicHref":"Hi.MachiningProcs.html","topicUid":"Hi.MachiningProcs","type":"Namespace","items":[{"name":"ConfigStepFunc","href":"Hi.MachiningProcs.ConfigStepFunc.html","topicHref":"Hi.MachiningProcs.ConfigStepFunc.html","topicUid":"Hi.MachiningProcs.ConfigStepFunc","type":"Delegate"},{"name":"IMachiningProjectGetter","href":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicHref":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicUid":"Hi.MachiningProcs.IMachiningProjectGetter","type":"Interface"},{"name":"IProjectService","href":"Hi.MachiningProcs.IProjectService.html","topicHref":"Hi.MachiningProcs.IProjectService.html","topicUid":"Hi.MachiningProcs.IProjectService","type":"Interface"},{"name":"LocalProjectService","href":"Hi.MachiningProcs.LocalProjectService.html","topicHref":"Hi.MachiningProcs.LocalProjectService.html","topicUid":"Hi.MachiningProcs.LocalProjectService","type":"Class"},{"name":"LocalProjectService.MachiningProjectChangedDelegate","href":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicHref":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicUid":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate","type":"Delegate"},{"name":"MachiningActRunner","href":"Hi.MachiningProcs.MachiningActRunner.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.html","topicUid":"Hi.MachiningProcs.MachiningActRunner","type":"Class"},{"name":"MachiningActRunner.MachiningStepBuiltDelegate","href":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicUid":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate","type":"Delegate"},{"name":"MachiningActRunnerConfig","href":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicHref":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicUid":"Hi.MachiningProcs.MachiningActRunnerConfig","type":"Class"},{"name":"MachiningParallelProc","href":"Hi.MachiningProcs.MachiningParallelProc.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc","type":"Class"},{"name":"MachiningParallelProc.StepTaskBundle","href":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle","type":"Class"},{"name":"MachiningParallelProc.SubstractionResult","href":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult","type":"Class"},{"name":"MachiningProject","href":"Hi.MachiningProcs.MachiningProject.html","topicHref":"Hi.MachiningProcs.MachiningProject.html","topicUid":"Hi.MachiningProcs.MachiningProject","type":"Class"},{"name":"MachiningProjectDisplayee","href":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicHref":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicUid":"Hi.MachiningProcs.MachiningProjectDisplayee","type":"Class"},{"name":"MachiningSession","href":"Hi.MachiningProcs.MachiningSession.html","topicHref":"Hi.MachiningProcs.MachiningSession.html","topicUid":"Hi.MachiningProcs.MachiningSession","type":"Class"},{"name":"MillingUtil","href":"Hi.MachiningProcs.MillingUtil.html","topicHref":"Hi.MachiningProcs.MillingUtil.html","topicUid":"Hi.MachiningProcs.MillingUtil","type":"Class"},{"name":"NcRunnerSessionState","href":"Hi.MachiningProcs.NcRunnerSessionState.html","topicHref":"Hi.MachiningProcs.NcRunnerSessionState.html","topicUid":"Hi.MachiningProcs.NcRunnerSessionState","type":"Class"},{"name":"ProxyProjectService","href":"Hi.MachiningProcs.ProxyProjectService.html","topicHref":"Hi.MachiningProcs.ProxyProjectService.html","topicUid":"Hi.MachiningProcs.ProxyProjectService","type":"Class"},{"name":"RenderingFlag","href":"Hi.MachiningProcs.RenderingFlag.html","topicHref":"Hi.MachiningProcs.RenderingFlag.html","topicUid":"Hi.MachiningProcs.RenderingFlag","type":"Enum"},{"name":"RuntimeApi","href":"Hi.MachiningProcs.RuntimeApi.html","topicHref":"Hi.MachiningProcs.RuntimeApi.html","topicUid":"Hi.MachiningProcs.RuntimeApi","type":"Class"},{"name":"RuntimeController","href":"Hi.MachiningProcs.RuntimeController.html","topicHref":"Hi.MachiningProcs.RuntimeController.html","topicUid":"Hi.MachiningProcs.RuntimeController","type":"Class"},{"name":"SessionMessage","href":"Hi.MachiningProcs.SessionMessage.html","topicHref":"Hi.MachiningProcs.SessionMessage.html","topicUid":"Hi.MachiningProcs.SessionMessage","type":"Class"},{"name":"SessionMessagePack","href":"Hi.MachiningProcs.SessionMessagePack.html","topicHref":"Hi.MachiningProcs.SessionMessagePack.html","topicUid":"Hi.MachiningProcs.SessionMessagePack","type":"Class"},{"name":"SessionProgress","href":"Hi.MachiningProcs.SessionProgress.html","topicHref":"Hi.MachiningProcs.SessionProgress.html","topicUid":"Hi.MachiningProcs.SessionProgress","type":"Class"},{"name":"SessionProgress.FilterFlag","href":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicHref":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicUid":"Hi.MachiningProcs.SessionProgress.FilterFlag","type":"Enum"},{"name":"SetupController","href":"Hi.MachiningProcs.SetupController.html","topicHref":"Hi.MachiningProcs.SetupController.html","topicUid":"Hi.MachiningProcs.SetupController","type":"Class"},{"name":"SpindleSpeedCache","href":"Hi.MachiningProcs.SpindleSpeedCache.html","topicHref":"Hi.MachiningProcs.SpindleSpeedCache.html","topicUid":"Hi.MachiningProcs.SpindleSpeedCache","type":"Class"}]},{"name":"Hi.MachiningSteps","href":"Hi.MachiningSteps.html","topicHref":"Hi.MachiningSteps.html","topicUid":"Hi.MachiningSteps","type":"Namespace","items":[{"name":"IFlagText","href":"Hi.MachiningSteps.IFlagText.html","topicHref":"Hi.MachiningSteps.IFlagText.html","topicUid":"Hi.MachiningSteps.IFlagText","type":"Interface"},{"name":"IMachiningStepHost","href":"Hi.MachiningSteps.IMachiningStepHost.html","topicHref":"Hi.MachiningSteps.IMachiningStepHost.html","topicUid":"Hi.MachiningSteps.IMachiningStepHost","type":"Interface"},{"name":"MachineMotionStep","href":"Hi.MachiningSteps.MachineMotionStep.html","topicHref":"Hi.MachiningSteps.MachineMotionStep.html","topicUid":"Hi.MachiningSteps.MachineMotionStep","type":"Class"},{"name":"MachiningStep","href":"Hi.MachiningSteps.MachiningStep.html","topicHref":"Hi.MachiningSteps.MachiningStep.html","topicUid":"Hi.MachiningSteps.MachiningStep","type":"Class"},{"name":"MachiningStep.CollidedKeyPair","href":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicHref":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicUid":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair","type":"Class"},{"name":"MachiningStepUtil","href":"Hi.MachiningSteps.MachiningStepUtil.html","topicHref":"Hi.MachiningSteps.MachiningStepUtil.html","topicUid":"Hi.MachiningSteps.MachiningStepUtil","type":"Class"},{"name":"PresentAccess","href":"Hi.MachiningSteps.PresentAccess.html","topicHref":"Hi.MachiningSteps.PresentAccess.html","topicUid":"Hi.MachiningSteps.PresentAccess","type":"Class"},{"name":"PresentAttribute","href":"Hi.MachiningSteps.PresentAttribute.html","topicHref":"Hi.MachiningSteps.PresentAttribute.html","topicUid":"Hi.MachiningSteps.PresentAttribute","type":"Class"},{"name":"PropertyAccess","href":"Hi.MachiningSteps.PropertyAccess-1.html","topicHref":"Hi.MachiningSteps.PropertyAccess-1.html","topicUid":"Hi.MachiningSteps.PropertyAccess`1","type":"Class"}]},{"name":"Hi.Mapping","href":"Hi.Mapping.html","topicHref":"Hi.Mapping.html","topicUid":"Hi.Mapping","type":"Namespace","items":[{"name":"CsvNcStep","href":"Hi.Mapping.CsvNcStep.html","topicHref":"Hi.Mapping.CsvNcStep.html","topicUid":"Hi.Mapping.CsvNcStep","type":"Class"},{"name":"FileToTimeShotMapping","href":"Hi.Mapping.FileToTimeShotMapping.html","topicHref":"Hi.Mapping.FileToTimeShotMapping.html","topicUid":"Hi.Mapping.FileToTimeShotMapping","type":"Class"},{"name":"IAccelerationShot","href":"Hi.Mapping.IAccelerationShot.html","topicHref":"Hi.Mapping.IAccelerationShot.html","topicUid":"Hi.Mapping.IAccelerationShot","type":"Interface"},{"name":"IForceShot","href":"Hi.Mapping.IForceShot.html","topicHref":"Hi.Mapping.IForceShot.html","topicUid":"Hi.Mapping.IForceShot","type":"Interface"},{"name":"IMomentShot","href":"Hi.Mapping.IMomentShot.html","topicHref":"Hi.Mapping.IMomentShot.html","topicUid":"Hi.Mapping.IMomentShot","type":"Interface"},{"name":"ITimeShot","href":"Hi.Mapping.ITimeShot.html","topicHref":"Hi.Mapping.ITimeShot.html","topicUid":"Hi.Mapping.ITimeShot","type":"Interface"},{"name":"MappingUtil","href":"Hi.Mapping.MappingUtil.html","topicHref":"Hi.Mapping.MappingUtil.html","topicUid":"Hi.Mapping.MappingUtil","type":"Class"},{"name":"StepTimeShotUtil","href":"Hi.Mapping.StepTimeShotUtil.html","topicHref":"Hi.Mapping.StepTimeShotUtil.html","topicUid":"Hi.Mapping.StepTimeShotUtil","type":"Class"},{"name":"StepTimeShotUtil.CycleSamplingMode","href":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicHref":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicUid":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode","type":"Enum"},{"name":"StepTimeShotUtil.GetTimeShotByFileDelegate","href":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicHref":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicUid":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate","type":"Delegate"},{"name":"TimeMapping","href":"Hi.Mapping.TimeMapping.html","topicHref":"Hi.Mapping.TimeMapping.html","topicUid":"Hi.Mapping.TimeMapping","type":"Class"}]},{"name":"Hi.Mappings","href":"Hi.Mappings.html","topicHref":"Hi.Mappings.html","topicUid":"Hi.Mappings","type":"Namespace","items":[{"name":"FileTimeSection","href":"Hi.Mappings.FileTimeSection.html","topicHref":"Hi.Mappings.FileTimeSection.html","topicUid":"Hi.Mappings.FileTimeSection","type":"Class"},{"name":"FileTimeSection.TimeOption","href":"Hi.Mappings.FileTimeSection.TimeOption.html","topicHref":"Hi.Mappings.FileTimeSection.TimeOption.html","topicUid":"Hi.Mappings.FileTimeSection.TimeOption","type":"Enum"}]},{"name":"Hi.Mech","href":"Hi.Mech.html","topicHref":"Hi.Mech.html","topicUid":"Hi.Mech","type":"Namespace","items":[{"name":"GeneralMechanism","href":"Hi.Mech.GeneralMechanism.html","topicHref":"Hi.Mech.GeneralMechanism.html","topicUid":"Hi.Mech.GeneralMechanism","type":"Class"},{"name":"IGetAnchorToSolidDictionary","href":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicHref":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicUid":"Hi.Mech.IGetAnchorToSolidDictionary","type":"Interface"},{"name":"IGetMachiningChain","href":"Hi.Mech.IGetMachiningChain.html","topicHref":"Hi.Mech.IGetMachiningChain.html","topicUid":"Hi.Mech.IGetMachiningChain","type":"Interface"},{"name":"IMachiningChain","href":"Hi.Mech.IMachiningChain.html","topicHref":"Hi.Mech.IMachiningChain.html","topicUid":"Hi.Mech.IMachiningChain","type":"Interface"},{"name":"IMachiningChainSource","href":"Hi.Mech.IMachiningChainSource.html","topicHref":"Hi.Mech.IMachiningChainSource.html","topicUid":"Hi.Mech.IMachiningChainSource","type":"Interface"},{"name":"MachiningChainUtil","href":"Hi.Mech.MachiningChainUtil.html","topicHref":"Hi.Mech.MachiningChainUtil.html","topicUid":"Hi.Mech.MachiningChainUtil","type":"Class"}]},{"name":"Hi.Mech.Topo","href":"Hi.Mech.Topo.html","topicHref":"Hi.Mech.Topo.html","topicUid":"Hi.Mech.Topo","type":"Namespace","items":[{"name":"Anchor","href":"Hi.Mech.Topo.Anchor.html","topicHref":"Hi.Mech.Topo.Anchor.html","topicUid":"Hi.Mech.Topo.Anchor","type":"Class"},{"name":"AnchorFuncSource","href":"Hi.Mech.Topo.AnchorFuncSource.html","topicHref":"Hi.Mech.Topo.AnchorFuncSource.html","topicUid":"Hi.Mech.Topo.AnchorFuncSource","type":"Class"},{"name":"AnchoredBoxable","href":"Hi.Mech.Topo.AnchoredBoxable.html","topicHref":"Hi.Mech.Topo.AnchoredBoxable.html","topicUid":"Hi.Mech.Topo.AnchoredBoxable","type":"Class"},{"name":"AnchoredDisplayee","href":"Hi.Mech.Topo.AnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.AnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.AnchoredDisplayee","type":"Class"},{"name":"Asmb","href":"Hi.Mech.Topo.Asmb.html","topicHref":"Hi.Mech.Topo.Asmb.html","topicUid":"Hi.Mech.Topo.Asmb","type":"Class"},{"name":"AsmbDraw","href":"Hi.Mech.Topo.AsmbDraw.html","topicHref":"Hi.Mech.Topo.AsmbDraw.html","topicUid":"Hi.Mech.Topo.AsmbDraw","type":"Class"},{"name":"Branch","href":"Hi.Mech.Topo.Branch.html","topicHref":"Hi.Mech.Topo.Branch.html","topicUid":"Hi.Mech.Topo.Branch","type":"Class"},{"name":"DirectionBranchEntry","href":"Hi.Mech.Topo.DirectionBranchEntry.html","topicHref":"Hi.Mech.Topo.DirectionBranchEntry.html","topicUid":"Hi.Mech.Topo.DirectionBranchEntry","type":"Class"},{"name":"DirectionBranchPackUtil","href":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicHref":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicUid":"Hi.Mech.Topo.DirectionBranchPackUtil","type":"Class"},{"name":"DynamicFreeform","href":"Hi.Mech.Topo.DynamicFreeform.html","topicHref":"Hi.Mech.Topo.DynamicFreeform.html","topicUid":"Hi.Mech.Topo.DynamicFreeform","type":"Class"},{"name":"DynamicRotation","href":"Hi.Mech.Topo.DynamicRotation.html","topicHref":"Hi.Mech.Topo.DynamicRotation.html","topicUid":"Hi.Mech.Topo.DynamicRotation","type":"Class"},{"name":"DynamicTranslation","href":"Hi.Mech.Topo.DynamicTranslation.html","topicHref":"Hi.Mech.Topo.DynamicTranslation.html","topicUid":"Hi.Mech.Topo.DynamicTranslation","type":"Class"},{"name":"GeneralTransform","href":"Hi.Mech.Topo.GeneralTransform.html","topicHref":"Hi.Mech.Topo.GeneralTransform.html","topicUid":"Hi.Mech.Topo.GeneralTransform","type":"Class"},{"name":"IAnchoredDisplayee","href":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.IAnchoredDisplayee","type":"Interface"},{"name":"IDynamicRegular","href":"Hi.Mech.Topo.IDynamicRegular.html","topicHref":"Hi.Mech.Topo.IDynamicRegular.html","topicUid":"Hi.Mech.Topo.IDynamicRegular","type":"Interface"},{"name":"IDynamicRotation","href":"Hi.Mech.Topo.IDynamicRotation.html","topicHref":"Hi.Mech.Topo.IDynamicRotation.html","topicUid":"Hi.Mech.Topo.IDynamicRotation","type":"Interface"},{"name":"IDynamicTransformer","href":"Hi.Mech.Topo.IDynamicTransformer.html","topicHref":"Hi.Mech.Topo.IDynamicTransformer.html","topicUid":"Hi.Mech.Topo.IDynamicTransformer","type":"Interface"},{"name":"IGetAnchor","href":"Hi.Mech.Topo.IGetAnchor.html","topicHref":"Hi.Mech.Topo.IGetAnchor.html","topicUid":"Hi.Mech.Topo.IGetAnchor","type":"Interface"},{"name":"IGetAnchoredDisplayeeList","href":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicHref":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicUid":"Hi.Mech.Topo.IGetAnchoredDisplayeeList","type":"Interface"},{"name":"IGetAsmb","href":"Hi.Mech.Topo.IGetAsmb.html","topicHref":"Hi.Mech.Topo.IGetAsmb.html","topicUid":"Hi.Mech.Topo.IGetAsmb","type":"Interface"},{"name":"IGetFletchBuckle","href":"Hi.Mech.Topo.IGetFletchBuckle.html","topicHref":"Hi.Mech.Topo.IGetFletchBuckle.html","topicUid":"Hi.Mech.Topo.IGetFletchBuckle","type":"Interface"},{"name":"IGetInverseTransformer","href":"Hi.Mech.Topo.IGetInverseTransformer.html","topicHref":"Hi.Mech.Topo.IGetInverseTransformer.html","topicUid":"Hi.Mech.Topo.IGetInverseTransformer","type":"Interface"},{"name":"IGetTopoIndex","href":"Hi.Mech.Topo.IGetTopoIndex.html","topicHref":"Hi.Mech.Topo.IGetTopoIndex.html","topicUid":"Hi.Mech.Topo.IGetTopoIndex","type":"Interface"},{"name":"IStaticTransformer","href":"Hi.Mech.Topo.IStaticTransformer.html","topicHref":"Hi.Mech.Topo.IStaticTransformer.html","topicUid":"Hi.Mech.Topo.IStaticTransformer","type":"Interface"},{"name":"ITopo","href":"Hi.Mech.Topo.ITopo.html","topicHref":"Hi.Mech.Topo.ITopo.html","topicUid":"Hi.Mech.Topo.ITopo","type":"Interface"},{"name":"ITopoDisplayee","href":"Hi.Mech.Topo.ITopoDisplayee.html","topicHref":"Hi.Mech.Topo.ITopoDisplayee.html","topicUid":"Hi.Mech.Topo.ITopoDisplayee","type":"Interface"},{"name":"ITransformer","href":"Hi.Mech.Topo.ITransformer.html","topicHref":"Hi.Mech.Topo.ITransformer.html","topicUid":"Hi.Mech.Topo.ITransformer","type":"Interface"},{"name":"ITransformerProperty","href":"Hi.Mech.Topo.ITransformerProperty.html","topicHref":"Hi.Mech.Topo.ITransformerProperty.html","topicUid":"Hi.Mech.Topo.ITransformerProperty","type":"Interface"},{"name":"NoTransform","href":"Hi.Mech.Topo.NoTransform.html","topicHref":"Hi.Mech.Topo.NoTransform.html","topicUid":"Hi.Mech.Topo.NoTransform","type":"Class"},{"name":"StackTransformer","href":"Hi.Mech.Topo.StackTransformer.html","topicHref":"Hi.Mech.Topo.StackTransformer.html","topicUid":"Hi.Mech.Topo.StackTransformer","type":"Class"},{"name":"StaticFreeform","href":"Hi.Mech.Topo.StaticFreeform.html","topicHref":"Hi.Mech.Topo.StaticFreeform.html","topicUid":"Hi.Mech.Topo.StaticFreeform","type":"Class"},{"name":"StaticRotation","href":"Hi.Mech.Topo.StaticRotation.html","topicHref":"Hi.Mech.Topo.StaticRotation.html","topicUid":"Hi.Mech.Topo.StaticRotation","type":"Class"},{"name":"StaticTranslation","href":"Hi.Mech.Topo.StaticTranslation.html","topicHref":"Hi.Mech.Topo.StaticTranslation.html","topicUid":"Hi.Mech.Topo.StaticTranslation","type":"Class"},{"name":"TopoDisplayee","href":"Hi.Mech.Topo.TopoDisplayee.html","topicHref":"Hi.Mech.Topo.TopoDisplayee.html","topicUid":"Hi.Mech.Topo.TopoDisplayee","type":"Class"},{"name":"TopoDisplayeeUtil","href":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicHref":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicUid":"Hi.Mech.Topo.TopoDisplayeeUtil","type":"Class"},{"name":"TopoReflection","href":"Hi.Mech.Topo.TopoReflection.html","topicHref":"Hi.Mech.Topo.TopoReflection.html","topicUid":"Hi.Mech.Topo.TopoReflection","type":"Class"},{"name":"TopoUtil","href":"Hi.Mech.Topo.TopoUtil.html","topicHref":"Hi.Mech.Topo.TopoUtil.html","topicUid":"Hi.Mech.Topo.TopoUtil","type":"Class"},{"name":"TransformerUtil","href":"Hi.Mech.Topo.TransformerUtil.html","topicHref":"Hi.Mech.Topo.TransformerUtil.html","topicUid":"Hi.Mech.Topo.TransformerUtil","type":"Class"}]},{"name":"Hi.Milling","href":"Hi.Milling.html","topicHref":"Hi.Milling.html","topicUid":"Hi.Milling","type":"Namespace","items":[{"name":"IGetDiameter","href":"Hi.Milling.IGetDiameter.html","topicHref":"Hi.Milling.IGetDiameter.html","topicUid":"Hi.Milling.IGetDiameter","type":"Interface"},{"name":"IGetFluteHeight","href":"Hi.Milling.IGetFluteHeight.html","topicHref":"Hi.Milling.IGetFluteHeight.html","topicUid":"Hi.Milling.IGetFluteHeight","type":"Interface"},{"name":"IGetMillingGeomBrief","href":"Hi.Milling.IGetMillingGeomBrief.html","topicHref":"Hi.Milling.IGetMillingGeomBrief.html","topicUid":"Hi.Milling.IGetMillingGeomBrief","type":"Interface"},{"name":"IGetRadialReliefAngle","href":"Hi.Milling.IGetRadialReliefAngle.html","topicHref":"Hi.Milling.IGetRadialReliefAngle.html","topicUid":"Hi.Milling.IGetRadialReliefAngle","type":"Interface"},{"name":"IMillingGeomBriefAccessor","href":"Hi.Milling.IMillingGeomBriefAccessor.html","topicHref":"Hi.Milling.IMillingGeomBriefAccessor.html","topicUid":"Hi.Milling.IMillingGeomBriefAccessor","type":"Interface"},{"name":"MillingGeomBrief","href":"Hi.Milling.MillingGeomBrief.html","topicHref":"Hi.Milling.MillingGeomBrief.html","topicUid":"Hi.Milling.MillingGeomBrief","type":"Class"},{"name":"MillingRemovalUtil","href":"Hi.Milling.MillingRemovalUtil.html","topicHref":"Hi.Milling.MillingRemovalUtil.html","topicUid":"Hi.Milling.MillingRemovalUtil","type":"Class"},{"name":"SpindleCapability","href":"Hi.Milling.SpindleCapability.html","topicHref":"Hi.Milling.SpindleCapability.html","topicUid":"Hi.Milling.SpindleCapability","type":"Class"}]},{"name":"Hi.Milling.Apts","href":"Hi.Milling.Apts.html","topicHref":"Hi.Milling.Apts.html","topicUid":"Hi.Milling.Apts","type":"Namespace","items":[{"name":"AptDerivative","href":"Hi.Milling.Apts.AptDerivative.html","topicHref":"Hi.Milling.Apts.AptDerivative.html","topicUid":"Hi.Milling.Apts.AptDerivative","type":"Class"},{"name":"BallApt","href":"Hi.Milling.Apts.BallApt.html","topicHref":"Hi.Milling.Apts.BallApt.html","topicUid":"Hi.Milling.Apts.BallApt","type":"Class"},{"name":"BullNoseApt","href":"Hi.Milling.Apts.BullNoseApt.html","topicHref":"Hi.Milling.Apts.BullNoseApt.html","topicUid":"Hi.Milling.Apts.BullNoseApt","type":"Class"},{"name":"ColumnApt","href":"Hi.Milling.Apts.ColumnApt.html","topicHref":"Hi.Milling.Apts.ColumnApt.html","topicUid":"Hi.Milling.Apts.ColumnApt","type":"Class"},{"name":"ConeApt","href":"Hi.Milling.Apts.ConeApt.html","topicHref":"Hi.Milling.Apts.ConeApt.html","topicUid":"Hi.Milling.Apts.ConeApt","type":"Class"},{"name":"ExactColumnApt","href":"Hi.Milling.Apts.ExactColumnApt.html","topicHref":"Hi.Milling.Apts.ExactColumnApt.html","topicUid":"Hi.Milling.Apts.ExactColumnApt","type":"Class"},{"name":"GeneralApt","href":"Hi.Milling.Apts.GeneralApt.html","topicHref":"Hi.Milling.Apts.GeneralApt.html","topicUid":"Hi.Milling.Apts.GeneralApt","type":"Class"},{"name":"IAptAlpha","href":"Hi.Milling.Apts.IAptAlpha.html","topicHref":"Hi.Milling.Apts.IAptAlpha.html","topicUid":"Hi.Milling.Apts.IAptAlpha","type":"Interface"},{"name":"IAptBased","href":"Hi.Milling.Apts.IAptBased.html","topicHref":"Hi.Milling.Apts.IAptBased.html","topicUid":"Hi.Milling.Apts.IAptBased","type":"Interface"},{"name":"IAptBeta","href":"Hi.Milling.Apts.IAptBeta.html","topicHref":"Hi.Milling.Apts.IAptBeta.html","topicUid":"Hi.Milling.Apts.IAptBeta","type":"Interface"},{"name":"IAptRc","href":"Hi.Milling.Apts.IAptRc.html","topicHref":"Hi.Milling.Apts.IAptRc.html","topicUid":"Hi.Milling.Apts.IAptRc","type":"Interface"},{"name":"IAptRr","href":"Hi.Milling.Apts.IAptRr.html","topicHref":"Hi.Milling.Apts.IAptRr.html","topicUid":"Hi.Milling.Apts.IAptRr","type":"Interface"},{"name":"IAptRz","href":"Hi.Milling.Apts.IAptRz.html","topicHref":"Hi.Milling.Apts.IAptRz.html","topicUid":"Hi.Milling.Apts.IAptRz","type":"Interface"},{"name":"IGetApt","href":"Hi.Milling.Apts.IGetApt.html","topicHref":"Hi.Milling.Apts.IGetApt.html","topicUid":"Hi.Milling.Apts.IGetApt","type":"Interface"},{"name":"IGetGeneralApt","href":"Hi.Milling.Apts.IGetGeneralApt.html","topicHref":"Hi.Milling.Apts.IGetGeneralApt.html","topicUid":"Hi.Milling.Apts.IGetGeneralApt","type":"Interface"},{"name":"TaperApt","href":"Hi.Milling.Apts.TaperApt.html","topicHref":"Hi.Milling.Apts.TaperApt.html","topicUid":"Hi.Milling.Apts.TaperApt","type":"Class"},{"name":"apt_t","href":"Hi.Milling.Apts.apt_t.html","topicHref":"Hi.Milling.Apts.apt_t.html","topicUid":"Hi.Milling.Apts.apt_t","type":"Struct"}]},{"name":"Hi.Milling.Cutters","href":"Hi.Milling.Cutters.html","topicHref":"Hi.Milling.Cutters.html","topicUid":"Hi.Milling.Cutters","type":"Namespace","items":[{"name":"AptProfile","href":"Hi.Milling.Cutters.AptProfile.html","topicHref":"Hi.Milling.Cutters.AptProfile.html","topicUid":"Hi.Milling.Cutters.AptProfile","type":"Class"},{"name":"ConstRatioProfile","href":"Hi.Milling.Cutters.ConstRatioProfile.html","topicHref":"Hi.Milling.Cutters.ConstRatioProfile.html","topicUid":"Hi.Milling.Cutters.ConstRatioProfile","type":"Class"},{"name":"CustomSpinningProfile","href":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicHref":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicUid":"Hi.Milling.Cutters.CustomSpinningProfile","type":"Class"},{"name":"CutterUtil","href":"Hi.Milling.Cutters.CutterUtil.html","topicHref":"Hi.Milling.Cutters.CutterUtil.html","topicUid":"Hi.Milling.Cutters.CutterUtil","type":"Class"},{"name":"FluteContourDisplayee","href":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicHref":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicUid":"Hi.Milling.Cutters.FluteContourDisplayee","type":"Class"},{"name":"FluteDependentRatioProfile","href":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicHref":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicUid":"Hi.Milling.Cutters.FluteDependentRatioProfile","type":"Class"},{"name":"IShaperProfile","href":"Hi.Milling.Cutters.IShaperProfile.html","topicHref":"Hi.Milling.Cutters.IShaperProfile.html","topicUid":"Hi.Milling.Cutters.IShaperProfile","type":"Interface"},{"name":"MillingCutter","href":"Hi.Milling.Cutters.MillingCutter.html","topicHref":"Hi.Milling.Cutters.MillingCutter.html","topicUid":"Hi.Milling.Cutters.MillingCutter","type":"Class"},{"name":"MillingCutter.IntegralModeEnum","href":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum","type":"Enum"},{"name":"MillingCutter.MassAssignmentMode","href":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicHref":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicUid":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode","type":"Enum"},{"name":"MillingCutterEditorDisplayee","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee","type":"Class"},{"name":"MillingCutterEditorDisplayee.ShapeModeEnum","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum","type":"Enum"}]},{"name":"Hi.Milling.Engagements","href":"Hi.Milling.Engagements.html","topicHref":"Hi.Milling.Engagements.html","topicUid":"Hi.Milling.Engagements","type":"Namespace","items":[{"name":"BitwiseMillingEngagement","href":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicHref":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicUid":"Hi.Milling.Engagements.BitwiseMillingEngagement","type":"Class"},{"name":"EngagementLayer","href":"Hi.Milling.Engagements.EngagementLayer.html","topicHref":"Hi.Milling.Engagements.EngagementLayer.html","topicUid":"Hi.Milling.Engagements.EngagementLayer","type":"Class"},{"name":"EngagementSlice","href":"Hi.Milling.Engagements.EngagementSlice.html","topicHref":"Hi.Milling.Engagements.EngagementSlice.html","topicUid":"Hi.Milling.Engagements.EngagementSlice","type":"Class"},{"name":"IBitwiseMillingEngagementSupport","href":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicHref":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicUid":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport","type":"Interface"},{"name":"IGetLayerMillingEngagement","href":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.IGetLayerMillingEngagement","type":"Interface"},{"name":"LayerMillingEngagement","href":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.LayerMillingEngagement","type":"Class"},{"name":"MillingEngagementUtil","href":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicHref":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicUid":"Hi.Milling.Engagements.MillingEngagementUtil","type":"Class"}]},{"name":"Hi.Milling.FluteContours","href":"Hi.Milling.FluteContours.html","topicHref":"Hi.Milling.FluteContours.html","topicUid":"Hi.Milling.FluteContours","type":"Namespace","items":[{"name":"ConstHelixSideContour","href":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicHref":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicUid":"Hi.Milling.FluteContours.ConstHelixSideContour","type":"Class"},{"name":"FluteContour","href":"Hi.Milling.FluteContours.FluteContour.html","topicHref":"Hi.Milling.FluteContours.FluteContour.html","topicUid":"Hi.Milling.FluteContours.FluteContour","type":"Class"},{"name":"FluteContourUtil","href":"Hi.Milling.FluteContours.FluteContourUtil.html","topicHref":"Hi.Milling.FluteContours.FluteContourUtil.html","topicUid":"Hi.Milling.FluteContours.FluteContourUtil","type":"Class"},{"name":"FreeContourTray","href":"Hi.Milling.FluteContours.FreeContourTray.html","topicHref":"Hi.Milling.FluteContours.FreeContourTray.html","topicUid":"Hi.Milling.FluteContours.FreeContourTray","type":"Class"},{"name":"FreeformSideContour","href":"Hi.Milling.FluteContours.FreeformSideContour.html","topicHref":"Hi.Milling.FluteContours.FreeformSideContour.html","topicUid":"Hi.Milling.FluteContours.FreeformSideContour","type":"Class"},{"name":"IBottomContour","href":"Hi.Milling.FluteContours.IBottomContour.html","topicHref":"Hi.Milling.FluteContours.IBottomContour.html","topicUid":"Hi.Milling.FluteContours.IBottomContour","type":"Interface"},{"name":"IContourTray","href":"Hi.Milling.FluteContours.IContourTray.html","topicHref":"Hi.Milling.FluteContours.IContourTray.html","topicUid":"Hi.Milling.FluteContours.IContourTray","type":"Interface"},{"name":"IFluteNumSourceProperty","href":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicHref":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicUid":"Hi.Milling.FluteContours.IFluteNumSourceProperty","type":"Interface"},{"name":"IGetFluteNum","href":"Hi.Milling.FluteContours.IGetFluteNum.html","topicHref":"Hi.Milling.FluteContours.IGetFluteNum.html","topicUid":"Hi.Milling.FluteContours.IGetFluteNum","type":"Interface"},{"name":"ISideContour","href":"Hi.Milling.FluteContours.ISideContour.html","topicHref":"Hi.Milling.FluteContours.ISideContour.html","topicUid":"Hi.Milling.FluteContours.ISideContour","type":"Interface"},{"name":"IWorkingContour","href":"Hi.Milling.FluteContours.IWorkingContour.html","topicHref":"Hi.Milling.FluteContours.IWorkingContour.html","topicUid":"Hi.Milling.FluteContours.IWorkingContour","type":"Interface"},{"name":"ShiftedWorkingContour","href":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicHref":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicUid":"Hi.Milling.FluteContours.ShiftedWorkingContour","type":"Class"},{"name":"SideContourDisplayee","href":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicHref":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicUid":"Hi.Milling.FluteContours.SideContourDisplayee","type":"Class"},{"name":"SlideBottomContour","href":"Hi.Milling.FluteContours.SlideBottomContour.html","topicHref":"Hi.Milling.FluteContours.SlideBottomContour.html","topicUid":"Hi.Milling.FluteContours.SlideBottomContour","type":"Class"},{"name":"SpanContourPos4d","href":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicHref":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicUid":"Hi.Milling.FluteContours.SpanContourPos4d","type":"Class"},{"name":"UniformContourTray","href":"Hi.Milling.FluteContours.UniformContourTray.html","topicHref":"Hi.Milling.FluteContours.UniformContourTray.html","topicUid":"Hi.Milling.FluteContours.UniformContourTray","type":"Class"}]},{"name":"Hi.Milling.MillingTools","href":"Hi.Milling.MillingTools.html","topicHref":"Hi.Milling.MillingTools.html","topicUid":"Hi.Milling.MillingTools","type":"Namespace","items":[{"name":"MillingTool","href":"Hi.Milling.MillingTools.MillingTool.html","topicHref":"Hi.Milling.MillingTools.MillingTool.html","topicUid":"Hi.Milling.MillingTools.MillingTool","type":"Class"},{"name":"MillingToolAnchorReference","href":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicHref":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicUid":"Hi.Milling.MillingTools.MillingToolAnchorReference","type":"Enum"},{"name":"MillingToolEditorDisplayee","href":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicHref":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicUid":"Hi.Milling.MillingTools.MillingToolEditorDisplayee","type":"Class"},{"name":"MillingToolUtil","href":"Hi.Milling.MillingTools.MillingToolUtil.html","topicHref":"Hi.Milling.MillingTools.MillingToolUtil.html","topicUid":"Hi.Milling.MillingTools.MillingToolUtil","type":"Class"}]},{"name":"Hi.MillingForces","href":"Hi.MillingForces.html","topicHref":"Hi.MillingForces.html","topicUid":"Hi.MillingForces","type":"Namespace","items":[{"name":"FluteZData","href":"Hi.MillingForces.FluteZData.html","topicHref":"Hi.MillingForces.FluteZData.html","topicUid":"Hi.MillingForces.FluteZData","type":"Class"},{"name":"IGetMillingForce","href":"Hi.MillingForces.IGetMillingForce.html","topicHref":"Hi.MillingForces.IGetMillingForce.html","topicUid":"Hi.MillingForces.IGetMillingForce","type":"Interface"},{"name":"IMillingForceAccessor","href":"Hi.MillingForces.IMillingForceAccessor.html","topicHref":"Hi.MillingForces.IMillingForceAccessor.html","topicUid":"Hi.MillingForces.IMillingForceAccessor","type":"Interface"},{"name":"MillingForce","href":"Hi.MillingForces.MillingForce.html","topicHref":"Hi.MillingForces.MillingForce.html","topicUid":"Hi.MillingForces.MillingForce","type":"Class"},{"name":"MillingForceLicense","href":"Hi.MillingForces.MillingForceLicense.html","topicHref":"Hi.MillingForces.MillingForceLicense.html","topicUid":"Hi.MillingForces.MillingForceLicense","type":"Class"},{"name":"MillingForceLuggage","href":"Hi.MillingForces.MillingForceLuggage.html","topicHref":"Hi.MillingForces.MillingForceLuggage.html","topicUid":"Hi.MillingForces.MillingForceLuggage","type":"Class"},{"name":"MillingForceUtil","href":"Hi.MillingForces.MillingForceUtil.html","topicHref":"Hi.MillingForces.MillingForceUtil.html","topicUid":"Hi.MillingForces.MillingForceUtil","type":"Class"},{"name":"MillingForceUtil.AnglePack","href":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicHref":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicUid":"Hi.MillingForces.MillingForceUtil.AnglePack","type":"Class"},{"name":"MillingPhysicsBrief","href":"Hi.MillingForces.MillingPhysicsBrief.html","topicHref":"Hi.MillingForces.MillingPhysicsBrief.html","topicUid":"Hi.MillingForces.MillingPhysicsBrief","type":"Class"},{"name":"PhysicsUtil","href":"Hi.MillingForces.PhysicsUtil.html","topicHref":"Hi.MillingForces.PhysicsUtil.html","topicUid":"Hi.MillingForces.PhysicsUtil","type":"Class"},{"name":"ToolObservationReference","href":"Hi.MillingForces.ToolObservationReference.html","topicHref":"Hi.MillingForces.ToolObservationReference.html","topicUid":"Hi.MillingForces.ToolObservationReference","type":"Enum"}]},{"name":"Hi.MillingForces.Fittings","href":"Hi.MillingForces.Fittings.html","topicHref":"Hi.MillingForces.Fittings.html","topicUid":"Hi.MillingForces.Fittings","type":"Namespace","items":[{"name":"CuttingParaUtil","href":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicHref":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicUid":"Hi.MillingForces.Fittings.CuttingParaUtil","type":"Class"},{"name":"ICuttingPara","href":"Hi.MillingForces.Fittings.ICuttingPara.html","topicHref":"Hi.MillingForces.Fittings.ICuttingPara.html","topicUid":"Hi.MillingForces.Fittings.ICuttingPara","type":"Interface"},{"name":"IGetCuttingPara","href":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicHref":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicUid":"Hi.MillingForces.Fittings.IGetCuttingPara","type":"Interface"},{"name":"SampleCategory","href":"Hi.MillingForces.Fittings.SampleCategory.html","topicHref":"Hi.MillingForces.Fittings.SampleCategory.html","topicUid":"Hi.MillingForces.Fittings.SampleCategory","type":"Class"},{"name":"SampleFlag","href":"Hi.MillingForces.Fittings.SampleFlag.html","topicHref":"Hi.MillingForces.Fittings.SampleFlag.html","topicUid":"Hi.MillingForces.Fittings.SampleFlag","type":"Enum"},{"name":"SampleFlagUtil","href":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicHref":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicUid":"Hi.MillingForces.Fittings.SampleFlagUtil","type":"Class"},{"name":"SampleInstance","href":"Hi.MillingForces.Fittings.SampleInstance.html","topicHref":"Hi.MillingForces.Fittings.SampleInstance.html","topicUid":"Hi.MillingForces.Fittings.SampleInstance","type":"Class"},{"name":"TimeForce","href":"Hi.MillingForces.Fittings.TimeForce.html","topicHref":"Hi.MillingForces.Fittings.TimeForce.html","topicUid":"Hi.MillingForces.Fittings.TimeForce","type":"Class"},{"name":"TimeForceFrequencyDomain","href":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicHref":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicUid":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain","type":"Class"},{"name":"TimeForceSeries","href":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeForceSeries","type":"Class"},{"name":"TimeForceUtil","href":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicHref":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicUid":"Hi.MillingForces.Fittings.TimeForceUtil","type":"Class"},{"name":"TimeVsForceSeries","href":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsForceSeries","type":"Class"},{"name":"TimeVsTorqueSeries","href":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsTorqueSeries","type":"Class"},{"name":"TrainingSample","href":"Hi.MillingForces.Fittings.TrainingSample.html","topicHref":"Hi.MillingForces.Fittings.TrainingSample.html","topicUid":"Hi.MillingForces.Fittings.TrainingSample","type":"Class"}]},{"name":"Hi.MillingForces.ProfileMillingParas","href":"Hi.MillingForces.ProfileMillingParas.html","topicHref":"Hi.MillingForces.ProfileMillingParas.html","topicUid":"Hi.MillingForces.ProfileMillingParas","type":"Namespace","items":[{"name":"IGetLocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara","type":"Interface"},{"name":"LocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara","type":"Class"},{"name":"ProfileMillingParaMap","href":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicHref":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicUid":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap","type":"Class"},{"name":"RtaMillingParaKey","href":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicHref":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicUid":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey","type":"Enum"}]},{"name":"Hi.MillingForces.RakeFaceCuttingParas","href":"Hi.MillingForces.RakeFaceCuttingParas.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas","type":"Namespace","items":[{"name":"IRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara","type":"Interface"},{"name":"MillingPhysicsUtil","href":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil","type":"Class"},{"name":"MultiFormRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara","type":"Class"},{"name":"RakeFaceCuttingPara2d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d","type":"Class"},{"name":"RakeFaceCuttingPara3d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d","type":"Class"},{"name":"RakeFaceCuttingParaMap","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap","type":"Class"}]},{"name":"Hi.MillingForces.Training","href":"Hi.MillingForces.Training.html","topicHref":"Hi.MillingForces.Training.html","topicUid":"Hi.MillingForces.Training","type":"Namespace","items":[{"name":"MillingTraining","href":"Hi.MillingForces.Training.MillingTraining.html","topicHref":"Hi.MillingForces.Training.MillingTraining.html","topicUid":"Hi.MillingForces.Training.MillingTraining","type":"Class"}]},{"name":"Hi.MillingProcs","href":"Hi.MillingProcs.html","topicHref":"Hi.MillingProcs.html","topicUid":"Hi.MillingProcs","type":"Namespace","items":[{"name":"MillingGuide","href":"Hi.MillingProcs.MillingGuide.html","topicHref":"Hi.MillingProcs.MillingGuide.html","topicUid":"Hi.MillingProcs.MillingGuide","type":"Class"}]},{"name":"Hi.MillingStepUtils","href":"Hi.MillingStepUtils.html","topicHref":"Hi.MillingStepUtils.html","topicUid":"Hi.MillingStepUtils","type":"Namespace","items":[{"name":"ClStripChartConfig","href":"Hi.MillingStepUtils.ClStripChartConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartConfig","type":"Class"},{"name":"ClStripChartItemConfig","href":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartItemConfig","type":"Class"},{"name":"ForceCycleFlag","href":"Hi.MillingStepUtils.ForceCycleFlag.html","topicHref":"Hi.MillingStepUtils.ForceCycleFlag.html","topicUid":"Hi.MillingStepUtils.ForceCycleFlag","type":"Enum"},{"name":"ForceCycleLineDivConfig","href":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.ForceCycleLineDivConfig","type":"Class"},{"name":"LineChartVRangeMode","href":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicHref":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicUid":"Hi.MillingStepUtils.LineChartVRangeMode","type":"Enum"},{"name":"SpindleMomentCycleLineDivConfig","href":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig","type":"Class"},{"name":"TimeChartYConfig","href":"Hi.MillingStepUtils.TimeChartYConfig.html","topicHref":"Hi.MillingStepUtils.TimeChartYConfig.html","topicUid":"Hi.MillingStepUtils.TimeChartYConfig","type":"Class"}]},{"name":"Hi.MillingSteps","href":"Hi.MillingSteps.html","topicHref":"Hi.MillingSteps.html","topicUid":"Hi.MillingSteps","type":"Namespace","items":[{"name":"MillingInstance","href":"Hi.MillingSteps.MillingInstance.html","topicHref":"Hi.MillingSteps.MillingInstance.html","topicUid":"Hi.MillingSteps.MillingInstance","type":"Class"},{"name":"MillingStepLuggage","href":"Hi.MillingSteps.MillingStepLuggage.html","topicHref":"Hi.MillingSteps.MillingStepLuggage.html","topicUid":"Hi.MillingSteps.MillingStepLuggage","type":"Class"}]},{"name":"Hi.Motion","href":"Hi.Motion.html","topicHref":"Hi.Motion.html","topicUid":"Hi.Motion","type":"Namespace","items":[{"name":"MotionUtil","href":"Hi.Motion.MotionUtil.html","topicHref":"Hi.Motion.MotionUtil.html","topicUid":"Hi.Motion.MotionUtil","type":"Class"}]},{"name":"Hi.Motion.MatValves","href":"Hi.Motion.MatValves.html","topicHref":"Hi.Motion.MatValves.html","topicUid":"Hi.Motion.MatValves","type":"Namespace","items":[{"name":"ClMachiningValve","href":"Hi.Motion.MatValves.ClMachiningValve.html","topicHref":"Hi.Motion.MatValves.ClMachiningValve.html","topicUid":"Hi.Motion.MatValves.ClMachiningValve","type":"Class"},{"name":"IMotionValve","href":"Hi.Motion.MatValves.IMotionValve.html","topicHref":"Hi.Motion.MatValves.IMotionValve.html","topicUid":"Hi.Motion.MatValves.IMotionValve","type":"Interface"},{"name":"MacroMotionValve","href":"Hi.Motion.MatValves.MacroMotionValve.html","topicHref":"Hi.Motion.MatValves.MacroMotionValve.html","topicUid":"Hi.Motion.MatValves.MacroMotionValve","type":"Class"},{"name":"StepMotionValve","href":"Hi.Motion.MatValves.StepMotionValve.html","topicHref":"Hi.Motion.MatValves.StepMotionValve.html","topicUid":"Hi.Motion.MatValves.StepMotionValve","type":"Class"}]},{"name":"Hi.Native","href":"Hi.Native.html","topicHref":"Hi.Native.html","topicUid":"Hi.Native","type":"Namespace","items":[{"name":"StopSource","href":"Hi.Native.StopSource.html","topicHref":"Hi.Native.StopSource.html","topicUid":"Hi.Native.StopSource","type":"Class"},{"name":"StopToken","href":"Hi.Native.StopToken.html","topicHref":"Hi.Native.StopToken.html","topicUid":"Hi.Native.StopToken","type":"Class"},{"name":"StopTokenKit","href":"Hi.Native.StopTokenKit.html","topicHref":"Hi.Native.StopTokenKit.html","topicUid":"Hi.Native.StopTokenKit","type":"Class"},{"name":"StopTokenUtil","href":"Hi.Native.StopTokenUtil.html","topicHref":"Hi.Native.StopTokenUtil.html","topicUid":"Hi.Native.StopTokenUtil","type":"Class"},{"name":"bind_t","href":"Hi.Native.bind_t.html","topicHref":"Hi.Native.bind_t.html","topicUid":"Hi.Native.bind_t","type":"Struct"},{"name":"box2d","href":"Hi.Native.box2d.html","topicHref":"Hi.Native.box2d.html","topicUid":"Hi.Native.box2d","type":"Struct"},{"name":"box3d","href":"Hi.Native.box3d.html","topicHref":"Hi.Native.box3d.html","topicUid":"Hi.Native.box3d","type":"Struct"},{"name":"expand_to_box3d_func_t","href":"Hi.Native.expand_to_box3d_func_t.html","topicHref":"Hi.Native.expand_to_box3d_func_t.html","topicUid":"Hi.Native.expand_to_box3d_func_t","type":"Delegate"},{"name":"key_event_t","href":"Hi.Native.key_event_t.html","topicHref":"Hi.Native.key_event_t.html","topicUid":"Hi.Native.key_event_t","type":"Struct"},{"name":"key_table__transform_view_by_key_pressing_t","href":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicHref":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicUid":"Hi.Native.key_table__transform_view_by_key_pressing_t","type":"Struct"},{"name":"mat4d","href":"Hi.Native.mat4d.html","topicHref":"Hi.Native.mat4d.html","topicUid":"Hi.Native.mat4d","type":"Struct"},{"name":"mat_stack_t","href":"Hi.Native.mat_stack_t.html","topicHref":"Hi.Native.mat_stack_t.html","topicUid":"Hi.Native.mat_stack_t","type":"Struct"},{"name":"mouse_button_event_t","href":"Hi.Native.mouse_button_event_t.html","topicHref":"Hi.Native.mouse_button_event_t.html","topicUid":"Hi.Native.mouse_button_event_t","type":"Struct"},{"name":"mouse_button_table__transform_view_by_mouse_drag_t","href":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicHref":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicUid":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t","type":"Struct"},{"name":"mouse_move_event_t","href":"Hi.Native.mouse_move_event_t.html","topicHref":"Hi.Native.mouse_move_event_t.html","topicUid":"Hi.Native.mouse_move_event_t","type":"Struct"},{"name":"mouse_wheel_event_t","href":"Hi.Native.mouse_wheel_event_t.html","topicHref":"Hi.Native.mouse_wheel_event_t.html","topicUid":"Hi.Native.mouse_wheel_event_t","type":"Struct"},{"name":"panel_state_t","href":"Hi.Native.panel_state_t.html","topicHref":"Hi.Native.panel_state_t.html","topicUid":"Hi.Native.panel_state_t","type":"Struct"},{"name":"picking_event_t","href":"Hi.Native.picking_event_t.html","topicHref":"Hi.Native.picking_event_t.html","topicUid":"Hi.Native.picking_event_t","type":"Struct"},{"name":"picking_mark_t","href":"Hi.Native.picking_mark_t.html","topicHref":"Hi.Native.picking_mark_t.html","topicUid":"Hi.Native.picking_mark_t","type":"Struct"},{"name":"tri3d","href":"Hi.Native.tri3d.html","topicHref":"Hi.Native.tri3d.html","topicUid":"Hi.Native.tri3d","type":"Struct"},{"name":"ui_event_type","href":"Hi.Native.ui_event_type.html","topicHref":"Hi.Native.ui_event_type.html","topicUid":"Hi.Native.ui_event_type","type":"Enum"},{"name":"vec2d","href":"Hi.Native.vec2d.html","topicHref":"Hi.Native.vec2d.html","topicUid":"Hi.Native.vec2d","type":"Struct"},{"name":"vec3d","href":"Hi.Native.vec3d.html","topicHref":"Hi.Native.vec3d.html","topicUid":"Hi.Native.vec3d","type":"Struct"},{"name":"vec3f","href":"Hi.Native.vec3f.html","topicHref":"Hi.Native.vec3f.html","topicUid":"Hi.Native.vec3f","type":"Struct"}]},{"name":"Hi.NcMech","href":"Hi.NcMech.html","topicHref":"Hi.NcMech.html","topicUid":"Hi.NcMech","type":"Namespace","items":[{"name":"ICollisionIndexPairsSource","href":"Hi.NcMech.ICollisionIndexPairsSource.html","topicHref":"Hi.NcMech.ICollisionIndexPairsSource.html","topicUid":"Hi.NcMech.ICollisionIndexPairsSource","type":"Interface"}]},{"name":"Hi.NcMech.Fixtures","href":"Hi.NcMech.Fixtures.html","topicHref":"Hi.NcMech.Fixtures.html","topicUid":"Hi.NcMech.Fixtures","type":"Namespace","items":[{"name":"Fixture","href":"Hi.NcMech.Fixtures.Fixture.html","topicHref":"Hi.NcMech.Fixtures.Fixture.html","topicUid":"Hi.NcMech.Fixtures.Fixture","type":"Class"},{"name":"FixtureEditorDisplayee","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayee","type":"Class"},{"name":"FixtureEditorDisplayeeConfig","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig","type":"Class"}]},{"name":"Hi.NcMech.Holders","href":"Hi.NcMech.Holders.html","topicHref":"Hi.NcMech.Holders.html","topicUid":"Hi.NcMech.Holders","type":"Namespace","items":[{"name":"CylindroidHolder","href":"Hi.NcMech.Holders.CylindroidHolder.html","topicHref":"Hi.NcMech.Holders.CylindroidHolder.html","topicUid":"Hi.NcMech.Holders.CylindroidHolder","type":"Class"},{"name":"FreeformHolder","href":"Hi.NcMech.Holders.FreeformHolder.html","topicHref":"Hi.NcMech.Holders.FreeformHolder.html","topicUid":"Hi.NcMech.Holders.FreeformHolder","type":"Class"},{"name":"HolderEditorDisplayee","href":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicHref":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicUid":"Hi.NcMech.Holders.HolderEditorDisplayee","type":"Class"},{"name":"IHolder","href":"Hi.NcMech.Holders.IHolder.html","topicHref":"Hi.NcMech.Holders.IHolder.html","topicUid":"Hi.NcMech.Holders.IHolder","type":"Interface"}]},{"name":"Hi.NcMech.Solids","href":"Hi.NcMech.Solids.html","topicHref":"Hi.NcMech.Solids.html","topicUid":"Hi.NcMech.Solids","type":"Namespace","items":[{"name":"IGetSolid","href":"Hi.NcMech.Solids.IGetSolid.html","topicHref":"Hi.NcMech.Solids.IGetSolid.html","topicUid":"Hi.NcMech.Solids.IGetSolid","type":"Interface"},{"name":"Solid","href":"Hi.NcMech.Solids.Solid.html","topicHref":"Hi.NcMech.Solids.Solid.html","topicUid":"Hi.NcMech.Solids.Solid","type":"Class"},{"name":"Solid.RenderingModeEnum","href":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicHref":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicUid":"Hi.NcMech.Solids.Solid.RenderingModeEnum","type":"Enum"},{"name":"SolidFuncSource","href":"Hi.NcMech.Solids.SolidFuncSource.html","topicHref":"Hi.NcMech.Solids.SolidFuncSource.html","topicUid":"Hi.NcMech.Solids.SolidFuncSource","type":"Class"}]},{"name":"Hi.NcMech.Topo","href":"Hi.NcMech.Topo.html","topicHref":"Hi.NcMech.Topo.html","topicUid":"Hi.NcMech.Topo","type":"Namespace","items":[{"name":"INcStroke","href":"Hi.NcMech.Topo.INcStroke.html","topicHref":"Hi.NcMech.Topo.INcStroke.html","topicUid":"Hi.NcMech.Topo.INcStroke","type":"Interface"},{"name":"INcTransformer","href":"Hi.NcMech.Topo.INcTransformer.html","topicHref":"Hi.NcMech.Topo.INcTransformer.html","topicUid":"Hi.NcMech.Topo.INcTransformer","type":"Interface"},{"name":"ITopoBrick","href":"Hi.NcMech.Topo.ITopoBrick.html","topicHref":"Hi.NcMech.Topo.ITopoBrick.html","topicUid":"Hi.NcMech.Topo.ITopoBrick","type":"Interface"},{"name":"NcRotation","href":"Hi.NcMech.Topo.NcRotation.html","topicHref":"Hi.NcMech.Topo.NcRotation.html","topicUid":"Hi.NcMech.Topo.NcRotation","type":"Class"},{"name":"NcTranslation","href":"Hi.NcMech.Topo.NcTranslation.html","topicHref":"Hi.NcMech.Topo.NcTranslation.html","topicUid":"Hi.NcMech.Topo.NcTranslation","type":"Class"},{"name":"SolidSourceTopoBrick","href":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.SolidSourceTopoBrick","type":"Class"},{"name":"StlSourceTopoBrick","href":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.StlSourceTopoBrick","type":"Class"}]},{"name":"Hi.NcMech.Workpieces","href":"Hi.NcMech.Workpieces.html","topicHref":"Hi.NcMech.Workpieces.html","topicUid":"Hi.NcMech.Workpieces","type":"Namespace","items":[{"name":"Workpiece","href":"Hi.NcMech.Workpieces.Workpiece.html","topicHref":"Hi.NcMech.Workpieces.Workpiece.html","topicUid":"Hi.NcMech.Workpieces.Workpiece","type":"Class"},{"name":"WorkpieceEditorDisplayee","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee","type":"Class"},{"name":"WorkpieceEditorDisplayeeConfig","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig","type":"Class"},{"name":"WorkpieceService","href":"Hi.NcMech.Workpieces.WorkpieceService.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceService.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceService","type":"Class"}]},{"name":"Hi.NcMech.Xyzabc","href":"Hi.NcMech.Xyzabc.html","topicHref":"Hi.NcMech.Xyzabc.html","topicUid":"Hi.NcMech.Xyzabc","type":"Namespace","items":[{"name":"CodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool","type":"Class"},{"name":"CodeXyzabcMachineToolUri","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri","type":"Class"},{"name":"GeneralXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool","type":"Class"},{"name":"IGetCodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool","type":"Interface"},{"name":"IXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IXyzabcMachineTool","type":"Interface"}]},{"name":"Hi.NcOpt","href":"Hi.NcOpt.html","topicHref":"Hi.NcOpt.html","topicUid":"Hi.NcOpt","type":"Namespace","items":[{"name":"CuttingVelocityOptLimit","href":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.CuttingVelocityOptLimit","type":"Class"},{"name":"FixedFeedPerCycleOptLimit","href":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerCycleOptLimit","type":"Class"},{"name":"FixedFeedPerToothOptLimit","href":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerToothOptLimit","type":"Class"},{"name":"ICutterOptLimitHost","href":"Hi.NcOpt.ICutterOptLimitHost.html","topicHref":"Hi.NcOpt.ICutterOptLimitHost.html","topicUid":"Hi.NcOpt.ICutterOptLimitHost","type":"Interface"},{"name":"ICutterOptOption","href":"Hi.NcOpt.ICutterOptOption.html","topicHref":"Hi.NcOpt.ICutterOptOption.html","topicUid":"Hi.NcOpt.ICutterOptOption","type":"Interface"},{"name":"ICuttingVelocityOptLimit","href":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.ICuttingVelocityOptLimit","type":"Interface"},{"name":"IFeedPerToothOptLimit","href":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.IFeedPerToothOptLimit","type":"Interface"},{"name":"MillingCutterOptOption","href":"Hi.NcOpt.MillingCutterOptOption.html","topicHref":"Hi.NcOpt.MillingCutterOptOption.html","topicUid":"Hi.NcOpt.MillingCutterOptOption","type":"Class"},{"name":"NcOptOption","href":"Hi.NcOpt.NcOptOption.html","topicHref":"Hi.NcOpt.NcOptOption.html","topicUid":"Hi.NcOpt.NcOptOption","type":"Class"},{"name":"NcOptProc","href":"Hi.NcOpt.NcOptProc.html","topicHref":"Hi.NcOpt.NcOptProc.html","topicUid":"Hi.NcOpt.NcOptProc","type":"Class"},{"name":"NcOptimizationEmbeddedLogMode","href":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicHref":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicUid":"Hi.NcOpt.NcOptimizationEmbeddedLogMode","type":"Enum"},{"name":"ShapeBasedCutterOptLimit","href":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicHref":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicUid":"Hi.NcOpt.ShapeBasedCutterOptLimit","type":"Class"}]},{"name":"Hi.NcParsers","href":"Hi.NcParsers.html","topicHref":"Hi.NcParsers.html","topicUid":"Hi.NcParsers","type":"Namespace","items":[{"name":"IGetSentence","href":"Hi.NcParsers.IGetSentence.html","topicHref":"Hi.NcParsers.IGetSentence.html","topicUid":"Hi.NcParsers.IGetSentence","type":"Interface"},{"name":"NcDiagnostic","href":"Hi.NcParsers.NcDiagnostic.html","topicHref":"Hi.NcParsers.NcDiagnostic.html","topicUid":"Hi.NcParsers.NcDiagnostic","type":"Class"},{"name":"NcDiagnosticCategory","href":"Hi.NcParsers.NcDiagnosticCategory.html","topicHref":"Hi.NcParsers.NcDiagnosticCategory.html","topicUid":"Hi.NcParsers.NcDiagnosticCategory","type":"Enum"},{"name":"NcDiagnosticProgress","href":"Hi.NcParsers.NcDiagnosticProgress.html","topicHref":"Hi.NcParsers.NcDiagnosticProgress.html","topicUid":"Hi.NcParsers.NcDiagnosticProgress","type":"Class"},{"name":"NcDiagnosticSeverity","href":"Hi.NcParsers.NcDiagnosticSeverity.html","topicHref":"Hi.NcParsers.NcDiagnosticSeverity.html","topicUid":"Hi.NcParsers.NcDiagnosticSeverity","type":"Enum"},{"name":"Sentence","href":"Hi.NcParsers.Sentence.html","topicHref":"Hi.NcParsers.Sentence.html","topicUid":"Hi.NcParsers.Sentence","type":"Class"},{"name":"SoftNcRunner","href":"Hi.NcParsers.SoftNcRunner.html","topicHref":"Hi.NcParsers.SoftNcRunner.html","topicUid":"Hi.NcParsers.SoftNcRunner","type":"Class"},{"name":"SoftNcUtil","href":"Hi.NcParsers.SoftNcUtil.html","topicHref":"Hi.NcParsers.SoftNcUtil.html","topicUid":"Hi.NcParsers.SoftNcUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys","href":"Hi.NcParsers.Dependencys.html","topicHref":"Hi.NcParsers.Dependencys.html","topicUid":"Hi.NcParsers.Dependencys","type":"Namespace","items":[{"name":"AxisType","href":"Hi.NcParsers.Dependencys.AxisType.html","topicHref":"Hi.NcParsers.Dependencys.AxisType.html","topicUid":"Hi.NcParsers.Dependencys.AxisType","type":"Enum"},{"name":"CncBrandDependency","href":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicHref":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicUid":"Hi.NcParsers.Dependencys.CncBrandDependency","type":"Class"},{"name":"ControllerParameterTableBase","href":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicHref":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicUid":"Hi.NcParsers.Dependencys.ControllerParameterTableBase","type":"Class"},{"name":"HeidenhainDatumTable","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTable","type":"Class"},{"name":"IBlockSkipConfig","href":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.IBlockSkipConfig","type":"Interface"},{"name":"ICannedCycleConfig","href":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicHref":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicUid":"Hi.NcParsers.Dependencys.ICannedCycleConfig","type":"Interface"},{"name":"IHomeMcConfig","href":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IHomeMcConfig","type":"Interface"},{"name":"IIsoCoordinateConfig","href":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig","type":"Interface"},{"name":"IMachineAxisConfig","href":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMachineAxisConfig","type":"Interface"},{"name":"INcDependency","href":"Hi.NcParsers.Dependencys.INcDependency.html","topicHref":"Hi.NcParsers.Dependencys.INcDependency.html","topicUid":"Hi.NcParsers.Dependencys.INcDependency","type":"Interface"},{"name":"IPowerResettable","href":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicHref":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicUid":"Hi.NcParsers.Dependencys.IPowerResettable","type":"Interface"},{"name":"IRapidFeedrateConfig","href":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig","type":"Interface"},{"name":"IStrokeLimitConfig","href":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicHref":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicUid":"Hi.NcParsers.Dependencys.IStrokeLimitConfig","type":"Interface"},{"name":"IToolOffsetConfig","href":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolOffsetConfig","type":"Interface"},{"name":"IToolingMcConfig","href":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolingMcConfig","type":"Interface"},{"name":"IsoCoordinateAddressMap","href":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicHref":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicUid":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Fanuc","href":"Hi.NcParsers.Dependencys.Fanuc.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc","type":"Namespace","items":[{"name":"CutterCompensationType","href":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType","type":"Enum"},{"name":"FanucParameterTable","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable","type":"Class"},{"name":"FanucPositionVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup","type":"Class"},{"name":"FanucToolOffsetVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup","type":"Class"},{"name":"RetainedCommonVariableTable","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Generic","href":"Hi.NcParsers.Dependencys.Generic.html","topicHref":"Hi.NcParsers.Dependencys.Generic.html","topicUid":"Hi.NcParsers.Dependencys.Generic","type":"Namespace","items":[{"name":"FallbackConfig","href":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.FallbackConfig","type":"Class"},{"name":"GenericBlockSkipConfig","href":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig","type":"Class"},{"name":"IsoCoordinateTable","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable","type":"Class"},{"name":"NcKinematicsDependency","href":"Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html","topicHref":"Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html","topicUid":"Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency","type":"Class"},{"name":"ToolOffsetRow","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow","type":"Class"},{"name":"ToolOffsetTable","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable","type":"Class"},{"name":"ToolingMcConfig","href":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Heidenhain","href":"Hi.NcParsers.Dependencys.Heidenhain.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Siemens","href":"Hi.NcParsers.Dependencys.Siemens.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.html","topicUid":"Hi.NcParsers.Dependencys.Siemens","type":"Namespace","items":[{"name":"ISiemensToolOffsetConfig","href":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig","type":"Interface"},{"name":"SiemensFrameTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable","type":"Class"},{"name":"SiemensMachineDataTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Syntec","href":"Hi.NcParsers.Dependencys.Syntec.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.html","topicUid":"Hi.NcParsers.Dependencys.Syntec","type":"Namespace","items":[{"name":"SyntecParameterTable","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Initializers","href":"Hi.NcParsers.Initializers.html","topicHref":"Hi.NcParsers.Initializers.html","topicUid":"Hi.NcParsers.Initializers","type":"Namespace","items":[{"name":"HomeMcInitializer","href":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicHref":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicUid":"Hi.NcParsers.Initializers.HomeMcInitializer","type":"Class"},{"name":"INcInitializer","href":"Hi.NcParsers.Initializers.INcInitializer.html","topicHref":"Hi.NcParsers.Initializers.INcInitializer.html","topicUid":"Hi.NcParsers.Initializers.INcInitializer","type":"Interface"},{"name":"StaticInitializer","href":"Hi.NcParsers.Initializers.StaticInitializer.html","topicHref":"Hi.NcParsers.Initializers.StaticInitializer.html","topicUid":"Hi.NcParsers.Initializers.StaticInitializer","type":"Class"}]},{"name":"Hi.NcParsers.InspectionSyntaxs","href":"Hi.NcParsers.InspectionSyntaxs.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.html","topicUid":"Hi.NcParsers.InspectionSyntaxs","type":"Namespace","items":[{"name":"CleanupSyntax","href":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax","type":"Class"},{"name":"ProgramXyzBackfillSyntax","href":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax","type":"Class"},{"name":"SnapshotSyntax","href":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax","type":"Class"},{"name":"UnconsumedCheckSyntax","href":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Keywords","href":"Hi.NcParsers.Keywords.html","topicHref":"Hi.NcParsers.Keywords.html","topicUid":"Hi.NcParsers.Keywords","type":"Namespace","items":[{"name":"BlockSkip","href":"Hi.NcParsers.Keywords.BlockSkip.html","topicHref":"Hi.NcParsers.Keywords.BlockSkip.html","topicUid":"Hi.NcParsers.Keywords.BlockSkip","type":"Class"},{"name":"CannedCycle","href":"Hi.NcParsers.Keywords.CannedCycle.html","topicHref":"Hi.NcParsers.Keywords.CannedCycle.html","topicUid":"Hi.NcParsers.Keywords.CannedCycle","type":"Class"},{"name":"Comment","href":"Hi.NcParsers.Keywords.Comment.html","topicHref":"Hi.NcParsers.Keywords.Comment.html","topicUid":"Hi.NcParsers.Keywords.Comment","type":"Class"},{"name":"CompoundMotion","href":"Hi.NcParsers.Keywords.CompoundMotion.html","topicHref":"Hi.NcParsers.Keywords.CompoundMotion.html","topicUid":"Hi.NcParsers.Keywords.CompoundMotion","type":"Class"},{"name":"Coolant","href":"Hi.NcParsers.Keywords.Coolant.html","topicHref":"Hi.NcParsers.Keywords.Coolant.html","topicUid":"Hi.NcParsers.Keywords.Coolant","type":"Class"},{"name":"CoordinateOffset","href":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.CoordinateOffset","type":"Class"},{"name":"CsScript","href":"Hi.NcParsers.Keywords.CsScript.html","topicHref":"Hi.NcParsers.Keywords.CsScript.html","topicUid":"Hi.NcParsers.Keywords.CsScript","type":"Class"},{"name":"Dwell","href":"Hi.NcParsers.Keywords.Dwell.html","topicHref":"Hi.NcParsers.Keywords.Dwell.html","topicUid":"Hi.NcParsers.Keywords.Dwell","type":"Class"},{"name":"Feedrate","href":"Hi.NcParsers.Keywords.Feedrate.html","topicHref":"Hi.NcParsers.Keywords.Feedrate.html","topicUid":"Hi.NcParsers.Keywords.Feedrate","type":"Class"},{"name":"IArcMotionDef","href":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicHref":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicUid":"Hi.NcParsers.Keywords.IArcMotionDef","type":"Interface"},{"name":"ICannedCycleDef","href":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicHref":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicUid":"Hi.NcParsers.Keywords.ICannedCycleDef","type":"Interface"},{"name":"ICompoundMotionDef","href":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicHref":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicUid":"Hi.NcParsers.Keywords.ICompoundMotionDef","type":"Interface"},{"name":"ICoolantDef","href":"Hi.NcParsers.Keywords.ICoolantDef.html","topicHref":"Hi.NcParsers.Keywords.ICoolantDef.html","topicUid":"Hi.NcParsers.Keywords.ICoolantDef","type":"Interface"},{"name":"IDwellDef","href":"Hi.NcParsers.Keywords.IDwellDef.html","topicHref":"Hi.NcParsers.Keywords.IDwellDef.html","topicUid":"Hi.NcParsers.Keywords.IDwellDef","type":"Interface"},{"name":"IFeedrateDef","href":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicHref":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicUid":"Hi.NcParsers.Keywords.IFeedrateDef","type":"Interface"},{"name":"IFlagsDef","href":"Hi.NcParsers.Keywords.IFlagsDef.html","topicHref":"Hi.NcParsers.Keywords.IFlagsDef.html","topicUid":"Hi.NcParsers.Keywords.IFlagsDef","type":"Interface"},{"name":"IMachineCoordinateStateDef","href":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef","type":"Interface"},{"name":"IMotionEventDef","href":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionEventDef","type":"Interface"},{"name":"IMotionStateDef","href":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionStateDef","type":"Interface"},{"name":"IParsingDef","href":"Hi.NcParsers.Keywords.IParsingDef.html","topicHref":"Hi.NcParsers.Keywords.IParsingDef.html","topicUid":"Hi.NcParsers.Keywords.IParsingDef","type":"Interface"},{"name":"IPathSmoothingDef","href":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IPathSmoothingDef","type":"Interface"},{"name":"IPlaneSelectDef","href":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicHref":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicUid":"Hi.NcParsers.Keywords.IPlaneSelectDef","type":"Interface"},{"name":"IPositioningDef","href":"Hi.NcParsers.Keywords.IPositioningDef.html","topicHref":"Hi.NcParsers.Keywords.IPositioningDef.html","topicUid":"Hi.NcParsers.Keywords.IPositioningDef","type":"Interface"},{"name":"IProgramEndDef","href":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramEndDef","type":"Interface"},{"name":"IProgramStopDef","href":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramStopDef","type":"Interface"},{"name":"IProgramXyzDef","href":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramXyzDef","type":"Interface"},{"name":"IRadiusCompensationDef","href":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IRadiusCompensationDef","type":"Interface"},{"name":"ISpindleControlDef","href":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleControlDef","type":"Interface"},{"name":"ISpindleOrientationDef","href":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleOrientationDef","type":"Interface"},{"name":"ISpindleSpeedDef","href":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleSpeedDef","type":"Interface"},{"name":"ITiltTransformDef","href":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicHref":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicUid":"Hi.NcParsers.Keywords.ITiltTransformDef","type":"Interface"},{"name":"IToolHeightCompensationDef","href":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IToolHeightCompensationDef","type":"Interface"},{"name":"ITransformationDef","href":"Hi.NcParsers.Keywords.ITransformationDef.html","topicHref":"Hi.NcParsers.Keywords.ITransformationDef.html","topicUid":"Hi.NcParsers.Keywords.ITransformationDef","type":"Interface"},{"name":"IUnitDef","href":"Hi.NcParsers.Keywords.IUnitDef.html","topicHref":"Hi.NcParsers.Keywords.IUnitDef.html","topicUid":"Hi.NcParsers.Keywords.IUnitDef","type":"Interface"},{"name":"IUnparsedTextDef","href":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicHref":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicUid":"Hi.NcParsers.Keywords.IUnparsedTextDef","type":"Interface"},{"name":"IndexNote","href":"Hi.NcParsers.Keywords.IndexNote.html","topicHref":"Hi.NcParsers.Keywords.IndexNote.html","topicUid":"Hi.NcParsers.Keywords.IndexNote","type":"Class"},{"name":"IsoLocalCoordinateOffset","href":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset","type":"Class"},{"name":"MachineCoordinateState","href":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicHref":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicUid":"Hi.NcParsers.Keywords.MachineCoordinateState","type":"Class"},{"name":"MotionEvent","href":"Hi.NcParsers.Keywords.MotionEvent.html","topicHref":"Hi.NcParsers.Keywords.MotionEvent.html","topicUid":"Hi.NcParsers.Keywords.MotionEvent","type":"Class"},{"name":"MotionState","href":"Hi.NcParsers.Keywords.MotionState.html","topicHref":"Hi.NcParsers.Keywords.MotionState.html","topicUid":"Hi.NcParsers.Keywords.MotionState","type":"Class"},{"name":"PathSmoothing","href":"Hi.NcParsers.Keywords.PathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.PathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.PathSmoothing","type":"Class"},{"name":"PlaneSelect","href":"Hi.NcParsers.Keywords.PlaneSelect.html","topicHref":"Hi.NcParsers.Keywords.PlaneSelect.html","topicUid":"Hi.NcParsers.Keywords.PlaneSelect","type":"Class"},{"name":"Positioning","href":"Hi.NcParsers.Keywords.Positioning.html","topicHref":"Hi.NcParsers.Keywords.Positioning.html","topicUid":"Hi.NcParsers.Keywords.Positioning","type":"Class"},{"name":"ProgramBoundary","href":"Hi.NcParsers.Keywords.ProgramBoundary.html","topicHref":"Hi.NcParsers.Keywords.ProgramBoundary.html","topicUid":"Hi.NcParsers.Keywords.ProgramBoundary","type":"Class"},{"name":"ProgramEnd","href":"Hi.NcParsers.Keywords.ProgramEnd.html","topicHref":"Hi.NcParsers.Keywords.ProgramEnd.html","topicUid":"Hi.NcParsers.Keywords.ProgramEnd","type":"Class"},{"name":"ProgramStop","href":"Hi.NcParsers.Keywords.ProgramStop.html","topicHref":"Hi.NcParsers.Keywords.ProgramStop.html","topicUid":"Hi.NcParsers.Keywords.ProgramStop","type":"Class"},{"name":"RadiusCompensation","href":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicHref":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicUid":"Hi.NcParsers.Keywords.RadiusCompensation","type":"Class"},{"name":"SpindleControl","href":"Hi.NcParsers.Keywords.SpindleControl.html","topicHref":"Hi.NcParsers.Keywords.SpindleControl.html","topicUid":"Hi.NcParsers.Keywords.SpindleControl","type":"Class"},{"name":"SpindleOrientation","href":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicHref":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicUid":"Hi.NcParsers.Keywords.SpindleOrientation","type":"Class"},{"name":"SpindleSpeed","href":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicHref":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicUid":"Hi.NcParsers.Keywords.SpindleSpeed","type":"Class"},{"name":"TiltTransform","href":"Hi.NcParsers.Keywords.TiltTransform.html","topicHref":"Hi.NcParsers.Keywords.TiltTransform.html","topicUid":"Hi.NcParsers.Keywords.TiltTransform","type":"Class"},{"name":"ToolHeightCompensation","href":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicHref":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicUid":"Hi.NcParsers.Keywords.ToolHeightCompensation","type":"Class"},{"name":"Unit","href":"Hi.NcParsers.Keywords.Unit.html","topicHref":"Hi.NcParsers.Keywords.Unit.html","topicUid":"Hi.NcParsers.Keywords.Unit","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Fanuc","href":"Hi.NcParsers.Keywords.Fanuc.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.html","topicUid":"Hi.NcParsers.Keywords.Fanuc","type":"Namespace","items":[{"name":"FanucKeywords","href":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicUid":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Generic","href":"Hi.NcParsers.Keywords.Generic.html","topicHref":"Hi.NcParsers.Keywords.Generic.html","topicUid":"Hi.NcParsers.Keywords.Generic","type":"Namespace","items":[{"name":"IsoKeywords","href":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicHref":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicUid":"Hi.NcParsers.Keywords.Generic.IsoKeywords","type":"Class"},{"name":"MotionForm","href":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicHref":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicUid":"Hi.NcParsers.Keywords.Generic.MotionForm","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Heidenhain","href":"Hi.NcParsers.Keywords.Heidenhain.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain","type":"Namespace","items":[{"name":"ICyclDef","href":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef","type":"Interface"}]},{"name":"Hi.NcParsers.Keywords.Siemens","href":"Hi.NcParsers.Keywords.Siemens.html","topicHref":"Hi.NcParsers.Keywords.Siemens.html","topicUid":"Hi.NcParsers.Keywords.Siemens","type":"Namespace","items":[{"name":"SiemensKeywords","href":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs","href":"Hi.NcParsers.LogicSyntaxs.html","topicHref":"Hi.NcParsers.LogicSyntaxs.html","topicUid":"Hi.NcParsers.LogicSyntaxs","type":"Namespace","items":[{"name":"BackBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax","type":"Class"},{"name":"BoringCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax","type":"Class"},{"name":"CannedCycleResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax","type":"Class"},{"name":"CircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax","type":"Class"},{"name":"CoolantSyntax","href":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax","type":"Class"},{"name":"CoordinateOffsetUtil","href":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil","type":"Class"},{"name":"DrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax","type":"Class"},{"name":"FeedrateSyntax","href":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax","type":"Class"},{"name":"FineBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax","type":"Class"},{"name":"G43p4RtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax","type":"Class"},{"name":"G53p1RotaryPositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax","type":"Class"},{"name":"HighSpeedPeckCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax","type":"Class"},{"name":"IncrementalResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax","type":"Class"},{"name":"IsoCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax","type":"Class"},{"name":"IsoG68RotationSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax","type":"Class"},{"name":"IsoG68p2TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax","type":"Class"},{"name":"IsoLocalCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax","type":"Class"},{"name":"LinearMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax","type":"Class"},{"name":"MachineCoordSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax","type":"Class"},{"name":"McAbcCyclicPathSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax","type":"Class"},{"name":"McAbcSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax","type":"Class"},{"name":"McAbcXyzFallbackSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax","type":"Class"},{"name":"McXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax","type":"Class"},{"name":"PathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax","type":"Class"},{"name":"PeckDrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax","type":"Class"},{"name":"PivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax","type":"Class"},{"name":"PlaneSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax","type":"Class"},{"name":"PositioningSyntax","href":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax","type":"Class"},{"name":"ProgramEndCleanSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax","type":"Class"},{"name":"ProgramEndSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax","type":"Class"},{"name":"ProgramStopSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax","type":"Class"},{"name":"ProgramXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax","type":"Class"},{"name":"ProgramXyzUtil","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil","type":"Class"},{"name":"ReferenceReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax","type":"Class"},{"name":"RetainedCommonVariableReadingSyntax","href":"Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax","type":"Class"},{"name":"RotaryAxisUtil","href":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil","type":"Class"},{"name":"SpindleSpeedSyntax","href":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax","type":"Class"},{"name":"TappingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax","type":"Class"},{"name":"TiltTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil","type":"Class"},{"name":"ToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax","type":"Class"},{"name":"ToolHeightOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax","type":"Class"},{"name":"UnitModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax","type":"Class"},{"name":"VariableEvaluatorSyntax","href":"Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax","type":"Class"},{"name":"VolatileVariableReadingSyntax","href":"Hi.NcParsers.LogicSyntaxs.VolatileVariableReadingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.VolatileVariableReadingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.VolatileVariableReadingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Evaluation","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation","type":"Namespace","items":[{"name":"EvalResult","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult","type":"Struct"},{"name":"IRuntimeVariableLookup","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.IRuntimeVariableLookup","type":"Interface"},{"name":"IVariableLookup","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.IVariableLookup.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.IVariableLookup.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.IVariableLookup","type":"Interface"},{"name":"NcBinaryExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryExpr","type":"Class"},{"name":"NcBinaryOp","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryOp.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryOp.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryOp","type":"Enum"},{"name":"NcExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpr","type":"Class"},{"name":"NcExpressionEvaluator","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionEvaluator.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionEvaluator.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionEvaluator","type":"Class"},{"name":"NcExpressionParser","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionParser.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionParser.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionParser","type":"Class"},{"name":"NcFunctionExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcFunctionExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcFunctionExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcFunctionExpr","type":"Class"},{"name":"NcIndirectVariableExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcIndirectVariableExpr","type":"Class"},{"name":"NcLiteralExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcLiteralExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcLiteralExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcLiteralExpr","type":"Class"},{"name":"NcUnaryExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryExpr","type":"Class"},{"name":"NcUnaryOp","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryOp.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryOp.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryOp","type":"Enum"},{"name":"NcVariableExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcVariableExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcVariableExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcVariableExpr","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Heidenhain","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Siemens","href":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs","type":"Namespace","items":[{"name":"BlockSkipSyntax","href":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax","type":"Class"},{"name":"CsScriptSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax","type":"Class"},{"name":"FlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax","type":"Class"},{"name":"FloatTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax","type":"Class"},{"name":"HeadIndexSyntax","href":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax","type":"Class"},{"name":"IntegerTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax","type":"Class"},{"name":"NamedVarAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax","type":"Class"},{"name":"NumberedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax","type":"Class"},{"name":"ParameterizedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax","type":"Class"},{"name":"ProgramBoundarySyntax","href":"Hi.NcParsers.ParsingSyntaxs.ProgramBoundarySyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ProgramBoundarySyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ProgramBoundarySyntax","type":"Class"},{"name":"ShrinkIfNoDecimalPointSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax","type":"Class"},{"name":"TagAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax","type":"Class"},{"name":"TagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","type":"Namespace","items":[{"name":"QuoteCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax","type":"Class"},{"name":"TailCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainBlkFormSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax","type":"Class"},{"name":"HeidenhainCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax","type":"Class"},{"name":"HeidenhainCyclDefSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax","type":"Class"},{"name":"HeidenhainFnAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax","type":"Class"},{"name":"HeidenhainLSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax","type":"Class"},{"name":"HeidenhainLblSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax","type":"Class"},{"name":"HeidenhainPlaneSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax","type":"Class"},{"name":"HeidenhainProgramSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax","type":"Class"},{"name":"HeidenhainToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","type":"Namespace","items":[{"name":"HeidenhainDatumSettingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax","type":"Class"},{"name":"HeidenhainDatumShiftSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax","type":"Class"}]},{"name":"Hi.NcParsers.PostLogicSyntaxs","href":"Hi.NcParsers.PostLogicSyntaxs.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs","type":"Namespace","items":[{"name":"ModalCarrySyntax","href":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax","type":"Class"},{"name":"RadiusCompensationSyntax","href":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Segmenters","href":"Hi.NcParsers.Segmenters.html","topicHref":"Hi.NcParsers.Segmenters.html","topicUid":"Hi.NcParsers.Segmenters","type":"Namespace","items":[{"name":"HeidenhainSegmenter","href":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.HeidenhainSegmenter","type":"Class"},{"name":"ISegmenter","href":"Hi.NcParsers.Segmenters.ISegmenter.html","topicHref":"Hi.NcParsers.Segmenters.ISegmenter.html","topicUid":"Hi.NcParsers.Segmenters.ISegmenter","type":"Interface"},{"name":"InlineDelimiterSegmenter","href":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter","type":"Class"},{"name":"SingleLineSegmenter","href":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.SingleLineSegmenter","type":"Class"}]},{"name":"Hi.NcParsers.Semantics","href":"Hi.NcParsers.Semantics.html","topicHref":"Hi.NcParsers.Semantics.html","topicUid":"Hi.NcParsers.Semantics","type":"Namespace","items":[{"name":"ClLinearMotionSemantic","href":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.ClLinearMotionSemantic","type":"Class"},{"name":"CompoundMotionSemantic","href":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.CompoundMotionSemantic","type":"Class"},{"name":"CoolantSemantic","href":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicHref":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicUid":"Hi.NcParsers.Semantics.CoolantSemantic","type":"Class"},{"name":"CsScriptBeginSemantic","href":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptBeginSemantic","type":"Class"},{"name":"CsScriptEndSemantic","href":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptEndSemantic","type":"Class"},{"name":"CsScriptSemantic","href":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptSemantic","type":"Class"},{"name":"INcSemantic","href":"Hi.NcParsers.Semantics.INcSemantic.html","topicHref":"Hi.NcParsers.Semantics.INcSemantic.html","topicUid":"Hi.NcParsers.Semantics.INcSemantic","type":"Interface"},{"name":"MachineCoordinateStepSemantic","href":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicHref":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicUid":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic","type":"Class"},{"name":"McArcMotionSemantic","href":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McArcMotionSemantic","type":"Class"},{"name":"McLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McLinearMotionSemantic","type":"Class"},{"name":"SpindleSpeedSemantic","href":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicHref":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicUid":"Hi.NcParsers.Semantics.SpindleSpeedSemantic","type":"Class"},{"name":"StrokeLimitCheckSemantic","href":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicHref":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicUid":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic","type":"Class"},{"name":"ToolChangeSemantic","href":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolChangeSemantic","type":"Class"}]},{"name":"Hi.NcParsers.Syntaxs","href":"Hi.NcParsers.Syntaxs.html","topicHref":"Hi.NcParsers.Syntaxs.html","topicUid":"Hi.NcParsers.Syntaxs","type":"Namespace","items":[{"name":"BundleSyntax","href":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.BundleSyntax","type":"Class"},{"name":"FanucSyntaxUtil","href":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil","type":"Class"},{"name":"GenericSyntaxKit","href":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicHref":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicUid":"Hi.NcParsers.Syntaxs.GenericSyntaxKit","type":"Class"},{"name":"HeidenhainSyntaxUtil","href":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil","type":"Class"},{"name":"IExpandingNcSyntax","href":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax","type":"Interface"},{"name":"INcSyntax","href":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.INcSyntax","type":"Interface"},{"name":"ISituNcSyntax","href":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.ISituNcSyntax","type":"Interface"},{"name":"MazakSyntaxUtil","href":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil","type":"Class"},{"name":"NcSyntaxUtil","href":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.NcSyntaxUtil","type":"Class"},{"name":"SiemensSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil","type":"Class"},{"name":"SyntaxPiece","href":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxPiece","type":"Class"},{"name":"SyntaxStageKeys","href":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxStageKeys","type":"Class"},{"name":"SyntecSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil","type":"Class"},{"name":"TagValue","href":"Hi.NcParsers.Syntaxs.TagValue.html","topicHref":"Hi.NcParsers.Syntaxs.TagValue.html","topicUid":"Hi.NcParsers.Syntaxs.TagValue","type":"Class"},{"name":"TransformationUtil","href":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicHref":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicUid":"Hi.NcParsers.Syntaxs.TransformationUtil","type":"Class"}]},{"name":"Hi.Numerical","href":"Hi.Numerical.html","topicHref":"Hi.Numerical.html","topicUid":"Hi.Numerical","type":"Namespace","items":[{"name":"CncBrand","href":"Hi.Numerical.CncBrand.html","topicHref":"Hi.Numerical.CncBrand.html","topicUid":"Hi.Numerical.CncBrand","type":"Enum"},{"name":"CommentMark","href":"Hi.Numerical.CommentMark.html","topicHref":"Hi.Numerical.CommentMark.html","topicUid":"Hi.Numerical.CommentMark","type":"Enum"},{"name":"CoolantMode","href":"Hi.Numerical.CoolantMode.html","topicHref":"Hi.Numerical.CoolantMode.html","topicUid":"Hi.Numerical.CoolantMode","type":"Enum"},{"name":"CoordinateInterpolationMode","href":"Hi.Numerical.CoordinateInterpolationMode.html","topicHref":"Hi.Numerical.CoordinateInterpolationMode.html","topicUid":"Hi.Numerical.CoordinateInterpolationMode","type":"Enum"},{"name":"FlexDictionaryUtil","href":"Hi.Numerical.FlexDictionaryUtil.html","topicHref":"Hi.Numerical.FlexDictionaryUtil.html","topicUid":"Hi.Numerical.FlexDictionaryUtil","type":"Class"},{"name":"HardNcComment","href":"Hi.Numerical.HardNcComment.html","topicHref":"Hi.Numerical.HardNcComment.html","topicUid":"Hi.Numerical.HardNcComment","type":"Class"},{"name":"HardNcEnv","href":"Hi.Numerical.HardNcEnv.html","topicHref":"Hi.Numerical.HardNcEnv.html","topicUid":"Hi.Numerical.HardNcEnv","type":"Class"},{"name":"HardNcLine","href":"Hi.Numerical.HardNcLine.html","topicHref":"Hi.Numerical.HardNcLine.html","topicUid":"Hi.Numerical.HardNcLine","type":"Class"},{"name":"HardNcUtil","href":"Hi.Numerical.HardNcUtil.html","topicHref":"Hi.Numerical.HardNcUtil.html","topicUid":"Hi.Numerical.HardNcUtil","type":"Class"},{"name":"HeidenhainCoordinateEntryDisplayee","href":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee","type":"Class"},{"name":"IControlRunner","href":"Hi.Numerical.IControlRunner.html","topicHref":"Hi.Numerical.IControlRunner.html","topicUid":"Hi.Numerical.IControlRunner","type":"Interface"},{"name":"IFlexDictionaryHost","href":"Hi.Numerical.IFlexDictionaryHost-1.html","topicHref":"Hi.Numerical.IFlexDictionaryHost-1.html","topicUid":"Hi.Numerical.IFlexDictionaryHost`1","type":"Interface"},{"name":"IGetFeedrate","href":"Hi.Numerical.IGetFeedrate.html","topicHref":"Hi.Numerical.IGetFeedrate.html","topicUid":"Hi.Numerical.IGetFeedrate","type":"Interface"},{"name":"IGetSpindleSpeed","href":"Hi.Numerical.IGetSpindleSpeed.html","topicHref":"Hi.Numerical.IGetSpindleSpeed.html","topicUid":"Hi.Numerical.IGetSpindleSpeed","type":"Interface"},{"name":"ISetFeedrate","href":"Hi.Numerical.ISetFeedrate.html","topicHref":"Hi.Numerical.ISetFeedrate.html","topicUid":"Hi.Numerical.ISetFeedrate","type":"Interface"},{"name":"ISetSpindleSpeed","href":"Hi.Numerical.ISetSpindleSpeed.html","topicHref":"Hi.Numerical.ISetSpindleSpeed.html","topicUid":"Hi.Numerical.ISetSpindleSpeed","type":"Interface"},{"name":"IsoCoordinateEntryDisplayee","href":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.IsoCoordinateEntryDisplayee","type":"Class"},{"name":"MechNcUtil","href":"Hi.Numerical.MechNcUtil.html","topicHref":"Hi.Numerical.MechNcUtil.html","topicUid":"Hi.Numerical.MechNcUtil","type":"Class"},{"name":"MillingToolOffsetTable","href":"Hi.Numerical.MillingToolOffsetTable.html","topicHref":"Hi.Numerical.MillingToolOffsetTable.html","topicUid":"Hi.Numerical.MillingToolOffsetTable","type":"Class"},{"name":"MillingToolOffsetTableRow","href":"Hi.Numerical.MillingToolOffsetTableRow.html","topicHref":"Hi.Numerical.MillingToolOffsetTableRow.html","topicUid":"Hi.Numerical.MillingToolOffsetTableRow","type":"Class"},{"name":"NcFlag","href":"Hi.Numerical.NcFlag.html","topicHref":"Hi.Numerical.NcFlag.html","topicUid":"Hi.Numerical.NcFlag","type":"Enum"},{"name":"NcFlagUtil","href":"Hi.Numerical.NcFlagUtil.html","topicHref":"Hi.Numerical.NcFlagUtil.html","topicUid":"Hi.Numerical.NcFlagUtil","type":"Class"},{"name":"NcGroup00","href":"Hi.Numerical.NcGroup00.html","topicHref":"Hi.Numerical.NcGroup00.html","topicUid":"Hi.Numerical.NcGroup00","type":"Enum"},{"name":"NcGroup01","href":"Hi.Numerical.NcGroup01.html","topicHref":"Hi.Numerical.NcGroup01.html","topicUid":"Hi.Numerical.NcGroup01","type":"Enum"},{"name":"NcGroup02","href":"Hi.Numerical.NcGroup02.html","topicHref":"Hi.Numerical.NcGroup02.html","topicUid":"Hi.Numerical.NcGroup02","type":"Enum"},{"name":"NcGroup03","href":"Hi.Numerical.NcGroup03.html","topicHref":"Hi.Numerical.NcGroup03.html","topicUid":"Hi.Numerical.NcGroup03","type":"Enum"},{"name":"NcGroup05","href":"Hi.Numerical.NcGroup05.html","topicHref":"Hi.Numerical.NcGroup05.html","topicUid":"Hi.Numerical.NcGroup05","type":"Enum"},{"name":"NcGroup06","href":"Hi.Numerical.NcGroup06.html","topicHref":"Hi.Numerical.NcGroup06.html","topicUid":"Hi.Numerical.NcGroup06","type":"Enum"},{"name":"NcGroup07","href":"Hi.Numerical.NcGroup07.html","topicHref":"Hi.Numerical.NcGroup07.html","topicUid":"Hi.Numerical.NcGroup07","type":"Enum"},{"name":"NcGroup08","href":"Hi.Numerical.NcGroup08.html","topicHref":"Hi.Numerical.NcGroup08.html","topicUid":"Hi.Numerical.NcGroup08","type":"Enum"},{"name":"NcGroup09","href":"Hi.Numerical.NcGroup09.html","topicHref":"Hi.Numerical.NcGroup09.html","topicUid":"Hi.Numerical.NcGroup09","type":"Enum"},{"name":"NcGroup10","href":"Hi.Numerical.NcGroup10.html","topicHref":"Hi.Numerical.NcGroup10.html","topicUid":"Hi.Numerical.NcGroup10","type":"Enum"},{"name":"NcGroup13","href":"Hi.Numerical.NcGroup13.html","topicHref":"Hi.Numerical.NcGroup13.html","topicUid":"Hi.Numerical.NcGroup13","type":"Enum"},{"name":"NcGroup14","href":"Hi.Numerical.NcGroup14.html","topicHref":"Hi.Numerical.NcGroup14.html","topicUid":"Hi.Numerical.NcGroup14","type":"Enum"},{"name":"NcGroup15","href":"Hi.Numerical.NcGroup15.html","topicHref":"Hi.Numerical.NcGroup15.html","topicUid":"Hi.Numerical.NcGroup15","type":"Enum"},{"name":"NcGroup16","href":"Hi.Numerical.NcGroup16.html","topicHref":"Hi.Numerical.NcGroup16.html","topicUid":"Hi.Numerical.NcGroup16","type":"Enum"},{"name":"NcGroup21","href":"Hi.Numerical.NcGroup21.html","topicHref":"Hi.Numerical.NcGroup21.html","topicUid":"Hi.Numerical.NcGroup21","type":"Enum"},{"name":"NcGroupAttribute","href":"Hi.Numerical.NcGroupAttribute.html","topicHref":"Hi.Numerical.NcGroupAttribute.html","topicUid":"Hi.Numerical.NcGroupAttribute","type":"Class"},{"name":"NcGroupHeidenhainM107M108","href":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicHref":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicUid":"Hi.Numerical.NcGroupHeidenhainM107M108","type":"Enum"},{"name":"NcGroupHeidenhainPlane","href":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicHref":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicUid":"Hi.Numerical.NcGroupHeidenhainPlane","type":"Enum"},{"name":"NcGroupHeidenhainShortestRotaryPath","href":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicHref":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicUid":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath","type":"Enum"},{"name":"NcGroupSpindleRotation","href":"Hi.Numerical.NcGroupSpindleRotation.html","topicHref":"Hi.Numerical.NcGroupSpindleRotation.html","topicUid":"Hi.Numerical.NcGroupSpindleRotation","type":"Enum"},{"name":"NcLifeCycleAttribute","href":"Hi.Numerical.NcLifeCycleAttribute.html","topicHref":"Hi.Numerical.NcLifeCycleAttribute.html","topicUid":"Hi.Numerical.NcLifeCycleAttribute","type":"Class"},{"name":"NcLifeCycleMode","href":"Hi.Numerical.NcLifeCycleMode.html","topicHref":"Hi.Numerical.NcLifeCycleMode.html","topicUid":"Hi.Numerical.NcLifeCycleMode","type":"Enum"},{"name":"NcNameAttribute","href":"Hi.Numerical.NcNameAttribute.html","topicHref":"Hi.Numerical.NcNameAttribute.html","topicUid":"Hi.Numerical.NcNameAttribute","type":"Class"},{"name":"NcNoteCache","href":"Hi.Numerical.NcNoteCache.html","topicHref":"Hi.Numerical.NcNoteCache.html","topicUid":"Hi.Numerical.NcNoteCache","type":"Class"},{"name":"NcProc","href":"Hi.Numerical.NcProc.html","topicHref":"Hi.Numerical.NcProc.html","topicUid":"Hi.Numerical.NcProc","type":"Class"},{"name":"NcWarningSceneEnum","href":"Hi.Numerical.NcWarningSceneEnum.html","topicHref":"Hi.Numerical.NcWarningSceneEnum.html","topicUid":"Hi.Numerical.NcWarningSceneEnum","type":"Enum"},{"name":"NumericUtil","href":"Hi.Numerical.NumericUtil.html","topicHref":"Hi.Numerical.NumericUtil.html","topicUid":"Hi.Numerical.NumericUtil","type":"Class"},{"name":"PolarEntry","href":"Hi.Numerical.PolarEntry.html","topicHref":"Hi.Numerical.PolarEntry.html","topicUid":"Hi.Numerical.PolarEntry","type":"Class"},{"name":"RadiusCompensationBuf","href":"Hi.Numerical.RadiusCompensationBuf.html","topicHref":"Hi.Numerical.RadiusCompensationBuf.html","topicUid":"Hi.Numerical.RadiusCompensationBuf","type":"Class"},{"name":"SourcedActEntry","href":"Hi.Numerical.SourcedActEntry.html","topicHref":"Hi.Numerical.SourcedActEntry.html","topicUid":"Hi.Numerical.SourcedActEntry","type":"Class"},{"name":"SpindleDirection","href":"Hi.Numerical.SpindleDirection.html","topicHref":"Hi.Numerical.SpindleDirection.html","topicUid":"Hi.Numerical.SpindleDirection","type":"Enum"},{"name":"SubStringKit","href":"Hi.Numerical.SubStringKit.html","topicHref":"Hi.Numerical.SubStringKit.html","topicUid":"Hi.Numerical.SubStringKit","type":"Class"},{"name":"SubStringKit.ActivationMode","href":"Hi.Numerical.SubStringKit.ActivationMode.html","topicHref":"Hi.Numerical.SubStringKit.ActivationMode.html","topicUid":"Hi.Numerical.SubStringKit.ActivationMode","type":"Enum"},{"name":"ToolConfigNotFoundException","href":"Hi.Numerical.ToolConfigNotFoundException.html","topicHref":"Hi.Numerical.ToolConfigNotFoundException.html","topicUid":"Hi.Numerical.ToolConfigNotFoundException","type":"Class"}]},{"name":"Hi.Numerical.Acts","href":"Hi.Numerical.Acts.html","topicHref":"Hi.Numerical.Acts.html","topicUid":"Hi.Numerical.Acts","type":"Namespace","items":[{"name":"ActActualTime","href":"Hi.Numerical.Acts.ActActualTime.html","topicHref":"Hi.Numerical.Acts.ActActualTime.html","topicUid":"Hi.Numerical.Acts.ActActualTime","type":"Class"},{"name":"ActClArc","href":"Hi.Numerical.Acts.ActClArc.html","topicHref":"Hi.Numerical.Acts.ActClArc.html","topicUid":"Hi.Numerical.Acts.ActClArc","type":"Class"},{"name":"ActClDerivedMcXyzabcContour","href":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour","type":"Class"},{"name":"ActClLinear","href":"Hi.Numerical.Acts.ActClLinear.html","topicHref":"Hi.Numerical.Acts.ActClLinear.html","topicUid":"Hi.Numerical.Acts.ActClLinear","type":"Class"},{"name":"ActClStep","href":"Hi.Numerical.Acts.ActClStep.html","topicHref":"Hi.Numerical.Acts.ActClStep.html","topicUid":"Hi.Numerical.Acts.ActClStep","type":"Class"},{"name":"ActClTeleport","href":"Hi.Numerical.Acts.ActClTeleport.html","topicHref":"Hi.Numerical.Acts.ActClTeleport.html","topicUid":"Hi.Numerical.Acts.ActClTeleport","type":"Class"},{"name":"ActCooling","href":"Hi.Numerical.Acts.ActCooling.html","topicHref":"Hi.Numerical.Acts.ActCooling.html","topicUid":"Hi.Numerical.Acts.ActCooling","type":"Class"},{"name":"ActData","href":"Hi.Numerical.Acts.ActData.html","topicHref":"Hi.Numerical.Acts.ActData.html","topicUid":"Hi.Numerical.Acts.ActData","type":"Class"},{"name":"ActDelay","href":"Hi.Numerical.Acts.ActDelay.html","topicHref":"Hi.Numerical.Acts.ActDelay.html","topicUid":"Hi.Numerical.Acts.ActDelay","type":"Class"},{"name":"ActFeedrate","href":"Hi.Numerical.Acts.ActFeedrate.html","topicHref":"Hi.Numerical.Acts.ActFeedrate.html","topicUid":"Hi.Numerical.Acts.ActFeedrate","type":"Class"},{"name":"ActHiddenStateChanged","href":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicHref":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicUid":"Hi.Numerical.Acts.ActHiddenStateChanged","type":"Class"},{"name":"ActIntentionalSkip","href":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicHref":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicUid":"Hi.Numerical.Acts.ActIntentionalSkip","type":"Class"},{"name":"ActLineBegin","href":"Hi.Numerical.Acts.ActLineBegin.html","topicHref":"Hi.Numerical.Acts.ActLineBegin.html","topicUid":"Hi.Numerical.Acts.ActLineBegin","type":"Class"},{"name":"ActLineCsScript","href":"Hi.Numerical.Acts.ActLineCsScript.html","topicHref":"Hi.Numerical.Acts.ActLineCsScript.html","topicUid":"Hi.Numerical.Acts.ActLineCsScript","type":"Class"},{"name":"ActLineEnd","href":"Hi.Numerical.Acts.ActLineEnd.html","topicHref":"Hi.Numerical.Acts.ActLineEnd.html","topicUid":"Hi.Numerical.Acts.ActLineEnd","type":"Class"},{"name":"ActMcPolarLinearContour","href":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarLinearContour","type":"Class"},{"name":"ActMcXyzLinearContour","href":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzLinearContour","type":"Class"},{"name":"ActMcXyzSpiralContour","href":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzSpiralContour","type":"Class"},{"name":"ActMcXyzStep","href":"Hi.Numerical.Acts.ActMcXyzStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzStep","type":"Class"},{"name":"ActMcXyzabcLinearContour","href":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcLinearContour","type":"Class"},{"name":"ActMcXyzabcStep","href":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcStep","type":"Class"},{"name":"ActRapid","href":"Hi.Numerical.Acts.ActRapid.html","topicHref":"Hi.Numerical.Acts.ActRapid.html","topicUid":"Hi.Numerical.Acts.ActRapid","type":"Class"},{"name":"ActSpindleDirection","href":"Hi.Numerical.Acts.ActSpindleDirection.html","topicHref":"Hi.Numerical.Acts.ActSpindleDirection.html","topicUid":"Hi.Numerical.Acts.ActSpindleDirection","type":"Class"},{"name":"ActSpindleOrientation","href":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicHref":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicUid":"Hi.Numerical.Acts.ActSpindleOrientation","type":"Class"},{"name":"ActSpindleSpeed","href":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicHref":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicUid":"Hi.Numerical.Acts.ActSpindleSpeed","type":"Class"},{"name":"ActToolingStep","href":"Hi.Numerical.Acts.ActToolingStep.html","topicHref":"Hi.Numerical.Acts.ActToolingStep.html","topicUid":"Hi.Numerical.Acts.ActToolingStep","type":"Class"},{"name":"ActToolingTeleport","href":"Hi.Numerical.Acts.ActToolingTeleport.html","topicHref":"Hi.Numerical.Acts.ActToolingTeleport.html","topicUid":"Hi.Numerical.Acts.ActToolingTeleport","type":"Class"},{"name":"ActUnknownSkip","href":"Hi.Numerical.Acts.ActUnknownSkip.html","topicHref":"Hi.Numerical.Acts.ActUnknownSkip.html","topicUid":"Hi.Numerical.Acts.ActUnknownSkip","type":"Class"},{"name":"ActUtil","href":"Hi.Numerical.Acts.ActUtil.html","topicHref":"Hi.Numerical.Acts.ActUtil.html","topicUid":"Hi.Numerical.Acts.ActUtil","type":"Class"},{"name":"IAct","href":"Hi.Numerical.Acts.IAct.html","topicHref":"Hi.Numerical.Acts.IAct.html","topicUid":"Hi.Numerical.Acts.IAct","type":"Interface"},{"name":"IActClMove","href":"Hi.Numerical.Acts.IActClMove.html","topicHref":"Hi.Numerical.Acts.IActClMove.html","topicUid":"Hi.Numerical.Acts.IActClMove","type":"Interface"},{"name":"IActDuration","href":"Hi.Numerical.Acts.IActDuration.html","topicHref":"Hi.Numerical.Acts.IActDuration.html","topicUid":"Hi.Numerical.Acts.IActDuration","type":"Interface"},{"name":"IActMachineStep","href":"Hi.Numerical.Acts.IActMachineStep.html","topicHref":"Hi.Numerical.Acts.IActMachineStep.html","topicUid":"Hi.Numerical.Acts.IActMachineStep","type":"Interface"},{"name":"IActMcXyzContour","href":"Hi.Numerical.Acts.IActMcXyzContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzContour","type":"Interface"},{"name":"IActMcXyzabcContour","href":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzabcContour","type":"Interface"},{"name":"IActSkip","href":"Hi.Numerical.Acts.IActSkip.html","topicHref":"Hi.Numerical.Acts.IActSkip.html","topicUid":"Hi.Numerical.Acts.IActSkip","type":"Interface"},{"name":"IActTooling","href":"Hi.Numerical.Acts.IActTooling.html","topicHref":"Hi.Numerical.Acts.IActTooling.html","topicUid":"Hi.Numerical.Acts.IActTooling","type":"Interface"},{"name":"IWorkTimeAttrib","href":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicHref":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicUid":"Hi.Numerical.Acts.IWorkTimeAttrib","type":"Interface"},{"name":"IWorkTimeGetter","href":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeGetter","type":"Interface"},{"name":"IWorkTimeSetter","href":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeSetter","type":"Interface"},{"name":"StateActRunner","href":"Hi.Numerical.Acts.StateActRunner.html","topicHref":"Hi.Numerical.Acts.StateActRunner.html","topicUid":"Hi.Numerical.Acts.StateActRunner","type":"Class"}]},{"name":"Hi.Numerical.Args","href":"Hi.Numerical.Args.html","topicHref":"Hi.Numerical.Args.html","topicUid":"Hi.Numerical.Args","type":"Namespace","items":[{"name":"OrthogonalPlaneFlag","href":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicHref":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicUid":"Hi.Numerical.Args.OrthogonalPlaneFlag","type":"Enum"},{"name":"PolarModeDirEnum","href":"Hi.Numerical.Args.PolarModeDirEnum.html","topicHref":"Hi.Numerical.Args.PolarModeDirEnum.html","topicUid":"Hi.Numerical.Args.PolarModeDirEnum","type":"Enum"}]},{"name":"Hi.Numerical.FilePlayers","href":"Hi.Numerical.FilePlayers.html","topicHref":"Hi.Numerical.FilePlayers.html","topicUid":"Hi.Numerical.FilePlayers","type":"Namespace","items":[{"name":"CsvRunner","href":"Hi.Numerical.FilePlayers.CsvRunner.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunner.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunner","type":"Class"},{"name":"CsvRunnerConfig","href":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunnerConfig","type":"Class"},{"name":"HardNcRunner","href":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicHref":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicUid":"Hi.Numerical.FilePlayers.HardNcRunner","type":"Class"}]},{"name":"Hi.Numerical.MachiningMotionResolutionUtils","href":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils","type":"Namespace","items":[{"name":"FeedPerCycleMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution","type":"Class"},{"name":"FeedPerToothMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution","type":"Class"},{"name":"FixedMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution","type":"Class"},{"name":"IMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution","type":"Interface"}]},{"name":"Hi.Numerical.NcArgs","href":"Hi.Numerical.NcArgs.html","topicHref":"Hi.Numerical.NcArgs.html","topicUid":"Hi.Numerical.NcArgs","type":"Namespace","items":[{"name":"ArcNcArg","href":"Hi.Numerical.NcArgs.ArcNcArg.html","topicHref":"Hi.Numerical.NcArgs.ArcNcArg.html","topicUid":"Hi.Numerical.NcArgs.ArcNcArg","type":"Class"},{"name":"G28Arg","href":"Hi.Numerical.NcArgs.G28Arg.html","topicHref":"Hi.Numerical.NcArgs.G28Arg.html","topicUid":"Hi.Numerical.NcArgs.G28Arg","type":"Class"},{"name":"Group07NcArg","href":"Hi.Numerical.NcArgs.Group07NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group07NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group07NcArg","type":"Class"},{"name":"Group09NcArg","href":"Hi.Numerical.NcArgs.Group09NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group09NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group09NcArg","type":"Class"},{"name":"HeidenhainCycleDef7Arg","href":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg","type":"Class"},{"name":"HeidenhainPlaneSpatialArg","href":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg","type":"Class"},{"name":"IHeidenhainBlockCacheArg","href":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg","type":"Interface"},{"name":"IHeidenhainPlaneArg","href":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg","type":"Interface"},{"name":"ITiltPlaneNcArg","href":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicHref":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicUid":"Hi.Numerical.NcArgs.ITiltPlaneNcArg","type":"Interface"},{"name":"NcArgCycle800","href":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicHref":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicUid":"Hi.Numerical.NcArgs.NcArgCycle800","type":"Class"},{"name":"NcArgG68","href":"Hi.Numerical.NcArgs.NcArgG68.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68","type":"Class"},{"name":"NcArgG68p2","href":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68p2","type":"Class"},{"name":"NcArgSiemensFrame","href":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicHref":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicUid":"Hi.Numerical.NcArgs.NcArgSiemensFrame","type":"Class"},{"name":"PausingNcArg","href":"Hi.Numerical.NcArgs.PausingNcArg.html","topicHref":"Hi.Numerical.NcArgs.PausingNcArg.html","topicUid":"Hi.Numerical.NcArgs.PausingNcArg","type":"Class"}]},{"name":"Hi.Numerical.StepSelectionUtils","href":"Hi.Numerical.StepSelectionUtils.html","topicHref":"Hi.Numerical.StepSelectionUtils.html","topicUid":"Hi.Numerical.StepSelectionUtils","type":"Namespace","items":[{"name":"AnchorMode","href":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicHref":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicUid":"Hi.Numerical.StepSelectionUtils.AnchorMode","type":"Enum"},{"name":"BoundSelector","href":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelector","type":"Class"},{"name":"BoundSelectorHost","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost","type":"Class"},{"name":"BoundSelectorPair","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair","type":"Class"},{"name":"BoundSelectorPair.BoundLocale","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale","type":"Enum"},{"name":"BoundSelectorStepSectionBundle","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle","type":"Class"},{"name":"BoundSelectorUtil","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil","type":"Class"},{"name":"DistanceShift","href":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.DistanceShift","type":"Class"},{"name":"IStepShift","href":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.IStepShift","type":"Interface"},{"name":"TimeShift","href":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.TimeShift","type":"Class"}]},{"name":"Hi.Numerical.Xyzabc","href":"Hi.Numerical.Xyzabc.html","topicHref":"Hi.Numerical.Xyzabc.html","topicUid":"Hi.Numerical.Xyzabc","type":"Namespace","items":[{"name":"Abc","href":"Hi.Numerical.Xyzabc.Abc.html","topicHref":"Hi.Numerical.Xyzabc.Abc.html","topicUid":"Hi.Numerical.Xyzabc.Abc","type":"Struct"},{"name":"CodeXyzabcChain","href":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.CodeXyzabcChain","type":"Class"},{"name":"GeneralXyzabcChain","href":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.GeneralXyzabcChain","type":"Class"},{"name":"IGetMcXyzabc","href":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.IGetMcXyzabc","type":"Interface"},{"name":"IGetXyzabcChain","href":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IGetXyzabcChain","type":"Interface"},{"name":"IMachineKinematics","href":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicHref":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicUid":"Hi.Numerical.Xyzabc.IMachineKinematics","type":"Interface"},{"name":"ISetMcXyzabc","href":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.ISetMcXyzabc","type":"Interface"},{"name":"IXyzabcChain","href":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IXyzabcChain","type":"Interface"},{"name":"ReflectedXyzabcChain","href":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain","type":"Class"},{"name":"XyzabcSolver","href":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcSolver","type":"Class"},{"name":"XyzabcUtil","href":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcUtil","type":"Class"}]},{"name":"Hi.PanelModels","href":"Hi.PanelModels.html","topicHref":"Hi.PanelModels.html","topicUid":"Hi.PanelModels","type":"Namespace","items":[{"name":"HiKey","href":"Hi.PanelModels.HiKey.html","topicHref":"Hi.PanelModels.HiKey.html","topicUid":"Hi.PanelModels.HiKey","type":"Enum"},{"name":"HiKeyEvent","href":"Hi.PanelModels.HiKeyEvent.html","topicHref":"Hi.PanelModels.HiKeyEvent.html","topicUid":"Hi.PanelModels.HiKeyEvent","type":"Class"},{"name":"HiModifierKeys","href":"Hi.PanelModels.HiModifierKeys.html","topicHref":"Hi.PanelModels.HiModifierKeys.html","topicUid":"Hi.PanelModels.HiModifierKeys","type":"Enum"},{"name":"HiMouseButton","href":"Hi.PanelModels.HiMouseButton.html","topicHref":"Hi.PanelModels.HiMouseButton.html","topicUid":"Hi.PanelModels.HiMouseButton","type":"Enum"},{"name":"HiMouseButtonEvent","href":"Hi.PanelModels.HiMouseButtonEvent.html","topicHref":"Hi.PanelModels.HiMouseButtonEvent.html","topicUid":"Hi.PanelModels.HiMouseButtonEvent","type":"Class"},{"name":"HiMouseButtonMask","href":"Hi.PanelModels.HiMouseButtonMask.html","topicHref":"Hi.PanelModels.HiMouseButtonMask.html","topicUid":"Hi.PanelModels.HiMouseButtonMask","type":"Enum"},{"name":"HiMouseButtonMaskUtil","href":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicHref":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicUid":"Hi.PanelModels.HiMouseButtonMaskUtil","type":"Class"},{"name":"HiMouseMoveEvent","href":"Hi.PanelModels.HiMouseMoveEvent.html","topicHref":"Hi.PanelModels.HiMouseMoveEvent.html","topicUid":"Hi.PanelModels.HiMouseMoveEvent","type":"Class"},{"name":"HiMouseWheelEvent","href":"Hi.PanelModels.HiMouseWheelEvent.html","topicHref":"Hi.PanelModels.HiMouseWheelEvent.html","topicUid":"Hi.PanelModels.HiMouseWheelEvent","type":"Class"},{"name":"PanelModel","href":"Hi.PanelModels.PanelModel.html","topicHref":"Hi.PanelModels.PanelModel.html","topicUid":"Hi.PanelModels.PanelModel","type":"Class"}]},{"name":"Hi.Parallels","href":"Hi.Parallels.html","topicHref":"Hi.Parallels.html","topicUid":"Hi.Parallels","type":"Namespace","items":[{"name":"CurrentThreadTaskScheduler","href":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicHref":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicUid":"Hi.Parallels.CurrentThreadTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskScheduler","href":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicHref":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicUid":"Hi.Parallels.DistributedQueueTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskStarter","href":"Hi.Parallels.DistributedQueueTaskStarter.html","topicHref":"Hi.Parallels.DistributedQueueTaskStarter.html","topicUid":"Hi.Parallels.DistributedQueueTaskStarter","type":"Class"},{"name":"LockUtil","href":"Hi.Parallels.LockUtil.html","topicHref":"Hi.Parallels.LockUtil.html","topicUid":"Hi.Parallels.LockUtil","type":"Class"},{"name":"PriorityTaskScheduler","href":"Hi.Parallels.PriorityTaskScheduler.html","topicHref":"Hi.Parallels.PriorityTaskScheduler.html","topicUid":"Hi.Parallels.PriorityTaskScheduler","type":"Class"},{"name":"QueueTaskScheduler","href":"Hi.Parallels.QueueTaskScheduler.html","topicHref":"Hi.Parallels.QueueTaskScheduler.html","topicUid":"Hi.Parallels.QueueTaskScheduler","type":"Class"},{"name":"ReaderWriterLockUtil","href":"Hi.Parallels.ReaderWriterLockUtil.html","topicHref":"Hi.Parallels.ReaderWriterLockUtil.html","topicUid":"Hi.Parallels.ReaderWriterLockUtil","type":"Class"},{"name":"SemaphoreUtil","href":"Hi.Parallels.SemaphoreUtil.html","topicHref":"Hi.Parallels.SemaphoreUtil.html","topicUid":"Hi.Parallels.SemaphoreUtil","type":"Class"},{"name":"ThreadSafeSet","href":"Hi.Parallels.ThreadSafeSet-1.html","topicHref":"Hi.Parallels.ThreadSafeSet-1.html","topicUid":"Hi.Parallels.ThreadSafeSet`1","type":"Class"}]},{"name":"Hi.Physics","href":"Hi.Physics.html","topicHref":"Hi.Physics.html","topicUid":"Hi.Physics","type":"Namespace","items":[{"name":"AmpPhase","href":"Hi.Physics.AmpPhase.html","topicHref":"Hi.Physics.AmpPhase.html","topicUid":"Hi.Physics.AmpPhase","type":"Class"},{"name":"CoatingMaterial","href":"Hi.Physics.CoatingMaterial.html","topicHref":"Hi.Physics.CoatingMaterial.html","topicUid":"Hi.Physics.CoatingMaterial","type":"Class"},{"name":"CoolantHeatCondition","href":"Hi.Physics.CoolantHeatCondition.html","topicHref":"Hi.Physics.CoolantHeatCondition.html","topicUid":"Hi.Physics.CoolantHeatCondition","type":"Class"},{"name":"CutterMaterial","href":"Hi.Physics.CutterMaterial.html","topicHref":"Hi.Physics.CutterMaterial.html","topicUid":"Hi.Physics.CutterMaterial","type":"Class"},{"name":"IGetThermalLayerList","href":"Hi.Physics.IGetThermalLayerList.html","topicHref":"Hi.Physics.IGetThermalLayerList.html","topicUid":"Hi.Physics.IGetThermalLayerList","type":"Interface"},{"name":"IStructureMaterial","href":"Hi.Physics.IStructureMaterial.html","topicHref":"Hi.Physics.IStructureMaterial.html","topicUid":"Hi.Physics.IStructureMaterial","type":"Interface"},{"name":"ISuccessivePhysicsBriefAccessor","href":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicHref":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicUid":"Hi.Physics.ISuccessivePhysicsBriefAccessor","type":"Interface"},{"name":"ISurfaceMaterial","href":"Hi.Physics.ISurfaceMaterial.html","topicHref":"Hi.Physics.ISurfaceMaterial.html","topicUid":"Hi.Physics.ISurfaceMaterial","type":"Interface"},{"name":"ITimeGetter","href":"Hi.Physics.ITimeGetter.html","topicHref":"Hi.Physics.ITimeGetter.html","topicUid":"Hi.Physics.ITimeGetter","type":"Interface"},{"name":"MillingTemperatureUtil","href":"Hi.Physics.MillingTemperatureUtil.html","topicHref":"Hi.Physics.MillingTemperatureUtil.html","topicUid":"Hi.Physics.MillingTemperatureUtil","type":"Class"},{"name":"SeqPhysicsBrief","href":"Hi.Physics.SeqPhysicsBrief.html","topicHref":"Hi.Physics.SeqPhysicsBrief.html","topicUid":"Hi.Physics.SeqPhysicsBrief","type":"Class"},{"name":"StructureMaterial","href":"Hi.Physics.StructureMaterial.html","topicHref":"Hi.Physics.StructureMaterial.html","topicUid":"Hi.Physics.StructureMaterial","type":"Class"},{"name":"TemperatureUtil","href":"Hi.Physics.TemperatureUtil.html","topicHref":"Hi.Physics.TemperatureUtil.html","topicUid":"Hi.Physics.TemperatureUtil","type":"Class"},{"name":"TemperatureVsHardness","href":"Hi.Physics.TemperatureVsHardness.html","topicHref":"Hi.Physics.TemperatureVsHardness.html","topicUid":"Hi.Physics.TemperatureVsHardness","type":"Class"},{"name":"ThermalLayer1D","href":"Hi.Physics.ThermalLayer1D.html","topicHref":"Hi.Physics.ThermalLayer1D.html","topicUid":"Hi.Physics.ThermalLayer1D","type":"Class"},{"name":"TimeSeriesUtil","href":"Hi.Physics.TimeSeriesUtil.html","topicHref":"Hi.Physics.TimeSeriesUtil.html","topicUid":"Hi.Physics.TimeSeriesUtil","type":"Class"},{"name":"TimeValue","href":"Hi.Physics.TimeValue.html","topicHref":"Hi.Physics.TimeValue.html","topicUid":"Hi.Physics.TimeValue","type":"Class"},{"name":"WorkpieceMaterial","href":"Hi.Physics.WorkpieceMaterial.html","topicHref":"Hi.Physics.WorkpieceMaterial.html","topicUid":"Hi.Physics.WorkpieceMaterial","type":"Class"}]},{"name":"Hi.ScriptApiUtils","href":"Hi.ScriptApiUtils.html","topicHref":"Hi.ScriptApiUtils.html","topicUid":"Hi.ScriptApiUtils","type":"Namespace","items":[{"name":"ICsScriptApi","href":"Hi.ScriptApiUtils.ICsScriptApi.html","topicHref":"Hi.ScriptApiUtils.ICsScriptApi.html","topicUid":"Hi.ScriptApiUtils.ICsScriptApi","type":"Interface"},{"name":"JsAceAttribute","href":"Hi.ScriptApiUtils.JsAceAttribute.html","topicHref":"Hi.ScriptApiUtils.JsAceAttribute.html","topicUid":"Hi.ScriptApiUtils.JsAceAttribute","type":"Class"}]},{"name":"Hi.ShellCommands","href":"Hi.ShellCommands.html","topicHref":"Hi.ShellCommands.html","topicUid":"Hi.ShellCommands","type":"Namespace","items":[{"name":"EnablingWrapper","href":"Hi.ShellCommands.EnablingWrapper.html","topicHref":"Hi.ShellCommands.EnablingWrapper.html","topicUid":"Hi.ShellCommands.EnablingWrapper","type":"Class"},{"name":"GeomDiffCommand","href":"Hi.ShellCommands.GeomDiffCommand.html","topicHref":"Hi.ShellCommands.GeomDiffCommand.html","topicUid":"Hi.ShellCommands.GeomDiffCommand","type":"Class"},{"name":"IShellCommand","href":"Hi.ShellCommands.IShellCommand.html","topicHref":"Hi.ShellCommands.IShellCommand.html","topicUid":"Hi.ShellCommands.IShellCommand","type":"Interface"},{"name":"ITitleCommand","href":"Hi.ShellCommands.ITitleCommand.html","topicHref":"Hi.ShellCommands.ITitleCommand.html","topicUid":"Hi.ShellCommands.ITitleCommand","type":"Interface"},{"name":"Lang","href":"Hi.ShellCommands.Lang.html","topicHref":"Hi.ShellCommands.Lang.html","topicUid":"Hi.ShellCommands.Lang","type":"Class"},{"name":"ListCommand","href":"Hi.ShellCommands.ListCommand.html","topicHref":"Hi.ShellCommands.ListCommand.html","topicUid":"Hi.ShellCommands.ListCommand","type":"Class"},{"name":"MachiningMotionResolutionCommand","href":"Hi.ShellCommands.MachiningMotionResolutionCommand.html","topicHref":"Hi.ShellCommands.MachiningMotionResolutionCommand.html","topicUid":"Hi.ShellCommands.MachiningMotionResolutionCommand","type":"Class"},{"name":"NcCodeCommand","href":"Hi.ShellCommands.NcCodeCommand.html","topicHref":"Hi.ShellCommands.NcCodeCommand.html","topicUid":"Hi.ShellCommands.NcCodeCommand","type":"Class"},{"name":"NcFileCommand","href":"Hi.ShellCommands.NcFileCommand.html","topicHref":"Hi.ShellCommands.NcFileCommand.html","topicUid":"Hi.ShellCommands.NcFileCommand","type":"Class"},{"name":"NcFileListCommand","href":"Hi.ShellCommands.NcFileListCommand.html","topicHref":"Hi.ShellCommands.NcFileListCommand.html","topicUid":"Hi.ShellCommands.NcFileListCommand","type":"Class"},{"name":"NcOptOptionCommand","href":"Hi.ShellCommands.NcOptOptionCommand.html","topicHref":"Hi.ShellCommands.NcOptOptionCommand.html","topicUid":"Hi.ShellCommands.NcOptOptionCommand","type":"Class"},{"name":"OptimizeToFilesCommand","href":"Hi.ShellCommands.OptimizeToFilesCommand.html","topicHref":"Hi.ShellCommands.OptimizeToFilesCommand.html","topicUid":"Hi.ShellCommands.OptimizeToFilesCommand","type":"Class"},{"name":"PostExecutionCommand","href":"Hi.ShellCommands.PostExecutionCommand.html","topicHref":"Hi.ShellCommands.PostExecutionCommand.html","topicUid":"Hi.ShellCommands.PostExecutionCommand","type":"Class"},{"name":"PreSettingCommand","href":"Hi.ShellCommands.PreSettingCommand.html","topicHref":"Hi.ShellCommands.PreSettingCommand.html","topicUid":"Hi.ShellCommands.PreSettingCommand","type":"Class"},{"name":"RecordRuntimeGeomActionEnum","href":"Hi.ShellCommands.RecordRuntimeGeomActionEnum.html","topicHref":"Hi.ShellCommands.RecordRuntimeGeomActionEnum.html","topicUid":"Hi.ShellCommands.RecordRuntimeGeomActionEnum","type":"Enum"},{"name":"RecordRuntimeGeomCommand","href":"Hi.ShellCommands.RecordRuntimeGeomCommand.html","topicHref":"Hi.ShellCommands.RecordRuntimeGeomCommand.html","topicUid":"Hi.ShellCommands.RecordRuntimeGeomCommand","type":"Class"},{"name":"ScriptCommand","href":"Hi.ShellCommands.ScriptCommand.html","topicHref":"Hi.ShellCommands.ScriptCommand.html","topicUid":"Hi.ShellCommands.ScriptCommand","type":"Class"},{"name":"SimpleSessionCommand","href":"Hi.ShellCommands.SimpleSessionCommand.html","topicHref":"Hi.ShellCommands.SimpleSessionCommand.html","topicUid":"Hi.ShellCommands.SimpleSessionCommand","type":"Class"},{"name":"WriteRuntimeGeomToStlCommand","href":"Hi.ShellCommands.WriteRuntimeGeomToStlCommand.html","topicHref":"Hi.ShellCommands.WriteRuntimeGeomToStlCommand.html","topicUid":"Hi.ShellCommands.WriteRuntimeGeomToStlCommand","type":"Class"},{"name":"WriteShotFilesCommand","href":"Hi.ShellCommands.WriteShotFilesCommand.html","topicHref":"Hi.ShellCommands.WriteShotFilesCommand.html","topicUid":"Hi.ShellCommands.WriteShotFilesCommand","type":"Class"},{"name":"WriteStepFilesCommand","href":"Hi.ShellCommands.WriteStepFilesCommand.html","topicHref":"Hi.ShellCommands.WriteStepFilesCommand.html","topicUid":"Hi.ShellCommands.WriteStepFilesCommand","type":"Class"}]},{"name":"Hi.SqliteUtils","href":"Hi.SqliteUtils.html","topicHref":"Hi.SqliteUtils.html","topicUid":"Hi.SqliteUtils","type":"Namespace","items":[{"name":"SqliteIdentityRole","href":"Hi.SqliteUtils.SqliteIdentityRole.html","topicHref":"Hi.SqliteUtils.SqliteIdentityRole.html","topicUid":"Hi.SqliteUtils.SqliteIdentityRole","type":"Class"},{"name":"SqliteIdentityStorage","href":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage","type":"Class"},{"name":"SqliteIdentityStorage.RoleRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow","type":"Class"},{"name":"SqliteIdentityStorage.UserRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow","type":"Class"},{"name":"SqliteIdentityUser","href":"Hi.SqliteUtils.SqliteIdentityUser.html","topicHref":"Hi.SqliteUtils.SqliteIdentityUser.html","topicUid":"Hi.SqliteUtils.SqliteIdentityUser","type":"Class"},{"name":"SqliteRoleStore","href":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicHref":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicUid":"Hi.SqliteUtils.SqliteRoleStore`1","type":"Class"},{"name":"SqliteStepStorage","href":"Hi.SqliteUtils.SqliteStepStorage.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage","type":"Class"},{"name":"SqliteStepStorage.MillingStepLuggageRow","href":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow","type":"Class"},{"name":"SqliteUserStore","href":"Hi.SqliteUtils.SqliteUserStore-1.html","topicHref":"Hi.SqliteUtils.SqliteUserStore-1.html","topicUid":"Hi.SqliteUtils.SqliteUserStore`1","type":"Class"}]},{"name":"Hi.Test","href":"Hi.Test.html","topicHref":"Hi.Test.html","topicUid":"Hi.Test","type":"Namespace","items":[{"name":"TestCollision","href":"Hi.Test.TestCollision.html","topicHref":"Hi.Test.TestCollision.html","topicUid":"Hi.Test.TestCollision","type":"Class"}]},{"name":"Hi.UiExtensions","href":"Hi.UiExtensions.html","topicHref":"Hi.UiExtensions.html","topicUid":"Hi.UiExtensions","type":"Namespace","items":[{"name":"ChartBoundary","href":"Hi.UiExtensions.ChartBoundary.html","topicHref":"Hi.UiExtensions.ChartBoundary.html","topicUid":"Hi.UiExtensions.ChartBoundary","type":"Class"},{"name":"ChartBoundaryEnum","href":"Hi.UiExtensions.ChartBoundaryEnum.html","topicHref":"Hi.UiExtensions.ChartBoundaryEnum.html","topicUid":"Hi.UiExtensions.ChartBoundaryEnum","type":"Enum"},{"name":"NativeVisibility","href":"Hi.UiExtensions.NativeVisibility.html","topicHref":"Hi.UiExtensions.NativeVisibility.html","topicUid":"Hi.UiExtensions.NativeVisibility","type":"Enum"},{"name":"UiUtil","href":"Hi.UiExtensions.UiUtil.html","topicHref":"Hi.UiExtensions.UiUtil.html","topicUid":"Hi.UiExtensions.UiUtil","type":"Class"},{"name":"UiUtil.InvokeFunc","href":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicHref":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicUid":"Hi.UiExtensions.UiUtil.InvokeFunc","type":"Delegate"}]},{"name":"Hi.UniversalNc","href":"Hi.UniversalNc.html","topicHref":"Hi.UniversalNc.html","topicUid":"Hi.UniversalNc","type":"Namespace","items":[{"name":"Lang","href":"Hi.UniversalNc.Lang.html","topicHref":"Hi.UniversalNc.Lang.html","topicUid":"Hi.UniversalNc.Lang","type":"Class"}]},{"name":"Hi.Vibrations","href":"Hi.Vibrations.html","topicHref":"Hi.Vibrations.html","topicUid":"Hi.Vibrations","type":"Namespace","items":[{"name":"AngularVelocityUtil","href":"Hi.Vibrations.AngularVelocityUtil.html","topicHref":"Hi.Vibrations.AngularVelocityUtil.html","topicUid":"Hi.Vibrations.AngularVelocityUtil","type":"Class"},{"name":"ForceAccelAmpPhase","href":"Hi.Vibrations.ForceAccelAmpPhase.html","topicHref":"Hi.Vibrations.ForceAccelAmpPhase.html","topicUid":"Hi.Vibrations.ForceAccelAmpPhase","type":"Class"},{"name":"ForceAccelFourierSeries","href":"Hi.Vibrations.ForceAccelFourierSeries.html","topicHref":"Hi.Vibrations.ForceAccelFourierSeries.html","topicUid":"Hi.Vibrations.ForceAccelFourierSeries","type":"Class"},{"name":"ForceAccelShot","href":"Hi.Vibrations.ForceAccelShot.html","topicHref":"Hi.Vibrations.ForceAccelShot.html","topicUid":"Hi.Vibrations.ForceAccelShot","type":"Class"},{"name":"ForceAccelUtil","href":"Hi.Vibrations.ForceAccelUtil.html","topicHref":"Hi.Vibrations.ForceAccelUtil.html","topicUid":"Hi.Vibrations.ForceAccelUtil","type":"Class"},{"name":"IAngularVelocityOwner","href":"Hi.Vibrations.IAngularVelocityOwner.html","topicHref":"Hi.Vibrations.IAngularVelocityOwner.html","topicUid":"Hi.Vibrations.IAngularVelocityOwner","type":"Interface"},{"name":"VibrationUtil","href":"Hi.Vibrations.VibrationUtil.html","topicHref":"Hi.Vibrations.VibrationUtil.html","topicUid":"Hi.Vibrations.VibrationUtil","type":"Class"},{"name":"WAmpPhase","href":"Hi.Vibrations.WAmpPhase.html","topicHref":"Hi.Vibrations.WAmpPhase.html","topicUid":"Hi.Vibrations.WAmpPhase","type":"Class"},{"name":"WAmpPhaseXyzTransformation","href":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicHref":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicUid":"Hi.Vibrations.WAmpPhaseXyzTransformation","type":"Class"}]},{"name":"Hi.WinForm.Disp","href":"Hi.WinForm.Disp.html","topicHref":"Hi.WinForm.Disp.html","topicUid":"Hi.WinForm.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WinForm.Disp.RenderingCanvas.html","topicHref":"Hi.WinForm.Disp.RenderingCanvas.html","topicUid":"Hi.WinForm.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingForm","href":"Hi.WinForm.Disp.RenderingForm.html","topicHref":"Hi.WinForm.Disp.RenderingForm.html","topicUid":"Hi.WinForm.Disp.RenderingForm","type":"Class"}]},{"name":"Hi.WpfPlus.Disp","href":"Hi.WpfPlus.Disp.html","topicHref":"Hi.WpfPlus.Disp.html","topicUid":"Hi.WpfPlus.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicHref":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicUid":"Hi.WpfPlus.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingWindow","href":"Hi.WpfPlus.Disp.RenderingWindow.html","topicHref":"Hi.WpfPlus.Disp.RenderingWindow.html","topicUid":"Hi.WpfPlus.Disp.RenderingWindow","type":"Class"},{"name":"WpfDispUtil","href":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicHref":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicUid":"Hi.WpfPlus.Disp.WpfDispUtil","type":"Class"}]},{"name":"HiMachining.Milling","href":"HiMachining.Milling.html","topicHref":"HiMachining.Milling.html","topicUid":"HiMachining.Milling","type":"Namespace","items":[{"name":"ClMillingDevice","href":"HiMachining.Milling.ClMillingDevice.html","topicHref":"HiMachining.Milling.ClMillingDevice.html","topicUid":"HiMachining.Milling.ClMillingDevice","type":"Class"}]},{"name":"HiNc.Grpcs","href":"HiNc.Grpcs.html","topicHref":"HiNc.Grpcs.html","topicUid":"HiNc.Grpcs","type":"Namespace","items":[{"name":"MachiningProjectGrpcServer","href":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicHref":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicUid":"HiNc.Grpcs.MachiningProjectGrpcServer","type":"Class"}]},{"name":"numerical","href":"numerical.html","topicHref":"numerical.html","topicUid":"numerical","type":"Namespace","items":[{"name":"Empty","href":"numerical.Empty.html","topicHref":"numerical.Empty.html","topicUid":"numerical.Empty","type":"Class"},{"name":"GrpcCsvRowDictionary","href":"numerical.GrpcCsvRowDictionary.html","topicHref":"numerical.GrpcCsvRowDictionary.html","topicUid":"numerical.GrpcCsvRowDictionary","type":"Class"},{"name":"GrpcNcStep","href":"numerical.GrpcNcStep.html","topicHref":"numerical.GrpcNcStep.html","topicUid":"numerical.GrpcNcStep","type":"Class"},{"name":"NumericalReflection","href":"numerical.NumericalReflection.html","topicHref":"numerical.NumericalReflection.html","topicUid":"numerical.NumericalReflection","type":"Class"},{"name":"NumericalService","href":"numerical.NumericalService.html","topicHref":"numerical.NumericalService.html","topicUid":"numerical.NumericalService","type":"Class"},{"name":"NumericalService.NumericalServiceBase","href":"numerical.NumericalService.NumericalServiceBase.html","topicHref":"numerical.NumericalService.NumericalServiceBase.html","topicUid":"numerical.NumericalService.NumericalServiceBase","type":"Class"},{"name":"NumericalService.NumericalServiceClient","href":"numerical.NumericalService.NumericalServiceClient.html","topicHref":"numerical.NumericalService.NumericalServiceClient.html","topicUid":"numerical.NumericalService.NumericalServiceClient","type":"Class"},{"name":"UniversalNcReflection","href":"numerical.UniversalNcReflection.html","topicHref":"numerical.UniversalNcReflection.html","topicUid":"numerical.UniversalNcReflection","type":"Class"},{"name":"UniversalNcService","href":"numerical.UniversalNcService.html","topicHref":"numerical.UniversalNcService.html","topicUid":"numerical.UniversalNcService","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceBase","href":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceBase","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceClient","href":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceClient","type":"Class"}]}],"memberLayout":"SamePage"} +{"items":[{"name":"Hi.Cbtr","href":"Hi.Cbtr.html","topicHref":"Hi.Cbtr.html","topicUid":"Hi.Cbtr","type":"Namespace","items":[{"name":"CachedTris","href":"Hi.Cbtr.CachedTris.html","topicHref":"Hi.Cbtr.CachedTris.html","topicUid":"Hi.Cbtr.CachedTris","type":"Class"},{"name":"CachedTris.SweepingMode","href":"Hi.Cbtr.CachedTris.SweepingMode.html","topicHref":"Hi.Cbtr.CachedTris.SweepingMode.html","topicUid":"Hi.Cbtr.CachedTris.SweepingMode","type":"Enum"},{"name":"CbtrPickable","href":"Hi.Cbtr.CbtrPickable.html","topicHref":"Hi.Cbtr.CbtrPickable.html","topicUid":"Hi.Cbtr.CbtrPickable","type":"Class"},{"name":"ConstructionDefectDisplayee","href":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicHref":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicUid":"Hi.Cbtr.ConstructionDefectDisplayee","type":"Class"},{"name":"CubeTree","href":"Hi.Cbtr.CubeTree.html","topicHref":"Hi.Cbtr.CubeTree.html","topicUid":"Hi.Cbtr.CubeTree","type":"Class"},{"name":"CubeTree.DefectNodeInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo","type":"Class"},{"name":"CubeTree.DefectNodeInfo.TriWireInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo","type":"Class"},{"name":"CubeTree.DefectTriWireInfoInterop","href":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicHref":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicUid":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop","type":"Struct"},{"name":"CubeTree.InfNodeInfo","href":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.InfNodeInfo","type":"Class"},{"name":"CubeTree.TriWireRelationInterop","href":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicHref":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicUid":"Hi.Cbtr.CubeTree.TriWireRelationInterop","type":"Struct"},{"name":"CubeTree.diff_response_func_t","href":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicHref":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicUid":"Hi.Cbtr.CubeTree.diff_response_func_t","type":"Delegate"},{"name":"CubeTreeExportExtensions","href":"Hi.Cbtr.CubeTreeExportExtensions.html","topicHref":"Hi.Cbtr.CubeTreeExportExtensions.html","topicUid":"Hi.Cbtr.CubeTreeExportExtensions","type":"Class"},{"name":"CubeTreeFile","href":"Hi.Cbtr.CubeTreeFile.html","topicHref":"Hi.Cbtr.CubeTreeFile.html","topicUid":"Hi.Cbtr.CubeTreeFile","type":"Class"},{"name":"DiffAttachment","href":"Hi.Cbtr.DiffAttachment.html","topicHref":"Hi.Cbtr.DiffAttachment.html","topicUid":"Hi.Cbtr.DiffAttachment","type":"Class"},{"name":"GeomBoolCache","href":"Hi.Cbtr.GeomBoolCache.html","topicHref":"Hi.Cbtr.GeomBoolCache.html","topicUid":"Hi.Cbtr.GeomBoolCache","type":"Class"},{"name":"GeomBoolCacheEnum","href":"Hi.Cbtr.GeomBoolCacheEnum.html","topicHref":"Hi.Cbtr.GeomBoolCacheEnum.html","topicUid":"Hi.Cbtr.GeomBoolCacheEnum","type":"Enum"},{"name":"IGetInitStickConvex","href":"Hi.Cbtr.IGetInitStickConvex.html","topicHref":"Hi.Cbtr.IGetInitStickConvex.html","topicUid":"Hi.Cbtr.IGetInitStickConvex","type":"Interface"},{"name":"InfDefectDisplayee","href":"Hi.Cbtr.InfDefectDisplayee.html","topicHref":"Hi.Cbtr.InfDefectDisplayee.html","topicUid":"Hi.Cbtr.InfDefectDisplayee","type":"Class"},{"name":"InitStickConvex","href":"Hi.Cbtr.InitStickConvex.html","topicHref":"Hi.Cbtr.InitStickConvex.html","topicUid":"Hi.Cbtr.InitStickConvex","type":"Class"},{"name":"LsStl","href":"Hi.Cbtr.LsStl.html","topicHref":"Hi.Cbtr.LsStl.html","topicUid":"Hi.Cbtr.LsStl","type":"Class"},{"name":"Substraction","href":"Hi.Cbtr.Substraction.html","topicHref":"Hi.Cbtr.Substraction.html","topicUid":"Hi.Cbtr.Substraction","type":"Class"},{"name":"UnhighlightablePickable","href":"Hi.Cbtr.UnhighlightablePickable.html","topicHref":"Hi.Cbtr.UnhighlightablePickable.html","topicUid":"Hi.Cbtr.UnhighlightablePickable","type":"Class"},{"name":"UnmanagedSubstraction","href":"Hi.Cbtr.UnmanagedSubstraction.html","topicHref":"Hi.Cbtr.UnmanagedSubstraction.html","topicUid":"Hi.Cbtr.UnmanagedSubstraction","type":"Class"},{"name":"WireCube","href":"Hi.Cbtr.WireCube.html","topicHref":"Hi.Cbtr.WireCube.html","topicUid":"Hi.Cbtr.WireCube","type":"Class"},{"name":"node_diff_t","href":"Hi.Cbtr.node_diff_t.html","topicHref":"Hi.Cbtr.node_diff_t.html","topicUid":"Hi.Cbtr.node_diff_t","type":"Struct"}]},{"name":"Hi.Collision","href":"Hi.Collision.html","topicHref":"Hi.Collision.html","topicUid":"Hi.Collision","type":"Namespace","items":[{"name":"AnchoredCollidableLeaf","href":"Hi.Collision.AnchoredCollidableLeaf.html","topicHref":"Hi.Collision.AnchoredCollidableLeaf.html","topicUid":"Hi.Collision.AnchoredCollidableLeaf","type":"Class"},{"name":"AnchoredCollidablePair","href":"Hi.Collision.AnchoredCollidablePair.html","topicHref":"Hi.Collision.AnchoredCollidablePair.html","topicUid":"Hi.Collision.AnchoredCollidablePair","type":"Class"},{"name":"CollidableStl","href":"Hi.Collision.CollidableStl.html","topicHref":"Hi.Collision.CollidableStl.html","topicUid":"Hi.Collision.CollidableStl","type":"Class"},{"name":"CollisionFlag","href":"Hi.Collision.CollisionFlag.html","topicHref":"Hi.Collision.CollisionFlag.html","topicUid":"Hi.Collision.CollisionFlag","type":"Enum"},{"name":"CollisionIndexPair","href":"Hi.Collision.CollisionIndexPair.html","topicHref":"Hi.Collision.CollisionIndexPair.html","topicUid":"Hi.Collision.CollisionIndexPair","type":"Class"},{"name":"CollisionUtil","href":"Hi.Collision.CollisionUtil.html","topicHref":"Hi.Collision.CollisionUtil.html","topicUid":"Hi.Collision.CollisionUtil","type":"Class"},{"name":"FuncAnchoredCollidable","href":"Hi.Collision.FuncAnchoredCollidable.html","topicHref":"Hi.Collision.FuncAnchoredCollidable.html","topicUid":"Hi.Collision.FuncAnchoredCollidable","type":"Class"},{"name":"IAnchoredCollidableBased","href":"Hi.Collision.IAnchoredCollidableBased.html","topicHref":"Hi.Collision.IAnchoredCollidableBased.html","topicUid":"Hi.Collision.IAnchoredCollidableBased","type":"Interface"},{"name":"IAnchoredCollidableLeaf","href":"Hi.Collision.IAnchoredCollidableLeaf.html","topicHref":"Hi.Collision.IAnchoredCollidableLeaf.html","topicUid":"Hi.Collision.IAnchoredCollidableLeaf","type":"Interface"},{"name":"IAnchoredCollidableNode","href":"Hi.Collision.IAnchoredCollidableNode.html","topicHref":"Hi.Collision.IAnchoredCollidableNode.html","topicUid":"Hi.Collision.IAnchoredCollidableNode","type":"Interface"},{"name":"IAnchoredCollidableStem","href":"Hi.Collision.IAnchoredCollidableStem.html","topicHref":"Hi.Collision.IAnchoredCollidableStem.html","topicUid":"Hi.Collision.IAnchoredCollidableStem","type":"Interface"},{"name":"ICollidable","href":"Hi.Collision.ICollidable.html","topicHref":"Hi.Collision.ICollidable.html","topicUid":"Hi.Collision.ICollidable","type":"Interface"},{"name":"ICollidee","href":"Hi.Collision.ICollidee.html","topicHref":"Hi.Collision.ICollidee.html","topicUid":"Hi.Collision.ICollidee","type":"Interface"},{"name":"ICollisionArena","href":"Hi.Collision.ICollisionArena.html","topicHref":"Hi.Collision.ICollisionArena.html","topicUid":"Hi.Collision.ICollisionArena","type":"Interface"},{"name":"ICollisionIndex","href":"Hi.Collision.ICollisionIndex.html","topicHref":"Hi.Collision.ICollisionIndex.html","topicUid":"Hi.Collision.ICollisionIndex","type":"Interface"},{"name":"IGetAnchoredCollidablePairs","href":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicHref":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicUid":"Hi.Collision.IGetAnchoredCollidablePairs","type":"Interface"},{"name":"IGetCollidable","href":"Hi.Collision.IGetCollidable.html","topicHref":"Hi.Collision.IGetCollidable.html","topicUid":"Hi.Collision.IGetCollidable","type":"Interface"},{"name":"IGetCollisionIndexPairs","href":"Hi.Collision.IGetCollisionIndexPairs.html","topicHref":"Hi.Collision.IGetCollisionIndexPairs.html","topicUid":"Hi.Collision.IGetCollisionIndexPairs","type":"Interface"},{"name":"IGetDefaultCollidablePairs","href":"Hi.Collision.IGetDefaultCollidablePairs.html","topicHref":"Hi.Collision.IGetDefaultCollidablePairs.html","topicUid":"Hi.Collision.IGetDefaultCollidablePairs","type":"Interface"},{"name":"IGetTriTree","href":"Hi.Collision.IGetTriTree.html","topicHref":"Hi.Collision.IGetTriTree.html","topicUid":"Hi.Collision.IGetTriTree","type":"Interface"},{"name":"MechCollisionResult","href":"Hi.Collision.MechCollisionResult.html","topicHref":"Hi.Collision.MechCollisionResult.html","topicUid":"Hi.Collision.MechCollisionResult","type":"Class"},{"name":"MechCollisionUtil","href":"Hi.Collision.MechCollisionUtil.html","topicHref":"Hi.Collision.MechCollisionUtil.html","topicUid":"Hi.Collision.MechCollisionUtil","type":"Class"},{"name":"TriTree","href":"Hi.Collision.TriTree.html","topicHref":"Hi.Collision.TriTree.html","topicUid":"Hi.Collision.TriTree","type":"Class"}]},{"name":"Hi.Collisions","href":"Hi.Collisions.html","topicHref":"Hi.Collisions.html","topicUid":"Hi.Collisions","type":"Namespace","items":[{"name":"AnchoredCollidabled","href":"Hi.Collisions.AnchoredCollidabled.html","topicHref":"Hi.Collisions.AnchoredCollidabled.html","topicUid":"Hi.Collisions.AnchoredCollidabled","type":"Class"},{"name":"IAnchoredCollidabled","href":"Hi.Collisions.IAnchoredCollidabled.html","topicHref":"Hi.Collisions.IAnchoredCollidabled.html","topicUid":"Hi.Collisions.IAnchoredCollidabled","type":"Interface"}]},{"name":"Hi.Coloring","href":"Hi.Coloring.html","topicHref":"Hi.Coloring.html","topicUid":"Hi.Coloring","type":"Namespace","items":[{"name":"ColorUtil","href":"Hi.Coloring.ColorUtil.html","topicHref":"Hi.Coloring.ColorUtil.html","topicUid":"Hi.Coloring.ColorUtil","type":"Class"},{"name":"DictionaryColorGuide","href":"Hi.Coloring.DictionaryColorGuide.html","topicHref":"Hi.Coloring.DictionaryColorGuide.html","topicUid":"Hi.Coloring.DictionaryColorGuide","type":"Class"},{"name":"DiscreteQuantityColorGuide","href":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicHref":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicUid":"Hi.Coloring.DiscreteQuantityColorGuide","type":"Class"},{"name":"FilteredColorGuide","href":"Hi.Coloring.FilteredColorGuide.html","topicHref":"Hi.Coloring.FilteredColorGuide.html","topicUid":"Hi.Coloring.FilteredColorGuide","type":"Class"},{"name":"FuncRangeColorGuide","href":"Hi.Coloring.FuncRangeColorGuide.html","topicHref":"Hi.Coloring.FuncRangeColorGuide.html","topicUid":"Hi.Coloring.FuncRangeColorGuide","type":"Class"},{"name":"IColorGuide","href":"Hi.Coloring.IColorGuide.html","topicHref":"Hi.Coloring.IColorGuide.html","topicUid":"Hi.Coloring.IColorGuide","type":"Interface"},{"name":"IColorGuideProperty","href":"Hi.Coloring.IColorGuideProperty.html","topicHref":"Hi.Coloring.IColorGuideProperty.html","topicUid":"Hi.Coloring.IColorGuideProperty","type":"Interface"},{"name":"IGetColorGuide","href":"Hi.Coloring.IGetColorGuide.html","topicHref":"Hi.Coloring.IGetColorGuide.html","topicUid":"Hi.Coloring.IGetColorGuide","type":"Interface"},{"name":"IGetRangeColorRule","href":"Hi.Coloring.IGetRangeColorRule.html","topicHref":"Hi.Coloring.IGetRangeColorRule.html","topicUid":"Hi.Coloring.IGetRangeColorRule","type":"Interface"},{"name":"IGetRgb","href":"Hi.Coloring.IGetRgb.html","topicHref":"Hi.Coloring.IGetRgb.html","topicUid":"Hi.Coloring.IGetRgb","type":"Interface"},{"name":"IGetRgbWithPriority","href":"Hi.Coloring.IGetRgbWithPriority.html","topicHref":"Hi.Coloring.IGetRgbWithPriority.html","topicUid":"Hi.Coloring.IGetRgbWithPriority","type":"Interface"},{"name":"PlainColorGuide","href":"Hi.Coloring.PlainColorGuide.html","topicHref":"Hi.Coloring.PlainColorGuide.html","topicUid":"Hi.Coloring.PlainColorGuide","type":"Class"},{"name":"QuantityColorGuide","href":"Hi.Coloring.QuantityColorGuide.html","topicHref":"Hi.Coloring.QuantityColorGuide.html","topicUid":"Hi.Coloring.QuantityColorGuide","type":"Class"},{"name":"RangeColorRule","href":"Hi.Coloring.RangeColorRule.html","topicHref":"Hi.Coloring.RangeColorRule.html","topicUid":"Hi.Coloring.RangeColorRule","type":"Class"},{"name":"RatioRgbFuncEnum","href":"Hi.Coloring.RatioRgbFuncEnum.html","topicHref":"Hi.Coloring.RatioRgbFuncEnum.html","topicUid":"Hi.Coloring.RatioRgbFuncEnum","type":"Enum"},{"name":"RgbSeed","href":"Hi.Coloring.RgbSeed.html","topicHref":"Hi.Coloring.RgbSeed.html","topicUid":"Hi.Coloring.RgbSeed","type":"Class"}]},{"name":"Hi.Common","href":"Hi.Common.html","topicHref":"Hi.Common.html","topicUid":"Hi.Common","type":"Namespace","items":[{"name":"BinIoUtil","href":"Hi.Common.BinIoUtil.html","topicHref":"Hi.Common.BinIoUtil.html","topicUid":"Hi.Common.BinIoUtil","type":"Class"},{"name":"BitUtil","href":"Hi.Common.BitUtil.html","topicHref":"Hi.Common.BitUtil.html","topicUid":"Hi.Common.BitUtil","type":"Class"},{"name":"BlockingTimer","href":"Hi.Common.BlockingTimer.html","topicHref":"Hi.Common.BlockingTimer.html","topicUid":"Hi.Common.BlockingTimer","type":"Class"},{"name":"BytesUtil","href":"Hi.Common.BytesUtil.html","topicHref":"Hi.Common.BytesUtil.html","topicUid":"Hi.Common.BytesUtil","type":"Class"},{"name":"ConcurrentTimeCounter","href":"Hi.Common.ConcurrentTimeCounter.html","topicHref":"Hi.Common.ConcurrentTimeCounter.html","topicUid":"Hi.Common.ConcurrentTimeCounter","type":"Class"},{"name":"ConsoleUtil","href":"Hi.Common.ConsoleUtil.html","topicHref":"Hi.Common.ConsoleUtil.html","topicUid":"Hi.Common.ConsoleUtil","type":"Class"},{"name":"CppLogUtil","href":"Hi.Common.CppLogUtil.html","topicHref":"Hi.Common.CppLogUtil.html","topicUid":"Hi.Common.CppLogUtil","type":"Class"},{"name":"CppLogUtil.LogDelegate","href":"Hi.Common.CppLogUtil.LogDelegate.html","topicHref":"Hi.Common.CppLogUtil.LogDelegate.html","topicUid":"Hi.Common.CppLogUtil.LogDelegate","type":"Delegate"},{"name":"CultureUtil","href":"Hi.Common.CultureUtil.html","topicHref":"Hi.Common.CultureUtil.html","topicUid":"Hi.Common.CultureUtil","type":"Class"},{"name":"DuplicateUtil","href":"Hi.Common.DuplicateUtil.html","topicHref":"Hi.Common.DuplicateUtil.html","topicUid":"Hi.Common.DuplicateUtil","type":"Class"},{"name":"EnumUtil","href":"Hi.Common.EnumUtil.html","topicHref":"Hi.Common.EnumUtil.html","topicUid":"Hi.Common.EnumUtil","type":"Class"},{"name":"EnumerablePlayer","href":"Hi.Common.EnumerablePlayer.html","topicHref":"Hi.Common.EnumerablePlayer.html","topicUid":"Hi.Common.EnumerablePlayer","type":"Class"},{"name":"IAbstractNote","href":"Hi.Common.IAbstractNote.html","topicHref":"Hi.Common.IAbstractNote.html","topicUid":"Hi.Common.IAbstractNote","type":"Interface"},{"name":"IBinaryIo","href":"Hi.Common.IBinaryIo.html","topicHref":"Hi.Common.IBinaryIo.html","topicUid":"Hi.Common.IBinaryIo","type":"Interface"},{"name":"IClearCache","href":"Hi.Common.IClearCache.html","topicHref":"Hi.Common.IClearCache.html","topicUid":"Hi.Common.IClearCache","type":"Interface"},{"name":"IDuplicate","href":"Hi.Common.IDuplicate.html","topicHref":"Hi.Common.IDuplicate.html","topicUid":"Hi.Common.IDuplicate","type":"Interface"},{"name":"IGetQuantityByKey","href":"Hi.Common.IGetQuantityByKey.html","topicHref":"Hi.Common.IGetQuantityByKey.html","topicUid":"Hi.Common.IGetQuantityByKey","type":"Interface"},{"name":"IGetSelectionName","href":"Hi.Common.IGetSelectionName.html","topicHref":"Hi.Common.IGetSelectionName.html","topicUid":"Hi.Common.IGetSelectionName","type":"Interface"},{"name":"INameNote","href":"Hi.Common.INameNote.html","topicHref":"Hi.Common.INameNote.html","topicUid":"Hi.Common.INameNote","type":"Interface"},{"name":"IPreferredFileName","href":"Hi.Common.IPreferredFileName.html","topicHref":"Hi.Common.IPreferredFileName.html","topicUid":"Hi.Common.IPreferredFileName","type":"Interface"},{"name":"IProgressFraction","href":"Hi.Common.IProgressFraction.html","topicHref":"Hi.Common.IProgressFraction.html","topicUid":"Hi.Common.IProgressFraction","type":"Interface"},{"name":"ISourceFile","href":"Hi.Common.ISourceFile.html","topicHref":"Hi.Common.ISourceFile.html","topicUid":"Hi.Common.ISourceFile","type":"Interface"},{"name":"IToPresentDto","href":"Hi.Common.IToPresentDto.html","topicHref":"Hi.Common.IToPresentDto.html","topicUid":"Hi.Common.IToPresentDto","type":"Interface"},{"name":"IUpdateByContent","href":"Hi.Common.IUpdateByContent.html","topicHref":"Hi.Common.IUpdateByContent.html","topicUid":"Hi.Common.IUpdateByContent","type":"Interface"},{"name":"IUriGetter","href":"Hi.Common.IUriGetter.html","topicHref":"Hi.Common.IUriGetter.html","topicUid":"Hi.Common.IUriGetter","type":"Interface"},{"name":"IWriteBin","href":"Hi.Common.IWriteBin.html","topicHref":"Hi.Common.IWriteBin.html","topicUid":"Hi.Common.IWriteBin","type":"Interface"},{"name":"IndexSegment","href":"Hi.Common.IndexSegment.html","topicHref":"Hi.Common.IndexSegment.html","topicUid":"Hi.Common.IndexSegment","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter`1","type":"Class"},{"name":"InternalException","href":"Hi.Common.InternalException.html","topicHref":"Hi.Common.InternalException.html","topicUid":"Hi.Common.InternalException","type":"Class"},{"name":"InvokeUtil","href":"Hi.Common.InvokeUtil.html","topicHref":"Hi.Common.InvokeUtil.html","topicUid":"Hi.Common.InvokeUtil","type":"Class"},{"name":"JsonUtil","href":"Hi.Common.JsonUtil.html","topicHref":"Hi.Common.JsonUtil.html","topicUid":"Hi.Common.JsonUtil","type":"Class"},{"name":"LooseRunner","href":"Hi.Common.LooseRunner.html","topicHref":"Hi.Common.LooseRunner.html","topicUid":"Hi.Common.LooseRunner","type":"Class"},{"name":"LooseRunner.MergedCancellationTokenRun","href":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicHref":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicUid":"Hi.Common.LooseRunner.MergedCancellationTokenRun","type":"Delegate"},{"name":"ManualUtil","href":"Hi.Common.ManualUtil.html","topicHref":"Hi.Common.ManualUtil.html","topicUid":"Hi.Common.ManualUtil","type":"Class"},{"name":"MaskUtil","href":"Hi.Common.MaskUtil.html","topicHref":"Hi.Common.MaskUtil.html","topicUid":"Hi.Common.MaskUtil","type":"Class"},{"name":"NameUtil","href":"Hi.Common.NameUtil.html","topicHref":"Hi.Common.NameUtil.html","topicUid":"Hi.Common.NameUtil","type":"Class"},{"name":"PacePlayee","href":"Hi.Common.PacePlayee.html","topicHref":"Hi.Common.PacePlayee.html","topicUid":"Hi.Common.PacePlayee","type":"Class"},{"name":"PacePlayer","href":"Hi.Common.PacePlayer.html","topicHref":"Hi.Common.PacePlayer.html","topicUid":"Hi.Common.PacePlayer","type":"Class"},{"name":"Pair","href":"Hi.Common.Pair-2.html","topicHref":"Hi.Common.Pair-2.html","topicUid":"Hi.Common.Pair`2","type":"Class"},{"name":"ProgressFraction","href":"Hi.Common.ProgressFraction.html","topicHref":"Hi.Common.ProgressFraction.html","topicUid":"Hi.Common.ProgressFraction","type":"Class"},{"name":"Range","href":"Hi.Common.Range-1.html","topicHref":"Hi.Common.Range-1.html","topicUid":"Hi.Common.Range`1","type":"Class"},{"name":"ResourceUtil","href":"Hi.Common.ResourceUtil.html","topicHref":"Hi.Common.ResourceUtil.html","topicUid":"Hi.Common.ResourceUtil","type":"Class"},{"name":"RoutineBlocker","href":"Hi.Common.RoutineBlocker.html","topicHref":"Hi.Common.RoutineBlocker.html","topicUid":"Hi.Common.RoutineBlocker","type":"Class"},{"name":"SearchResult","href":"Hi.Common.SearchResult.html","topicHref":"Hi.Common.SearchResult.html","topicUid":"Hi.Common.SearchResult","type":"Enum"},{"name":"SeqPairUtil","href":"Hi.Common.SeqPairUtil.html","topicHref":"Hi.Common.SeqPairUtil.html","topicUid":"Hi.Common.SeqPairUtil","type":"Class"},{"name":"SeqPair","href":"Hi.Common.SeqPair-1.html","topicHref":"Hi.Common.SeqPair-1.html","topicUid":"Hi.Common.SeqPair`1","type":"Class"},{"name":"ServerFileExplorerConfig","href":"Hi.Common.ServerFileExplorerConfig.html","topicHref":"Hi.Common.ServerFileExplorerConfig.html","topicUid":"Hi.Common.ServerFileExplorerConfig","type":"Class"},{"name":"StringLocalizer","href":"Hi.Common.StringLocalizer.html","topicHref":"Hi.Common.StringLocalizer.html","topicUid":"Hi.Common.StringLocalizer","type":"Class"},{"name":"StringUtil","href":"Hi.Common.StringUtil.html","topicHref":"Hi.Common.StringUtil.html","topicUid":"Hi.Common.StringUtil","type":"Class"},{"name":"TaskUtil","href":"Hi.Common.TaskUtil.html","topicHref":"Hi.Common.TaskUtil.html","topicUid":"Hi.Common.TaskUtil","type":"Class"},{"name":"TimeCounter","href":"Hi.Common.TimeCounter.html","topicHref":"Hi.Common.TimeCounter.html","topicUid":"Hi.Common.TimeCounter","type":"Class"}]},{"name":"Hi.Common.Collections","href":"Hi.Common.Collections.html","topicHref":"Hi.Common.Collections.html","topicUid":"Hi.Common.Collections","type":"Namespace","items":[{"name":"DictionaryUtil","href":"Hi.Common.Collections.DictionaryUtil.html","topicHref":"Hi.Common.Collections.DictionaryUtil.html","topicUid":"Hi.Common.Collections.DictionaryUtil","type":"Class"},{"name":"EnumerableUtil","href":"Hi.Common.Collections.EnumerableUtil.html","topicHref":"Hi.Common.Collections.EnumerableUtil.html","topicUid":"Hi.Common.Collections.EnumerableUtil","type":"Class"},{"name":"FixedSizeConcurrentLinkedListUtil","href":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicHref":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicUid":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil","type":"Class"},{"name":"LazyLinkedListNode","href":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicHref":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicUid":"Hi.Common.Collections.LazyLinkedListNode`1","type":"Class"},{"name":"LazyLinkedList","href":"Hi.Common.Collections.LazyLinkedList-1.html","topicHref":"Hi.Common.Collections.LazyLinkedList-1.html","topicUid":"Hi.Common.Collections.LazyLinkedList`1","type":"Class"},{"name":"LinkedListUtil","href":"Hi.Common.Collections.LinkedListUtil.html","topicHref":"Hi.Common.Collections.LinkedListUtil.html","topicUid":"Hi.Common.Collections.LinkedListUtil","type":"Class"},{"name":"ListIndexBasedEnumerable","href":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedEnumerable`1","type":"Class"},{"name":"ListIndexBasedIEnumerator","href":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedIEnumerator`1","type":"Class"},{"name":"ListUtil","href":"Hi.Common.Collections.ListUtil.html","topicHref":"Hi.Common.Collections.ListUtil.html","topicUid":"Hi.Common.Collections.ListUtil","type":"Class"},{"name":"ListUtil.OuterPolationMode","href":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicHref":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicUid":"Hi.Common.Collections.ListUtil.OuterPolationMode","type":"Enum"},{"name":"SearchTargetMode","href":"Hi.Common.Collections.SearchTargetMode.html","topicHref":"Hi.Common.Collections.SearchTargetMode.html","topicUid":"Hi.Common.Collections.SearchTargetMode","type":"Enum"},{"name":"SeekDirection","href":"Hi.Common.Collections.SeekDirection.html","topicHref":"Hi.Common.Collections.SeekDirection.html","topicUid":"Hi.Common.Collections.SeekDirection","type":"Enum"},{"name":"SortedListUtil","href":"Hi.Common.Collections.SortedListUtil.html","topicHref":"Hi.Common.Collections.SortedListUtil.html","topicUid":"Hi.Common.Collections.SortedListUtil","type":"Class"},{"name":"SubList","href":"Hi.Common.Collections.SubList-1.html","topicHref":"Hi.Common.Collections.SubList-1.html","topicUid":"Hi.Common.Collections.SubList`1","type":"Class"},{"name":"SynList","href":"Hi.Common.Collections.SynList-1.html","topicHref":"Hi.Common.Collections.SynList-1.html","topicUid":"Hi.Common.Collections.SynList`1","type":"Class"}]},{"name":"Hi.Common.CsvUtils","href":"Hi.Common.CsvUtils.html","topicHref":"Hi.Common.CsvUtils.html","topicUid":"Hi.Common.CsvUtils","type":"Namespace","items":[{"name":"CsvInputKit","href":"Hi.Common.CsvUtils.CsvInputKit.html","topicHref":"Hi.Common.CsvUtils.CsvInputKit.html","topicUid":"Hi.Common.CsvUtils.CsvInputKit","type":"Class"},{"name":"CsvOutputKit","href":"Hi.Common.CsvUtils.CsvOutputKit.html","topicHref":"Hi.Common.CsvUtils.CsvOutputKit.html","topicUid":"Hi.Common.CsvUtils.CsvOutputKit","type":"Class"},{"name":"CsvUtil","href":"Hi.Common.CsvUtils.CsvUtil.html","topicHref":"Hi.Common.CsvUtils.CsvUtil.html","topicUid":"Hi.Common.CsvUtils.CsvUtil","type":"Class"},{"name":"ICsvRowIo","href":"Hi.Common.CsvUtils.ICsvRowIo.html","topicHref":"Hi.Common.CsvUtils.ICsvRowIo.html","topicUid":"Hi.Common.CsvUtils.ICsvRowIo","type":"Interface"},{"name":"IGetCsvDictionary","href":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicHref":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicUid":"Hi.Common.CsvUtils.IGetCsvDictionary","type":"Interface"}]},{"name":"Hi.Common.FileLines","href":"Hi.Common.FileLines.html","topicHref":"Hi.Common.FileLines.html","topicUid":"Hi.Common.FileLines","type":"Namespace","items":[{"name":"FileBeginEventArgs","href":"Hi.Common.FileLines.FileBeginEventArgs.html","topicHref":"Hi.Common.FileLines.FileBeginEventArgs.html","topicUid":"Hi.Common.FileLines.FileBeginEventArgs","type":"Class"},{"name":"FileEndEventArgs","href":"Hi.Common.FileLines.FileEndEventArgs.html","topicHref":"Hi.Common.FileLines.FileEndEventArgs.html","topicUid":"Hi.Common.FileLines.FileEndEventArgs","type":"Class"},{"name":"FileLineCharIndex","href":"Hi.Common.FileLines.FileLineCharIndex.html","topicHref":"Hi.Common.FileLines.FileLineCharIndex.html","topicUid":"Hi.Common.FileLines.FileLineCharIndex","type":"Class"},{"name":"FileLineCharIndexSegment","href":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicHref":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicUid":"Hi.Common.FileLines.FileLineCharIndexSegment","type":"Class"},{"name":"FileLineIndex","href":"Hi.Common.FileLines.FileLineIndex.html","topicHref":"Hi.Common.FileLines.FileLineIndex.html","topicUid":"Hi.Common.FileLines.FileLineIndex","type":"Class"},{"name":"FileLineUtil","href":"Hi.Common.FileLines.FileLineUtil.html","topicHref":"Hi.Common.FileLines.FileLineUtil.html","topicUid":"Hi.Common.FileLines.FileLineUtil","type":"Class"},{"name":"FileUtil","href":"Hi.Common.FileLines.FileUtil.html","topicHref":"Hi.Common.FileLines.FileUtil.html","topicUid":"Hi.Common.FileLines.FileUtil","type":"Class"},{"name":"IFileChangedEventSupport","href":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicHref":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicUid":"Hi.Common.FileLines.IFileChangedEventSupport","type":"Interface"},{"name":"IFileLine","href":"Hi.Common.FileLines.IFileLine.html","topicHref":"Hi.Common.FileLines.IFileLine.html","topicUid":"Hi.Common.FileLines.IFileLine","type":"Interface"},{"name":"IFileLineCharIndex","href":"Hi.Common.FileLines.IFileLineCharIndex.html","topicHref":"Hi.Common.FileLines.IFileLineCharIndex.html","topicUid":"Hi.Common.FileLines.IFileLineCharIndex","type":"Interface"},{"name":"IFileLineIndex","href":"Hi.Common.FileLines.IFileLineIndex.html","topicHref":"Hi.Common.FileLines.IFileLineIndex.html","topicUid":"Hi.Common.FileLines.IFileLineIndex","type":"Interface"},{"name":"IGetFileLineIndex","href":"Hi.Common.FileLines.IGetFileLineIndex.html","topicHref":"Hi.Common.FileLines.IGetFileLineIndex.html","topicUid":"Hi.Common.FileLines.IGetFileLineIndex","type":"Interface"},{"name":"IGetIndexedFileLine","href":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IGetIndexedFileLine","type":"Interface"},{"name":"IIndexedFileLine","href":"Hi.Common.FileLines.IIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IIndexedFileLine","type":"Interface"},{"name":"ILineChangedEventSupport","href":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicHref":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicUid":"Hi.Common.FileLines.ILineChangedEventSupport","type":"Interface"},{"name":"IndexedFile","href":"Hi.Common.FileLines.IndexedFile.html","topicHref":"Hi.Common.FileLines.IndexedFile.html","topicUid":"Hi.Common.FileLines.IndexedFile","type":"Class"},{"name":"IndexedFileLine","href":"Hi.Common.FileLines.IndexedFileLine.html","topicHref":"Hi.Common.FileLines.IndexedFileLine.html","topicUid":"Hi.Common.FileLines.IndexedFileLine","type":"Class"},{"name":"IndexedFileLineChar","href":"Hi.Common.FileLines.IndexedFileLineChar.html","topicHref":"Hi.Common.FileLines.IndexedFileLineChar.html","topicUid":"Hi.Common.FileLines.IndexedFileLineChar","type":"Class"},{"name":"LineBeginEventArgs","href":"Hi.Common.FileLines.LineBeginEventArgs.html","topicHref":"Hi.Common.FileLines.LineBeginEventArgs.html","topicUid":"Hi.Common.FileLines.LineBeginEventArgs","type":"Class"},{"name":"LineEndEventArgs","href":"Hi.Common.FileLines.LineEndEventArgs.html","topicHref":"Hi.Common.FileLines.LineEndEventArgs.html","topicUid":"Hi.Common.FileLines.LineEndEventArgs","type":"Class"}]},{"name":"Hi.Common.Messages","href":"Hi.Common.Messages.html","topicHref":"Hi.Common.Messages.html","topicUid":"Hi.Common.Messages","type":"Namespace","items":[{"name":"ActionProgress","href":"Hi.Common.Messages.ActionProgress-1.html","topicHref":"Hi.Common.Messages.ActionProgress-1.html","topicUid":"Hi.Common.Messages.ActionProgress`1","type":"Class"},{"name":"BootstrapTheme","href":"Hi.Common.Messages.BootstrapTheme.html","topicHref":"Hi.Common.Messages.BootstrapTheme.html","topicUid":"Hi.Common.Messages.BootstrapTheme","type":"Enum"},{"name":"DebugUtil","href":"Hi.Common.Messages.DebugUtil.html","topicHref":"Hi.Common.Messages.DebugUtil.html","topicUid":"Hi.Common.Messages.DebugUtil","type":"Class"},{"name":"ExceptionUtil","href":"Hi.Common.Messages.ExceptionUtil.html","topicHref":"Hi.Common.Messages.ExceptionUtil.html","topicUid":"Hi.Common.Messages.ExceptionUtil","type":"Class"},{"name":"MessageBoardUtil","href":"Hi.Common.Messages.MessageBoardUtil.html","topicHref":"Hi.Common.Messages.MessageBoardUtil.html","topicUid":"Hi.Common.Messages.MessageBoardUtil","type":"Class"},{"name":"MessageFlag","href":"Hi.Common.Messages.MessageFlag.html","topicHref":"Hi.Common.Messages.MessageFlag.html","topicUid":"Hi.Common.Messages.MessageFlag","type":"Enum"},{"name":"MultiTagMessage","href":"Hi.Common.Messages.MultiTagMessage.html","topicHref":"Hi.Common.Messages.MultiTagMessage.html","topicUid":"Hi.Common.Messages.MultiTagMessage","type":"Class"},{"name":"MultiTagMessageUtil","href":"Hi.Common.Messages.MultiTagMessageUtil.html","topicHref":"Hi.Common.Messages.MultiTagMessageUtil.html","topicUid":"Hi.Common.Messages.MultiTagMessageUtil","type":"Class"},{"name":"ShowMessageBoardDelegate","href":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicHref":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicUid":"Hi.Common.Messages.ShowMessageBoardDelegate","type":"Delegate"}]},{"name":"Hi.Common.MinMaxUtils","href":"Hi.Common.MinMaxUtils.html","topicHref":"Hi.Common.MinMaxUtils.html","topicUid":"Hi.Common.MinMaxUtils","type":"Namespace","items":[{"name":"IndexedMinMaxPos","href":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicHref":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicUid":"Hi.Common.MinMaxUtils.IndexedMinMaxPos`2","type":"Class"},{"name":"MinMaxUtil","href":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicHref":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicUid":"Hi.Common.MinMaxUtils.MinMaxUtil","type":"Class"}]},{"name":"Hi.Common.NativeProgresses","href":"Hi.Common.NativeProgresses.html","topicHref":"Hi.Common.NativeProgresses.html","topicUid":"Hi.Common.NativeProgresses","type":"Namespace","items":[{"name":"NativeProgressFraction","href":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicHref":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicUid":"Hi.Common.NativeProgresses.NativeProgressFraction","type":"Class"},{"name":"progress_monitor_t","href":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicHref":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicUid":"Hi.Common.NativeProgresses.progress_monitor_t","type":"Struct"},{"name":"report_progress_func_t","href":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicHref":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicUid":"Hi.Common.NativeProgresses.report_progress_func_t","type":"Delegate"}]},{"name":"Hi.Common.ParallelBulkUtils","href":"Hi.Common.ParallelBulkUtils.html","topicHref":"Hi.Common.ParallelBulkUtils.html","topicUid":"Hi.Common.ParallelBulkUtils","type":"Namespace","items":[{"name":"ParallelBulkReader","href":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkReader`1","type":"Class"},{"name":"ParallelBulkWriter","href":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter`1","type":"Class"},{"name":"ReadBulkDelegate","href":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate`1","type":"Delegate"},{"name":"SequentialBulkReader","href":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.SequentialBulkReader`1","type":"Class"}]},{"name":"Hi.Common.PathUtils","href":"Hi.Common.PathUtils.html","topicHref":"Hi.Common.PathUtils.html","topicUid":"Hi.Common.PathUtils","type":"Namespace","items":[{"name":"ExtendedNamedPath","href":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicHref":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicUid":"Hi.Common.PathUtils.ExtendedNamedPath","type":"Class"},{"name":"HttpUtil","href":"Hi.Common.PathUtils.HttpUtil.html","topicHref":"Hi.Common.PathUtils.HttpUtil.html","topicUid":"Hi.Common.PathUtils.HttpUtil","type":"Class"},{"name":"Lang","href":"Hi.Common.PathUtils.Lang.html","topicHref":"Hi.Common.PathUtils.Lang.html","topicUid":"Hi.Common.PathUtils.Lang","type":"Class"},{"name":"NamedPath","href":"Hi.Common.PathUtils.NamedPath.html","topicHref":"Hi.Common.PathUtils.NamedPath.html","topicUid":"Hi.Common.PathUtils.NamedPath","type":"Class"},{"name":"PathUtil","href":"Hi.Common.PathUtils.PathUtil.html","topicHref":"Hi.Common.PathUtils.PathUtil.html","topicUid":"Hi.Common.PathUtils.PathUtil","type":"Class"}]},{"name":"Hi.Common.QueueCacheUtils","href":"Hi.Common.QueueCacheUtils.html","topicHref":"Hi.Common.QueueCacheUtils.html","topicUid":"Hi.Common.QueueCacheUtils","type":"Namespace","items":[{"name":"QueueCacherHost","href":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacherHost`1","type":"Class"},{"name":"QueueCacher","href":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacher`1","type":"Class"}]},{"name":"Hi.Common.XmlUtils","href":"Hi.Common.XmlUtils.html","topicHref":"Hi.Common.XmlUtils.html","topicUid":"Hi.Common.XmlUtils","type":"Namespace","items":[{"name":"FileRefSource","href":"Hi.Common.XmlUtils.FileRefSource-1.html","topicHref":"Hi.Common.XmlUtils.FileRefSource-1.html","topicUid":"Hi.Common.XmlUtils.FileRefSource`1","type":"Class"},{"name":"IMakeXmlSource","href":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicHref":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicUid":"Hi.Common.XmlUtils.IMakeXmlSource","type":"Interface"},{"name":"IToXElement","href":"Hi.Common.XmlUtils.IToXElement.html","topicHref":"Hi.Common.XmlUtils.IToXElement.html","topicUid":"Hi.Common.XmlUtils.IToXElement","type":"Interface"},{"name":"ProjectApiVersion","href":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicHref":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicUid":"Hi.Common.XmlUtils.ProjectApiVersion","type":"Class"},{"name":"SetFileDelegate","href":"Hi.Common.XmlUtils.SetFileDelegate.html","topicHref":"Hi.Common.XmlUtils.SetFileDelegate.html","topicUid":"Hi.Common.XmlUtils.SetFileDelegate","type":"Delegate"},{"name":"XFactory","href":"Hi.Common.XmlUtils.XFactory.html","topicHref":"Hi.Common.XmlUtils.XFactory.html","topicUid":"Hi.Common.XmlUtils.XFactory","type":"Class"},{"name":"XFactory.GenByXElementDelegate","href":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.GenByXElementDelegate","type":"Delegate"},{"name":"XFactory.XmlExceptionDelegate","href":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate","type":"Delegate"},{"name":"XmlUtil","href":"Hi.Common.XmlUtils.XmlUtil.html","topicHref":"Hi.Common.XmlUtils.XmlUtil.html","topicUid":"Hi.Common.XmlUtils.XmlUtil","type":"Class"}]},{"name":"Hi.CutterLocations","href":"Hi.CutterLocations.html","topicHref":"Hi.CutterLocations.html","topicUid":"Hi.CutterLocations","type":"Namespace","items":[{"name":"IGetProgramCl","href":"Hi.CutterLocations.IGetProgramCl.html","topicHref":"Hi.CutterLocations.IGetProgramCl.html","topicUid":"Hi.CutterLocations.IGetProgramCl","type":"Interface"},{"name":"SimpleCl","href":"Hi.CutterLocations.SimpleCl.html","topicHref":"Hi.CutterLocations.SimpleCl.html","topicUid":"Hi.CutterLocations.SimpleCl","type":"Class"}]},{"name":"Hi.CutterLocations.ClPath","href":"Hi.CutterLocations.ClPath.html","topicHref":"Hi.CutterLocations.ClPath.html","topicUid":"Hi.CutterLocations.ClPath","type":"Namespace","items":[{"name":"ClCircleArc","href":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicHref":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicUid":"Hi.CutterLocations.ClPath.ClCircleArc","type":"Class"},{"name":"ClLinear","href":"Hi.CutterLocations.ClPath.ClLinear.html","topicHref":"Hi.CutterLocations.ClPath.ClLinear.html","topicUid":"Hi.CutterLocations.ClPath.ClLinear","type":"Class"},{"name":"IClPath","href":"Hi.CutterLocations.ClPath.IClPath.html","topicHref":"Hi.CutterLocations.ClPath.IClPath.html","topicUid":"Hi.CutterLocations.ClPath.IClPath","type":"Interface"}]},{"name":"Hi.CutterLocations.ClStrips","href":"Hi.CutterLocations.ClStrips.html","topicHref":"Hi.CutterLocations.ClStrips.html","topicUid":"Hi.CutterLocations.ClStrips","type":"Namespace","items":[{"name":"ClStrip","href":"Hi.CutterLocations.ClStrips.ClStrip.html","topicHref":"Hi.CutterLocations.ClStrips.ClStrip.html","topicUid":"Hi.CutterLocations.ClStrips.ClStrip","type":"Class"},{"name":"ClStripPos","href":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicHref":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicUid":"Hi.CutterLocations.ClStrips.ClStripPos","type":"Class"},{"name":"RgbFunc","href":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicHref":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicUid":"Hi.CutterLocations.ClStrips.RgbFunc","type":"Delegate"}]},{"name":"Hi.Disp","href":"Hi.Disp.html","topicHref":"Hi.Disp.html","topicUid":"Hi.Disp","type":"Namespace","items":[{"name":"Bind","href":"Hi.Disp.Bind.html","topicHref":"Hi.Disp.Bind.html","topicUid":"Hi.Disp.Bind","type":"Class"},{"name":"Box3dDispUtil","href":"Hi.Disp.Box3dDispUtil.html","topicHref":"Hi.Disp.Box3dDispUtil.html","topicUid":"Hi.Disp.Box3dDispUtil","type":"Class"},{"name":"Box3dDispUtil.BoxableExpandToBox3dDel","href":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicHref":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicUid":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel","type":"Delegate"},{"name":"DelegateFuncDisplayee","href":"Hi.Disp.DelegateFuncDisplayee.html","topicHref":"Hi.Disp.DelegateFuncDisplayee.html","topicUid":"Hi.Disp.DelegateFuncDisplayee","type":"Class"},{"name":"DispEngine","href":"Hi.Disp.DispEngine.html","topicHref":"Hi.Disp.DispEngine.html","topicUid":"Hi.Disp.DispEngine","type":"Class"},{"name":"DispEngine.ImageRequestedDelegate","href":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicHref":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicUid":"Hi.Disp.DispEngine.ImageRequestedDelegate","type":"Delegate"},{"name":"DispEngineConfig","href":"Hi.Disp.DispEngineConfig.html","topicHref":"Hi.Disp.DispEngineConfig.html","topicUid":"Hi.Disp.DispEngineConfig","type":"Class"},{"name":"DispFrameUtil","href":"Hi.Disp.DispFrameUtil.html","topicHref":"Hi.Disp.DispFrameUtil.html","topicUid":"Hi.Disp.DispFrameUtil","type":"Class"},{"name":"DispList","href":"Hi.Disp.DispList.html","topicHref":"Hi.Disp.DispList.html","topicUid":"Hi.Disp.DispList","type":"Class"},{"name":"DispUtil","href":"Hi.Disp.DispUtil.html","topicHref":"Hi.Disp.DispUtil.html","topicUid":"Hi.Disp.DispUtil","type":"Class"},{"name":"Drawing","href":"Hi.Disp.Drawing.html","topicHref":"Hi.Disp.Drawing.html","topicUid":"Hi.Disp.Drawing","type":"Class"},{"name":"FuncDisplayee","href":"Hi.Disp.FuncDisplayee.html","topicHref":"Hi.Disp.FuncDisplayee.html","topicUid":"Hi.Disp.FuncDisplayee","type":"Class"},{"name":"GL","href":"Hi.Disp.GL.html","topicHref":"Hi.Disp.GL.html","topicUid":"Hi.Disp.GL","type":"Class"},{"name":"IDisplayee","href":"Hi.Disp.IDisplayee.html","topicHref":"Hi.Disp.IDisplayee.html","topicUid":"Hi.Disp.IDisplayee","type":"Interface"},{"name":"IGetDispEngine","href":"Hi.Disp.IGetDispEngine.html","topicHref":"Hi.Disp.IGetDispEngine.html","topicUid":"Hi.Disp.IGetDispEngine","type":"Interface"},{"name":"IGetPickable","href":"Hi.Disp.IGetPickable.html","topicHref":"Hi.Disp.IGetPickable.html","topicUid":"Hi.Disp.IGetPickable","type":"Interface"},{"name":"IGlContextDirver","href":"Hi.Disp.IGlContextDirver.html","topicHref":"Hi.Disp.IGlContextDirver.html","topicUid":"Hi.Disp.IGlContextDirver","type":"Interface"},{"name":"MatStack","href":"Hi.Disp.MatStack.html","topicHref":"Hi.Disp.MatStack.html","topicUid":"Hi.Disp.MatStack","type":"Class"},{"name":"MatStack.ItemDisposable","href":"Hi.Disp.MatStack.ItemDisposable.html","topicHref":"Hi.Disp.MatStack.ItemDisposable.html","topicUid":"Hi.Disp.MatStack.ItemDisposable","type":"Class"},{"name":"MvpBoxRelation","href":"Hi.Disp.MvpBoxRelation.html","topicHref":"Hi.Disp.MvpBoxRelation.html","topicUid":"Hi.Disp.MvpBoxRelation","type":"Enum"},{"name":"Pickable","href":"Hi.Disp.Pickable.html","topicHref":"Hi.Disp.Pickable.html","topicUid":"Hi.Disp.Pickable","type":"Class"},{"name":"PopModelMat","href":"Hi.Disp.PopModelMat.html","topicHref":"Hi.Disp.PopModelMat.html","topicUid":"Hi.Disp.PopModelMat","type":"Class"},{"name":"PushModelMat","href":"Hi.Disp.PushModelMat.html","topicHref":"Hi.Disp.PushModelMat.html","topicUid":"Hi.Disp.PushModelMat","type":"Class"},{"name":"Segment3dDispUtil","href":"Hi.Disp.Segment3dDispUtil.html","topicHref":"Hi.Disp.Segment3dDispUtil.html","topicUid":"Hi.Disp.Segment3dDispUtil","type":"Class"},{"name":"ShowEventPickable","href":"Hi.Disp.ShowEventPickable.html","topicHref":"Hi.Disp.ShowEventPickable.html","topicUid":"Hi.Disp.ShowEventPickable","type":"Class"},{"name":"Stamp","href":"Hi.Disp.Stamp.html","topicHref":"Hi.Disp.Stamp.html","topicUid":"Hi.Disp.Stamp","type":"Enum"},{"name":"StringDrawing","href":"Hi.Disp.StringDrawing.html","topicHref":"Hi.Disp.StringDrawing.html","topicUid":"Hi.Disp.StringDrawing","type":"Class"},{"name":"Tri3dDispUtil","href":"Hi.Disp.Tri3dDispUtil.html","topicHref":"Hi.Disp.Tri3dDispUtil.html","topicUid":"Hi.Disp.Tri3dDispUtil","type":"Class"},{"name":"Vec3dDispUtil","href":"Hi.Disp.Vec3dDispUtil.html","topicHref":"Hi.Disp.Vec3dDispUtil.html","topicUid":"Hi.Disp.Vec3dDispUtil","type":"Class"},{"name":"WrappedDisplayee","href":"Hi.Disp.WrappedDisplayee.html","topicHref":"Hi.Disp.WrappedDisplayee.html","topicUid":"Hi.Disp.WrappedDisplayee","type":"Class"}]},{"name":"Hi.Disp.Flag","href":"Hi.Disp.Flag.html","topicHref":"Hi.Disp.Flag.html","topicUid":"Hi.Disp.Flag","type":"Namespace","items":[{"name":"ColorScaleBar","href":"Hi.Disp.Flag.ColorScaleBar.html","topicHref":"Hi.Disp.Flag.ColorScaleBar.html","topicUid":"Hi.Disp.Flag.ColorScaleBar","type":"Class"},{"name":"CoordinateDrawing","href":"Hi.Disp.Flag.CoordinateDrawing.html","topicHref":"Hi.Disp.Flag.CoordinateDrawing.html","topicUid":"Hi.Disp.Flag.CoordinateDrawing","type":"Class"},{"name":"CubicalFlagDrawing","href":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicHref":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicUid":"Hi.Disp.Flag.CubicalFlagDrawing","type":"Class"},{"name":"DimensionBar","href":"Hi.Disp.Flag.DimensionBar.html","topicHref":"Hi.Disp.Flag.DimensionBar.html","topicUid":"Hi.Disp.Flag.DimensionBar","type":"Class"},{"name":"DispCoverUtil","href":"Hi.Disp.Flag.DispCoverUtil.html","topicHref":"Hi.Disp.Flag.DispCoverUtil.html","topicUid":"Hi.Disp.Flag.DispCoverUtil","type":"Class"}]},{"name":"Hi.Disp.Treat","href":"Hi.Disp.Treat.html","topicHref":"Hi.Disp.Treat.html","topicUid":"Hi.Disp.Treat","type":"Namespace","items":[{"name":"LineWidthSwap","href":"Hi.Disp.Treat.LineWidthSwap.html","topicHref":"Hi.Disp.Treat.LineWidthSwap.html","topicUid":"Hi.Disp.Treat.LineWidthSwap","type":"Class"},{"name":"LineWidthTreat","href":"Hi.Disp.Treat.LineWidthTreat.html","topicHref":"Hi.Disp.Treat.LineWidthTreat.html","topicUid":"Hi.Disp.Treat.LineWidthTreat","type":"Class"},{"name":"PointSizeSwap","href":"Hi.Disp.Treat.PointSizeSwap.html","topicHref":"Hi.Disp.Treat.PointSizeSwap.html","topicUid":"Hi.Disp.Treat.PointSizeSwap","type":"Class"},{"name":"PointSizeTreat","href":"Hi.Disp.Treat.PointSizeTreat.html","topicHref":"Hi.Disp.Treat.PointSizeTreat.html","topicUid":"Hi.Disp.Treat.PointSizeTreat","type":"Class"},{"name":"RgbSwap","href":"Hi.Disp.Treat.RgbSwap.html","topicHref":"Hi.Disp.Treat.RgbSwap.html","topicUid":"Hi.Disp.Treat.RgbSwap","type":"Class"},{"name":"RgbTreat","href":"Hi.Disp.Treat.RgbTreat.html","topicHref":"Hi.Disp.Treat.RgbTreat.html","topicUid":"Hi.Disp.Treat.RgbTreat","type":"Class"},{"name":"RgbWrapper","href":"Hi.Disp.Treat.RgbWrapper.html","topicHref":"Hi.Disp.Treat.RgbWrapper.html","topicUid":"Hi.Disp.Treat.RgbWrapper","type":"Class"},{"name":"TransformationWrapper","href":"Hi.Disp.Treat.TransformationWrapper.html","topicHref":"Hi.Disp.Treat.TransformationWrapper.html","topicUid":"Hi.Disp.Treat.TransformationWrapper","type":"Class"}]},{"name":"Hi.Fanuc","href":"Hi.Fanuc.html","topicHref":"Hi.Fanuc.html","topicUid":"Hi.Fanuc","type":"Namespace","items":[{"name":"FanucVarTable","href":"Hi.Fanuc.FanucVarTable.html","topicHref":"Hi.Fanuc.FanucVarTable.html","topicUid":"Hi.Fanuc.FanucVarTable","type":"Class"},{"name":"FanucVarValue","href":"Hi.Fanuc.FanucVarValue.html","topicHref":"Hi.Fanuc.FanucVarValue.html","topicUid":"Hi.Fanuc.FanucVarValue","type":"Struct"}]},{"name":"Hi.Geom","href":"Hi.Geom.html","topicHref":"Hi.Geom.html","topicUid":"Hi.Geom","type":"Namespace","items":[{"name":"ArrayUtil","href":"Hi.Geom.ArrayUtil.html","topicHref":"Hi.Geom.ArrayUtil.html","topicUid":"Hi.Geom.ArrayUtil","type":"Class"},{"name":"AxisAngle4d","href":"Hi.Geom.AxisAngle4d.html","topicHref":"Hi.Geom.AxisAngle4d.html","topicUid":"Hi.Geom.AxisAngle4d","type":"Class"},{"name":"Box2d","href":"Hi.Geom.Box2d.html","topicHref":"Hi.Geom.Box2d.html","topicUid":"Hi.Geom.Box2d","type":"Class"},{"name":"Box2d.NoInit","href":"Hi.Geom.Box2d.NoInit.html","topicHref":"Hi.Geom.Box2d.NoInit.html","topicUid":"Hi.Geom.Box2d.NoInit","type":"Class"},{"name":"Box3d","href":"Hi.Geom.Box3d.html","topicHref":"Hi.Geom.Box3d.html","topicUid":"Hi.Geom.Box3d","type":"Class"},{"name":"Box3d.NoInit","href":"Hi.Geom.Box3d.NoInit.html","topicHref":"Hi.Geom.Box3d.NoInit.html","topicUid":"Hi.Geom.Box3d.NoInit","type":"Class"},{"name":"Cylindroid","href":"Hi.Geom.Cylindroid.html","topicHref":"Hi.Geom.Cylindroid.html","topicUid":"Hi.Geom.Cylindroid","type":"Class"},{"name":"DVec3d","href":"Hi.Geom.DVec3d.html","topicHref":"Hi.Geom.DVec3d.html","topicUid":"Hi.Geom.DVec3d","type":"Class"},{"name":"Dir","href":"Hi.Geom.Dir.html","topicHref":"Hi.Geom.Dir.html","topicUid":"Hi.Geom.Dir","type":"Enum"},{"name":"ExtendedCylinder","href":"Hi.Geom.ExtendedCylinder.html","topicHref":"Hi.Geom.ExtendedCylinder.html","topicUid":"Hi.Geom.ExtendedCylinder","type":"Class"},{"name":"Flat3d","href":"Hi.Geom.Flat3d.html","topicHref":"Hi.Geom.Flat3d.html","topicUid":"Hi.Geom.Flat3d","type":"Class"},{"name":"FractionStatus","href":"Hi.Geom.FractionStatus.html","topicHref":"Hi.Geom.FractionStatus.html","topicUid":"Hi.Geom.FractionStatus","type":"Enum"},{"name":"Fraction","href":"Hi.Geom.Fraction-1.html","topicHref":"Hi.Geom.Fraction-1.html","topicUid":"Hi.Geom.Fraction`1","type":"Struct"},{"name":"GeomCombination","href":"Hi.Geom.GeomCombination.html","topicHref":"Hi.Geom.GeomCombination.html","topicUid":"Hi.Geom.GeomCombination","type":"Class"},{"name":"GeomUtil","href":"Hi.Geom.GeomUtil.html","topicHref":"Hi.Geom.GeomUtil.html","topicUid":"Hi.Geom.GeomUtil","type":"Class"},{"name":"IExpandToBox2d","href":"Hi.Geom.IExpandToBox2d.html","topicHref":"Hi.Geom.IExpandToBox2d.html","topicUid":"Hi.Geom.IExpandToBox2d","type":"Interface"},{"name":"IExpandToBox3d","href":"Hi.Geom.IExpandToBox3d.html","topicHref":"Hi.Geom.IExpandToBox3d.html","topicUid":"Hi.Geom.IExpandToBox3d","type":"Interface"},{"name":"IFlat3d","href":"Hi.Geom.IFlat3d.html","topicHref":"Hi.Geom.IFlat3d.html","topicUid":"Hi.Geom.IFlat3d","type":"Interface"},{"name":"IGenStl","href":"Hi.Geom.IGenStl.html","topicHref":"Hi.Geom.IGenStl.html","topicUid":"Hi.Geom.IGenStl","type":"Interface"},{"name":"IGeomProperty","href":"Hi.Geom.IGeomProperty.html","topicHref":"Hi.Geom.IGeomProperty.html","topicUid":"Hi.Geom.IGeomProperty","type":"Interface"},{"name":"IGetStl","href":"Hi.Geom.IGetStl.html","topicHref":"Hi.Geom.IGetStl.html","topicUid":"Hi.Geom.IGetStl","type":"Interface"},{"name":"IGetZrContour","href":"Hi.Geom.IGetZrContour.html","topicHref":"Hi.Geom.IGetZrContour.html","topicUid":"Hi.Geom.IGetZrContour","type":"Interface"},{"name":"IGetZrList","href":"Hi.Geom.IGetZrList.html","topicHref":"Hi.Geom.IGetZrList.html","topicUid":"Hi.Geom.IGetZrList","type":"Interface"},{"name":"IStlSource","href":"Hi.Geom.IStlSource.html","topicHref":"Hi.Geom.IStlSource.html","topicUid":"Hi.Geom.IStlSource","type":"Interface"},{"name":"ITri3d","href":"Hi.Geom.ITri3d.html","topicHref":"Hi.Geom.ITri3d.html","topicUid":"Hi.Geom.ITri3d","type":"Interface"},{"name":"IVec","href":"Hi.Geom.IVec-1.html","topicHref":"Hi.Geom.IVec-1.html","topicUid":"Hi.Geom.IVec`1","type":"Interface"},{"name":"IZrListSourceProperty","href":"Hi.Geom.IZrListSourceProperty.html","topicHref":"Hi.Geom.IZrListSourceProperty.html","topicUid":"Hi.Geom.IZrListSourceProperty","type":"Interface"},{"name":"Mat4d","href":"Hi.Geom.Mat4d.html","topicHref":"Hi.Geom.Mat4d.html","topicUid":"Hi.Geom.Mat4d","type":"Class"},{"name":"Mat4d.IndexFlag","href":"Hi.Geom.Mat4d.IndexFlag.html","topicHref":"Hi.Geom.Mat4d.IndexFlag.html","topicUid":"Hi.Geom.Mat4d.IndexFlag","type":"Enum"},{"name":"MathNetUtil","href":"Hi.Geom.MathNetUtil.html","topicHref":"Hi.Geom.MathNetUtil.html","topicUid":"Hi.Geom.MathNetUtil","type":"Class"},{"name":"MathUtil","href":"Hi.Geom.MathUtil.html","topicHref":"Hi.Geom.MathUtil.html","topicUid":"Hi.Geom.MathUtil","type":"Class"},{"name":"NativeFraction","href":"Hi.Geom.NativeFraction.html","topicHref":"Hi.Geom.NativeFraction.html","topicUid":"Hi.Geom.NativeFraction","type":"Class"},{"name":"NativeStl","href":"Hi.Geom.NativeStl.html","topicHref":"Hi.Geom.NativeStl.html","topicUid":"Hi.Geom.NativeStl","type":"Class"},{"name":"NativeTopoStld","href":"Hi.Geom.NativeTopoStld.html","topicHref":"Hi.Geom.NativeTopoStld.html","topicUid":"Hi.Geom.NativeTopoStld","type":"Class"},{"name":"NativeTopoStlfr","href":"Hi.Geom.NativeTopoStlfr.html","topicHref":"Hi.Geom.NativeTopoStlfr.html","topicUid":"Hi.Geom.NativeTopoStlfr","type":"Class"},{"name":"ObjUtil","href":"Hi.Geom.ObjUtil.html","topicHref":"Hi.Geom.ObjUtil.html","topicUid":"Hi.Geom.ObjUtil","type":"Class"},{"name":"PairZr","href":"Hi.Geom.PairZr.html","topicHref":"Hi.Geom.PairZr.html","topicUid":"Hi.Geom.PairZr","type":"Class"},{"name":"PairZrUtil","href":"Hi.Geom.PairZrUtil.html","topicHref":"Hi.Geom.PairZrUtil.html","topicUid":"Hi.Geom.PairZrUtil","type":"Class"},{"name":"PlyUtil","href":"Hi.Geom.PlyUtil.html","topicHref":"Hi.Geom.PlyUtil.html","topicUid":"Hi.Geom.PlyUtil","type":"Class"},{"name":"Polar3d","href":"Hi.Geom.Polar3d.html","topicHref":"Hi.Geom.Polar3d.html","topicUid":"Hi.Geom.Polar3d","type":"Class"},{"name":"Segment3d","href":"Hi.Geom.Segment3d.html","topicHref":"Hi.Geom.Segment3d.html","topicUid":"Hi.Geom.Segment3d","type":"Class"},{"name":"Stl","href":"Hi.Geom.Stl.html","topicHref":"Hi.Geom.Stl.html","topicUid":"Hi.Geom.Stl","type":"Class"},{"name":"Stl.StlType","href":"Hi.Geom.Stl.StlType.html","topicHref":"Hi.Geom.Stl.StlType.html","topicUid":"Hi.Geom.Stl.StlType","type":"Enum"},{"name":"StlFile","href":"Hi.Geom.StlFile.html","topicHref":"Hi.Geom.StlFile.html","topicUid":"Hi.Geom.StlFile","type":"Class"},{"name":"StlFuncHost","href":"Hi.Geom.StlFuncHost.html","topicHref":"Hi.Geom.StlFuncHost.html","topicUid":"Hi.Geom.StlFuncHost","type":"Class"},{"name":"StlUtil","href":"Hi.Geom.StlUtil.html","topicHref":"Hi.Geom.StlUtil.html","topicUid":"Hi.Geom.StlUtil","type":"Class"},{"name":"TransformationGeom","href":"Hi.Geom.TransformationGeom.html","topicHref":"Hi.Geom.TransformationGeom.html","topicUid":"Hi.Geom.TransformationGeom","type":"Class"},{"name":"Tri3d","href":"Hi.Geom.Tri3d.html","topicHref":"Hi.Geom.Tri3d.html","topicUid":"Hi.Geom.Tri3d","type":"Class"},{"name":"Tri3dUtil","href":"Hi.Geom.Tri3dUtil.html","topicHref":"Hi.Geom.Tri3dUtil.html","topicUid":"Hi.Geom.Tri3dUtil","type":"Class"},{"name":"Vec2d","href":"Hi.Geom.Vec2d.html","topicHref":"Hi.Geom.Vec2d.html","topicUid":"Hi.Geom.Vec2d","type":"Class"},{"name":"Vec2i","href":"Hi.Geom.Vec2i.html","topicHref":"Hi.Geom.Vec2i.html","topicUid":"Hi.Geom.Vec2i","type":"Class"},{"name":"Vec3d","href":"Hi.Geom.Vec3d.html","topicHref":"Hi.Geom.Vec3d.html","topicUid":"Hi.Geom.Vec3d","type":"Class"}]},{"name":"Hi.Geom.Resolution","href":"Hi.Geom.Resolution.html","topicHref":"Hi.Geom.Resolution.html","topicUid":"Hi.Geom.Resolution","type":"Namespace","items":[{"name":"IPolarResolution2d","href":"Hi.Geom.Resolution.IPolarResolution2d.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2d.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2d","type":"Interface"},{"name":"IPolarResolution2dSourceProperty","href":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2dSourceProperty","type":"Interface"},{"name":"PolarResolution2d","href":"Hi.Geom.Resolution.PolarResolution2d.html","topicHref":"Hi.Geom.Resolution.PolarResolution2d.html","topicUid":"Hi.Geom.Resolution.PolarResolution2d","type":"Class"}]},{"name":"Hi.Geom.Solvers","href":"Hi.Geom.Solvers.html","topicHref":"Hi.Geom.Solvers.html","topicUid":"Hi.Geom.Solvers","type":"Namespace","items":[{"name":"BinarySolverUtil","href":"Hi.Geom.Solvers.BinarySolverUtil.html","topicHref":"Hi.Geom.Solvers.BinarySolverUtil.html","topicUid":"Hi.Geom.Solvers.BinarySolverUtil","type":"Class"},{"name":"BinarySolvingEntry","href":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicHref":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicUid":"Hi.Geom.Solvers.BinarySolvingEntry","type":"Class"},{"name":"DeepSolvingStatus","href":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicHref":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicUid":"Hi.Geom.Solvers.DeepSolvingStatus","type":"Class"},{"name":"NumericalSolver","href":"Hi.Geom.Solvers.NumericalSolver.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.html","topicUid":"Hi.Geom.Solvers.NumericalSolver","type":"Class"},{"name":"NumericalSolver.GetRepondsDelegate","href":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate","type":"Delegate"},{"name":"NumericalSolver.SetParasDelegate","href":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate","type":"Delegate"},{"name":"SolverUtil","href":"Hi.Geom.Solvers.SolverUtil.html","topicHref":"Hi.Geom.Solvers.SolverUtil.html","topicUid":"Hi.Geom.Solvers.SolverUtil","type":"Class"},{"name":"SolvingResult","href":"Hi.Geom.Solvers.SolvingResult.html","topicHref":"Hi.Geom.Solvers.SolvingResult.html","topicUid":"Hi.Geom.Solvers.SolvingResult","type":"Class"},{"name":"SolvingStatus","href":"Hi.Geom.Solvers.SolvingStatus.html","topicHref":"Hi.Geom.Solvers.SolvingStatus.html","topicUid":"Hi.Geom.Solvers.SolvingStatus","type":"Enum"},{"name":"SolvingTerm","href":"Hi.Geom.Solvers.SolvingTerm.html","topicHref":"Hi.Geom.Solvers.SolvingTerm.html","topicUid":"Hi.Geom.Solvers.SolvingTerm","type":"Enum"}]},{"name":"Hi.Geom.Topo","href":"Hi.Geom.Topo.html","topicHref":"Hi.Geom.Topo.html","topicUid":"Hi.Geom.Topo","type":"Namespace","items":[{"name":"TopoLine3Hfr","href":"Hi.Geom.Topo.TopoLine3Hfr.html","topicHref":"Hi.Geom.Topo.TopoLine3Hfr.html","topicUid":"Hi.Geom.Topo.TopoLine3Hfr","type":"Class"},{"name":"TopoLine3StockHfr","href":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoLine3StockHfr","type":"Class"},{"name":"TopoPoint3Hfr","href":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3Hfr","type":"Class"},{"name":"TopoPoint3StockHfr","href":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3StockHfr","type":"Class"},{"name":"TopoStl3Hfr","href":"Hi.Geom.Topo.TopoStl3Hfr.html","topicHref":"Hi.Geom.Topo.TopoStl3Hfr.html","topicUid":"Hi.Geom.Topo.TopoStl3Hfr","type":"Class"},{"name":"TopoStl3HfrFlatDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee","type":"Class"},{"name":"TopoStl3HfrSmoothDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee","type":"Class"},{"name":"TopoTri3Hfr","href":"Hi.Geom.Topo.TopoTri3Hfr.html","topicHref":"Hi.Geom.Topo.TopoTri3Hfr.html","topicUid":"Hi.Geom.Topo.TopoTri3Hfr","type":"Class"},{"name":"TopoTri3StockHfr","href":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoTri3StockHfr","type":"Class"},{"name":"Vec3Hfr","href":"Hi.Geom.Topo.Vec3Hfr.html","topicHref":"Hi.Geom.Topo.Vec3Hfr.html","topicUid":"Hi.Geom.Topo.Vec3Hfr","type":"Struct"}]},{"name":"Hi.Geom.UnitUtils","href":"Hi.Geom.UnitUtils.html","topicHref":"Hi.Geom.UnitUtils.html","topicUid":"Hi.Geom.UnitUtils","type":"Namespace","items":[{"name":"PhysicsUnit","href":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicHref":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicUid":"Hi.Geom.UnitUtils.PhysicsUnit","type":"Enum"},{"name":"StringValueAttribute","href":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicHref":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicUid":"Hi.Geom.UnitUtils.StringValueAttribute","type":"Class"},{"name":"UnitConvertUtil","href":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicHref":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicUid":"Hi.Geom.UnitUtils.UnitConvertUtil","type":"Class"}]},{"name":"Hi.Grpcs","href":"Hi.Grpcs.html","topicHref":"Hi.Grpcs.html","topicUid":"Hi.Grpcs","type":"Namespace","items":[{"name":"ClStripService","href":"Hi.Grpcs.ClStripService.html","topicHref":"Hi.Grpcs.ClStripService.html","topicUid":"Hi.Grpcs.ClStripService","type":"Class"},{"name":"ClStripService.ClStripServiceBase","href":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceBase.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceBase","type":"Class"},{"name":"ClStripService.ClStripServiceClient","href":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicHref":"Hi.Grpcs.ClStripService.ClStripServiceClient.html","topicUid":"Hi.Grpcs.ClStripService.ClStripServiceClient","type":"Class"},{"name":"ClStripServiceReflection","href":"Hi.Grpcs.ClStripServiceReflection.html","topicHref":"Hi.Grpcs.ClStripServiceReflection.html","topicUid":"Hi.Grpcs.ClStripServiceReflection","type":"Class"},{"name":"ClStripServiceRunner","href":"Hi.Grpcs.ClStripServiceRunner.html","topicHref":"Hi.Grpcs.ClStripServiceRunner.html","topicUid":"Hi.Grpcs.ClStripServiceRunner","type":"Class"},{"name":"DictionaryStep","href":"Hi.Grpcs.DictionaryStep.html","topicHref":"Hi.Grpcs.DictionaryStep.html","topicUid":"Hi.Grpcs.DictionaryStep","type":"Class"},{"name":"PlayerService","href":"Hi.Grpcs.PlayerService.html","topicHref":"Hi.Grpcs.PlayerService.html","topicUid":"Hi.Grpcs.PlayerService","type":"Class"},{"name":"PlayerService.PlayerServiceBase","href":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceBase.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceBase","type":"Class"},{"name":"PlayerService.PlayerServiceClient","href":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicHref":"Hi.Grpcs.PlayerService.PlayerServiceClient.html","topicUid":"Hi.Grpcs.PlayerService.PlayerServiceClient","type":"Class"},{"name":"PlayerServiceReflection","href":"Hi.Grpcs.PlayerServiceReflection.html","topicHref":"Hi.Grpcs.PlayerServiceReflection.html","topicUid":"Hi.Grpcs.PlayerServiceReflection","type":"Class"},{"name":"PlayerServiceRunner","href":"Hi.Grpcs.PlayerServiceRunner.html","topicHref":"Hi.Grpcs.PlayerServiceRunner.html","topicUid":"Hi.Grpcs.PlayerServiceRunner","type":"Class"}]},{"name":"Hi.HiNcKits","href":"Hi.HiNcKits.html","topicHref":"Hi.HiNcKits.html","topicUid":"Hi.HiNcKits","type":"Namespace","items":[{"name":"BasePathEnum","href":"Hi.HiNcKits.BasePathEnum.html","topicHref":"Hi.HiNcKits.BasePathEnum.html","topicUid":"Hi.HiNcKits.BasePathEnum","type":"Enum"},{"name":"HiNcHost","href":"Hi.HiNcKits.HiNcHost.html","topicHref":"Hi.HiNcKits.HiNcHost.html","topicUid":"Hi.HiNcKits.HiNcHost","type":"Class"},{"name":"LocalApp","href":"Hi.HiNcKits.LocalApp.html","topicHref":"Hi.HiNcKits.LocalApp.html","topicUid":"Hi.HiNcKits.LocalApp","type":"Class"},{"name":"LocalAppConfig","href":"Hi.HiNcKits.LocalAppConfig.html","topicHref":"Hi.HiNcKits.LocalAppConfig.html","topicUid":"Hi.HiNcKits.LocalAppConfig","type":"Class"},{"name":"PlayerDivConfig","href":"Hi.HiNcKits.PlayerDivConfig.html","topicHref":"Hi.HiNcKits.PlayerDivConfig.html","topicUid":"Hi.HiNcKits.PlayerDivConfig","type":"Class"},{"name":"ProxyConfig","href":"Hi.HiNcKits.ProxyConfig.html","topicHref":"Hi.HiNcKits.ProxyConfig.html","topicUid":"Hi.HiNcKits.ProxyConfig","type":"Class"},{"name":"UserConfig","href":"Hi.HiNcKits.UserConfig.html","topicHref":"Hi.HiNcKits.UserConfig.html","topicUid":"Hi.HiNcKits.UserConfig","type":"Class"},{"name":"UserService","href":"Hi.HiNcKits.UserService.html","topicHref":"Hi.HiNcKits.UserService.html","topicUid":"Hi.HiNcKits.UserService","type":"Class"}]},{"name":"Hi.Licenses","href":"Hi.Licenses.html","topicHref":"Hi.Licenses.html","topicUid":"Hi.Licenses","type":"Namespace","items":[{"name":"AuthFeature","href":"Hi.Licenses.AuthFeature.html","topicHref":"Hi.Licenses.AuthFeature.html","topicUid":"Hi.Licenses.AuthFeature","type":"Enum"},{"name":"AuthorizationFailedEventArgs","href":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicHref":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicUid":"Hi.Licenses.AuthorizationFailedEventArgs","type":"Class"},{"name":"BlockType","href":"Hi.Licenses.BlockType.html","topicHref":"Hi.Licenses.BlockType.html","topicUid":"Hi.Licenses.BlockType","type":"Enum"},{"name":"License","href":"Hi.Licenses.License.html","topicHref":"Hi.Licenses.License.html","topicUid":"Hi.Licenses.License","type":"Class"},{"name":"LicenseType","href":"Hi.Licenses.LicenseType.html","topicHref":"Hi.Licenses.LicenseType.html","topicUid":"Hi.Licenses.LicenseType","type":"Enum"}]},{"name":"Hi.Machining","href":"Hi.Machining.html","topicHref":"Hi.Machining.html","topicUid":"Hi.Machining","type":"Namespace","items":[{"name":"FreeformRemover","href":"Hi.Machining.FreeformRemover.html","topicHref":"Hi.Machining.FreeformRemover.html","topicUid":"Hi.Machining.FreeformRemover","type":"Class"},{"name":"ICutter","href":"Hi.Machining.ICutter.html","topicHref":"Hi.Machining.ICutter.html","topicUid":"Hi.Machining.ICutter","type":"Interface"},{"name":"ICutterAnchorable","href":"Hi.Machining.ICutterAnchorable.html","topicHref":"Hi.Machining.ICutterAnchorable.html","topicUid":"Hi.Machining.ICutterAnchorable","type":"Interface"},{"name":"IGetSweptable","href":"Hi.Machining.IGetSweptable.html","topicHref":"Hi.Machining.IGetSweptable.html","topicUid":"Hi.Machining.IGetSweptable","type":"Interface"},{"name":"IMachiningTool","href":"Hi.Machining.IMachiningTool.html","topicHref":"Hi.Machining.IMachiningTool.html","topicUid":"Hi.Machining.IMachiningTool","type":"Interface"},{"name":"IVolumeRemover","href":"Hi.Machining.IVolumeRemover.html","topicHref":"Hi.Machining.IVolumeRemover.html","topicUid":"Hi.Machining.IVolumeRemover","type":"Interface"},{"name":"MachiningToolHouse","href":"Hi.Machining.MachiningToolHouse.html","topicHref":"Hi.Machining.MachiningToolHouse.html","topicUid":"Hi.Machining.MachiningToolHouse","type":"Class"},{"name":"MachiningVolumeRemovalProc","href":"Hi.Machining.MachiningVolumeRemovalProc.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc","type":"Class"},{"name":"MachiningVolumeRemovalProc.StepMotionSnapshot","href":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot","type":"Class"},{"name":"MatInterpolationKit","href":"Hi.Machining.MatInterpolationKit.html","topicHref":"Hi.Machining.MatInterpolationKit.html","topicUid":"Hi.Machining.MatInterpolationKit","type":"Class"},{"name":"MatRelation","href":"Hi.Machining.MatRelation.html","topicHref":"Hi.Machining.MatRelation.html","topicUid":"Hi.Machining.MatRelation","type":"Enum"},{"name":"MatRelationUtil","href":"Hi.Machining.MatRelationUtil.html","topicHref":"Hi.Machining.MatRelationUtil.html","topicUid":"Hi.Machining.MatRelationUtil","type":"Class"},{"name":"Sweptable","href":"Hi.Machining.Sweptable.html","topicHref":"Hi.Machining.Sweptable.html","topicUid":"Hi.Machining.Sweptable","type":"Class"},{"name":"SweptableUtil","href":"Hi.Machining.SweptableUtil.html","topicHref":"Hi.Machining.SweptableUtil.html","topicUid":"Hi.Machining.SweptableUtil","type":"Class"},{"name":"ToolNotFoundException","href":"Hi.Machining.ToolNotFoundException.html","topicHref":"Hi.Machining.ToolNotFoundException.html","topicUid":"Hi.Machining.ToolNotFoundException","type":"Class"}]},{"name":"Hi.Machining.MachiningEquipmentUtils","href":"Hi.Machining.MachiningEquipmentUtils.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.html","topicUid":"Hi.Machining.MachiningEquipmentUtils","type":"Namespace","items":[{"name":"CollidableComponentEnum","href":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum","type":"Enum"},{"name":"IGetMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment","type":"Interface"},{"name":"IMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment","type":"Interface"},{"name":"MachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment","type":"Class"},{"name":"MachiningEquipmentCollisionIndex","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex","type":"Class"},{"name":"MachiningEquipmentCollisionIndexPairsSource","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource","type":"Class"},{"name":"MachiningEquipmentUtil","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil","type":"Class"}]},{"name":"Hi.MachiningProcs","href":"Hi.MachiningProcs.html","topicHref":"Hi.MachiningProcs.html","topicUid":"Hi.MachiningProcs","type":"Namespace","items":[{"name":"ConfigStepFunc","href":"Hi.MachiningProcs.ConfigStepFunc.html","topicHref":"Hi.MachiningProcs.ConfigStepFunc.html","topicUid":"Hi.MachiningProcs.ConfigStepFunc","type":"Delegate"},{"name":"IMachiningProjectGetter","href":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicHref":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicUid":"Hi.MachiningProcs.IMachiningProjectGetter","type":"Interface"},{"name":"IProjectService","href":"Hi.MachiningProcs.IProjectService.html","topicHref":"Hi.MachiningProcs.IProjectService.html","topicUid":"Hi.MachiningProcs.IProjectService","type":"Interface"},{"name":"LocalProjectService","href":"Hi.MachiningProcs.LocalProjectService.html","topicHref":"Hi.MachiningProcs.LocalProjectService.html","topicUid":"Hi.MachiningProcs.LocalProjectService","type":"Class"},{"name":"LocalProjectService.MachiningProjectChangedDelegate","href":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicHref":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicUid":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate","type":"Delegate"},{"name":"MachiningActRunner","href":"Hi.MachiningProcs.MachiningActRunner.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.html","topicUid":"Hi.MachiningProcs.MachiningActRunner","type":"Class"},{"name":"MachiningActRunner.MachiningStepBuiltDelegate","href":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicUid":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate","type":"Delegate"},{"name":"MachiningActRunnerConfig","href":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicHref":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicUid":"Hi.MachiningProcs.MachiningActRunnerConfig","type":"Class"},{"name":"MachiningParallelProc","href":"Hi.MachiningProcs.MachiningParallelProc.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc","type":"Class"},{"name":"MachiningParallelProc.StepTaskBundle","href":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle","type":"Class"},{"name":"MachiningParallelProc.SubstractionResult","href":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult","type":"Class"},{"name":"MachiningProject","href":"Hi.MachiningProcs.MachiningProject.html","topicHref":"Hi.MachiningProcs.MachiningProject.html","topicUid":"Hi.MachiningProcs.MachiningProject","type":"Class"},{"name":"MachiningProjectDisplayee","href":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicHref":"Hi.MachiningProcs.MachiningProjectDisplayee.html","topicUid":"Hi.MachiningProcs.MachiningProjectDisplayee","type":"Class"},{"name":"MachiningSession","href":"Hi.MachiningProcs.MachiningSession.html","topicHref":"Hi.MachiningProcs.MachiningSession.html","topicUid":"Hi.MachiningProcs.MachiningSession","type":"Class"},{"name":"MillingUtil","href":"Hi.MachiningProcs.MillingUtil.html","topicHref":"Hi.MachiningProcs.MillingUtil.html","topicUid":"Hi.MachiningProcs.MillingUtil","type":"Class"},{"name":"NcRunnerSessionState","href":"Hi.MachiningProcs.NcRunnerSessionState.html","topicHref":"Hi.MachiningProcs.NcRunnerSessionState.html","topicUid":"Hi.MachiningProcs.NcRunnerSessionState","type":"Class"},{"name":"ProxyProjectService","href":"Hi.MachiningProcs.ProxyProjectService.html","topicHref":"Hi.MachiningProcs.ProxyProjectService.html","topicUid":"Hi.MachiningProcs.ProxyProjectService","type":"Class"},{"name":"RenderingFlag","href":"Hi.MachiningProcs.RenderingFlag.html","topicHref":"Hi.MachiningProcs.RenderingFlag.html","topicUid":"Hi.MachiningProcs.RenderingFlag","type":"Enum"},{"name":"RuntimeApi","href":"Hi.MachiningProcs.RuntimeApi.html","topicHref":"Hi.MachiningProcs.RuntimeApi.html","topicUid":"Hi.MachiningProcs.RuntimeApi","type":"Class"},{"name":"RuntimeController","href":"Hi.MachiningProcs.RuntimeController.html","topicHref":"Hi.MachiningProcs.RuntimeController.html","topicUid":"Hi.MachiningProcs.RuntimeController","type":"Class"},{"name":"SessionMessage","href":"Hi.MachiningProcs.SessionMessage.html","topicHref":"Hi.MachiningProcs.SessionMessage.html","topicUid":"Hi.MachiningProcs.SessionMessage","type":"Class"},{"name":"SessionMessagePack","href":"Hi.MachiningProcs.SessionMessagePack.html","topicHref":"Hi.MachiningProcs.SessionMessagePack.html","topicUid":"Hi.MachiningProcs.SessionMessagePack","type":"Class"},{"name":"SessionProgress","href":"Hi.MachiningProcs.SessionProgress.html","topicHref":"Hi.MachiningProcs.SessionProgress.html","topicUid":"Hi.MachiningProcs.SessionProgress","type":"Class"},{"name":"SessionProgress.FilterFlag","href":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicHref":"Hi.MachiningProcs.SessionProgress.FilterFlag.html","topicUid":"Hi.MachiningProcs.SessionProgress.FilterFlag","type":"Enum"},{"name":"SetupController","href":"Hi.MachiningProcs.SetupController.html","topicHref":"Hi.MachiningProcs.SetupController.html","topicUid":"Hi.MachiningProcs.SetupController","type":"Class"},{"name":"SpindleSpeedCache","href":"Hi.MachiningProcs.SpindleSpeedCache.html","topicHref":"Hi.MachiningProcs.SpindleSpeedCache.html","topicUid":"Hi.MachiningProcs.SpindleSpeedCache","type":"Class"}]},{"name":"Hi.MachiningSteps","href":"Hi.MachiningSteps.html","topicHref":"Hi.MachiningSteps.html","topicUid":"Hi.MachiningSteps","type":"Namespace","items":[{"name":"IFlagText","href":"Hi.MachiningSteps.IFlagText.html","topicHref":"Hi.MachiningSteps.IFlagText.html","topicUid":"Hi.MachiningSteps.IFlagText","type":"Interface"},{"name":"IMachiningStepHost","href":"Hi.MachiningSteps.IMachiningStepHost.html","topicHref":"Hi.MachiningSteps.IMachiningStepHost.html","topicUid":"Hi.MachiningSteps.IMachiningStepHost","type":"Interface"},{"name":"MachineMotionStep","href":"Hi.MachiningSteps.MachineMotionStep.html","topicHref":"Hi.MachiningSteps.MachineMotionStep.html","topicUid":"Hi.MachiningSteps.MachineMotionStep","type":"Class"},{"name":"MachiningStep","href":"Hi.MachiningSteps.MachiningStep.html","topicHref":"Hi.MachiningSteps.MachiningStep.html","topicUid":"Hi.MachiningSteps.MachiningStep","type":"Class"},{"name":"MachiningStep.CollidedKeyPair","href":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicHref":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicUid":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair","type":"Class"},{"name":"MachiningStepUtil","href":"Hi.MachiningSteps.MachiningStepUtil.html","topicHref":"Hi.MachiningSteps.MachiningStepUtil.html","topicUid":"Hi.MachiningSteps.MachiningStepUtil","type":"Class"},{"name":"PresentAccess","href":"Hi.MachiningSteps.PresentAccess.html","topicHref":"Hi.MachiningSteps.PresentAccess.html","topicUid":"Hi.MachiningSteps.PresentAccess","type":"Class"},{"name":"PresentAttribute","href":"Hi.MachiningSteps.PresentAttribute.html","topicHref":"Hi.MachiningSteps.PresentAttribute.html","topicUid":"Hi.MachiningSteps.PresentAttribute","type":"Class"},{"name":"PropertyAccess","href":"Hi.MachiningSteps.PropertyAccess-1.html","topicHref":"Hi.MachiningSteps.PropertyAccess-1.html","topicUid":"Hi.MachiningSteps.PropertyAccess`1","type":"Class"}]},{"name":"Hi.Mapping","href":"Hi.Mapping.html","topicHref":"Hi.Mapping.html","topicUid":"Hi.Mapping","type":"Namespace","items":[{"name":"CsvNcStep","href":"Hi.Mapping.CsvNcStep.html","topicHref":"Hi.Mapping.CsvNcStep.html","topicUid":"Hi.Mapping.CsvNcStep","type":"Class"},{"name":"FileToTimeShotMapping","href":"Hi.Mapping.FileToTimeShotMapping.html","topicHref":"Hi.Mapping.FileToTimeShotMapping.html","topicUid":"Hi.Mapping.FileToTimeShotMapping","type":"Class"},{"name":"IAccelerationShot","href":"Hi.Mapping.IAccelerationShot.html","topicHref":"Hi.Mapping.IAccelerationShot.html","topicUid":"Hi.Mapping.IAccelerationShot","type":"Interface"},{"name":"IForceShot","href":"Hi.Mapping.IForceShot.html","topicHref":"Hi.Mapping.IForceShot.html","topicUid":"Hi.Mapping.IForceShot","type":"Interface"},{"name":"IMomentShot","href":"Hi.Mapping.IMomentShot.html","topicHref":"Hi.Mapping.IMomentShot.html","topicUid":"Hi.Mapping.IMomentShot","type":"Interface"},{"name":"ITimeShot","href":"Hi.Mapping.ITimeShot.html","topicHref":"Hi.Mapping.ITimeShot.html","topicUid":"Hi.Mapping.ITimeShot","type":"Interface"},{"name":"MappingUtil","href":"Hi.Mapping.MappingUtil.html","topicHref":"Hi.Mapping.MappingUtil.html","topicUid":"Hi.Mapping.MappingUtil","type":"Class"},{"name":"StepTimeShotUtil","href":"Hi.Mapping.StepTimeShotUtil.html","topicHref":"Hi.Mapping.StepTimeShotUtil.html","topicUid":"Hi.Mapping.StepTimeShotUtil","type":"Class"},{"name":"StepTimeShotUtil.CycleSamplingMode","href":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicHref":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicUid":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode","type":"Enum"},{"name":"StepTimeShotUtil.GetTimeShotByFileDelegate","href":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicHref":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicUid":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate","type":"Delegate"},{"name":"TimeMapping","href":"Hi.Mapping.TimeMapping.html","topicHref":"Hi.Mapping.TimeMapping.html","topicUid":"Hi.Mapping.TimeMapping","type":"Class"}]},{"name":"Hi.Mappings","href":"Hi.Mappings.html","topicHref":"Hi.Mappings.html","topicUid":"Hi.Mappings","type":"Namespace","items":[{"name":"FileTimeSection","href":"Hi.Mappings.FileTimeSection.html","topicHref":"Hi.Mappings.FileTimeSection.html","topicUid":"Hi.Mappings.FileTimeSection","type":"Class"},{"name":"FileTimeSection.TimeOption","href":"Hi.Mappings.FileTimeSection.TimeOption.html","topicHref":"Hi.Mappings.FileTimeSection.TimeOption.html","topicUid":"Hi.Mappings.FileTimeSection.TimeOption","type":"Enum"}]},{"name":"Hi.Mech","href":"Hi.Mech.html","topicHref":"Hi.Mech.html","topicUid":"Hi.Mech","type":"Namespace","items":[{"name":"GeneralMechanism","href":"Hi.Mech.GeneralMechanism.html","topicHref":"Hi.Mech.GeneralMechanism.html","topicUid":"Hi.Mech.GeneralMechanism","type":"Class"},{"name":"IGetAnchorToSolidDictionary","href":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicHref":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicUid":"Hi.Mech.IGetAnchorToSolidDictionary","type":"Interface"},{"name":"IGetMachiningChain","href":"Hi.Mech.IGetMachiningChain.html","topicHref":"Hi.Mech.IGetMachiningChain.html","topicUid":"Hi.Mech.IGetMachiningChain","type":"Interface"},{"name":"IMachiningChain","href":"Hi.Mech.IMachiningChain.html","topicHref":"Hi.Mech.IMachiningChain.html","topicUid":"Hi.Mech.IMachiningChain","type":"Interface"},{"name":"IMachiningChainSource","href":"Hi.Mech.IMachiningChainSource.html","topicHref":"Hi.Mech.IMachiningChainSource.html","topicUid":"Hi.Mech.IMachiningChainSource","type":"Interface"},{"name":"MachiningChainUtil","href":"Hi.Mech.MachiningChainUtil.html","topicHref":"Hi.Mech.MachiningChainUtil.html","topicUid":"Hi.Mech.MachiningChainUtil","type":"Class"}]},{"name":"Hi.Mech.Topo","href":"Hi.Mech.Topo.html","topicHref":"Hi.Mech.Topo.html","topicUid":"Hi.Mech.Topo","type":"Namespace","items":[{"name":"Anchor","href":"Hi.Mech.Topo.Anchor.html","topicHref":"Hi.Mech.Topo.Anchor.html","topicUid":"Hi.Mech.Topo.Anchor","type":"Class"},{"name":"AnchorFuncSource","href":"Hi.Mech.Topo.AnchorFuncSource.html","topicHref":"Hi.Mech.Topo.AnchorFuncSource.html","topicUid":"Hi.Mech.Topo.AnchorFuncSource","type":"Class"},{"name":"AnchoredBoxable","href":"Hi.Mech.Topo.AnchoredBoxable.html","topicHref":"Hi.Mech.Topo.AnchoredBoxable.html","topicUid":"Hi.Mech.Topo.AnchoredBoxable","type":"Class"},{"name":"AnchoredDisplayee","href":"Hi.Mech.Topo.AnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.AnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.AnchoredDisplayee","type":"Class"},{"name":"Asmb","href":"Hi.Mech.Topo.Asmb.html","topicHref":"Hi.Mech.Topo.Asmb.html","topicUid":"Hi.Mech.Topo.Asmb","type":"Class"},{"name":"AsmbDraw","href":"Hi.Mech.Topo.AsmbDraw.html","topicHref":"Hi.Mech.Topo.AsmbDraw.html","topicUid":"Hi.Mech.Topo.AsmbDraw","type":"Class"},{"name":"Branch","href":"Hi.Mech.Topo.Branch.html","topicHref":"Hi.Mech.Topo.Branch.html","topicUid":"Hi.Mech.Topo.Branch","type":"Class"},{"name":"DirectionBranchEntry","href":"Hi.Mech.Topo.DirectionBranchEntry.html","topicHref":"Hi.Mech.Topo.DirectionBranchEntry.html","topicUid":"Hi.Mech.Topo.DirectionBranchEntry","type":"Class"},{"name":"DirectionBranchPackUtil","href":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicHref":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicUid":"Hi.Mech.Topo.DirectionBranchPackUtil","type":"Class"},{"name":"DynamicFreeform","href":"Hi.Mech.Topo.DynamicFreeform.html","topicHref":"Hi.Mech.Topo.DynamicFreeform.html","topicUid":"Hi.Mech.Topo.DynamicFreeform","type":"Class"},{"name":"DynamicRotation","href":"Hi.Mech.Topo.DynamicRotation.html","topicHref":"Hi.Mech.Topo.DynamicRotation.html","topicUid":"Hi.Mech.Topo.DynamicRotation","type":"Class"},{"name":"DynamicTranslation","href":"Hi.Mech.Topo.DynamicTranslation.html","topicHref":"Hi.Mech.Topo.DynamicTranslation.html","topicUid":"Hi.Mech.Topo.DynamicTranslation","type":"Class"},{"name":"GeneralTransform","href":"Hi.Mech.Topo.GeneralTransform.html","topicHref":"Hi.Mech.Topo.GeneralTransform.html","topicUid":"Hi.Mech.Topo.GeneralTransform","type":"Class"},{"name":"IAnchoredDisplayee","href":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.IAnchoredDisplayee","type":"Interface"},{"name":"IDynamicRegular","href":"Hi.Mech.Topo.IDynamicRegular.html","topicHref":"Hi.Mech.Topo.IDynamicRegular.html","topicUid":"Hi.Mech.Topo.IDynamicRegular","type":"Interface"},{"name":"IDynamicRotation","href":"Hi.Mech.Topo.IDynamicRotation.html","topicHref":"Hi.Mech.Topo.IDynamicRotation.html","topicUid":"Hi.Mech.Topo.IDynamicRotation","type":"Interface"},{"name":"IDynamicTransformer","href":"Hi.Mech.Topo.IDynamicTransformer.html","topicHref":"Hi.Mech.Topo.IDynamicTransformer.html","topicUid":"Hi.Mech.Topo.IDynamicTransformer","type":"Interface"},{"name":"IGetAnchor","href":"Hi.Mech.Topo.IGetAnchor.html","topicHref":"Hi.Mech.Topo.IGetAnchor.html","topicUid":"Hi.Mech.Topo.IGetAnchor","type":"Interface"},{"name":"IGetAnchoredDisplayeeList","href":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicHref":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicUid":"Hi.Mech.Topo.IGetAnchoredDisplayeeList","type":"Interface"},{"name":"IGetAsmb","href":"Hi.Mech.Topo.IGetAsmb.html","topicHref":"Hi.Mech.Topo.IGetAsmb.html","topicUid":"Hi.Mech.Topo.IGetAsmb","type":"Interface"},{"name":"IGetFletchBuckle","href":"Hi.Mech.Topo.IGetFletchBuckle.html","topicHref":"Hi.Mech.Topo.IGetFletchBuckle.html","topicUid":"Hi.Mech.Topo.IGetFletchBuckle","type":"Interface"},{"name":"IGetInverseTransformer","href":"Hi.Mech.Topo.IGetInverseTransformer.html","topicHref":"Hi.Mech.Topo.IGetInverseTransformer.html","topicUid":"Hi.Mech.Topo.IGetInverseTransformer","type":"Interface"},{"name":"IGetTopoIndex","href":"Hi.Mech.Topo.IGetTopoIndex.html","topicHref":"Hi.Mech.Topo.IGetTopoIndex.html","topicUid":"Hi.Mech.Topo.IGetTopoIndex","type":"Interface"},{"name":"IStaticTransformer","href":"Hi.Mech.Topo.IStaticTransformer.html","topicHref":"Hi.Mech.Topo.IStaticTransformer.html","topicUid":"Hi.Mech.Topo.IStaticTransformer","type":"Interface"},{"name":"ITopo","href":"Hi.Mech.Topo.ITopo.html","topicHref":"Hi.Mech.Topo.ITopo.html","topicUid":"Hi.Mech.Topo.ITopo","type":"Interface"},{"name":"ITopoDisplayee","href":"Hi.Mech.Topo.ITopoDisplayee.html","topicHref":"Hi.Mech.Topo.ITopoDisplayee.html","topicUid":"Hi.Mech.Topo.ITopoDisplayee","type":"Interface"},{"name":"ITransformer","href":"Hi.Mech.Topo.ITransformer.html","topicHref":"Hi.Mech.Topo.ITransformer.html","topicUid":"Hi.Mech.Topo.ITransformer","type":"Interface"},{"name":"ITransformerProperty","href":"Hi.Mech.Topo.ITransformerProperty.html","topicHref":"Hi.Mech.Topo.ITransformerProperty.html","topicUid":"Hi.Mech.Topo.ITransformerProperty","type":"Interface"},{"name":"NoTransform","href":"Hi.Mech.Topo.NoTransform.html","topicHref":"Hi.Mech.Topo.NoTransform.html","topicUid":"Hi.Mech.Topo.NoTransform","type":"Class"},{"name":"StackTransformer","href":"Hi.Mech.Topo.StackTransformer.html","topicHref":"Hi.Mech.Topo.StackTransformer.html","topicUid":"Hi.Mech.Topo.StackTransformer","type":"Class"},{"name":"StaticFreeform","href":"Hi.Mech.Topo.StaticFreeform.html","topicHref":"Hi.Mech.Topo.StaticFreeform.html","topicUid":"Hi.Mech.Topo.StaticFreeform","type":"Class"},{"name":"StaticRotation","href":"Hi.Mech.Topo.StaticRotation.html","topicHref":"Hi.Mech.Topo.StaticRotation.html","topicUid":"Hi.Mech.Topo.StaticRotation","type":"Class"},{"name":"StaticTranslation","href":"Hi.Mech.Topo.StaticTranslation.html","topicHref":"Hi.Mech.Topo.StaticTranslation.html","topicUid":"Hi.Mech.Topo.StaticTranslation","type":"Class"},{"name":"TopoDisplayee","href":"Hi.Mech.Topo.TopoDisplayee.html","topicHref":"Hi.Mech.Topo.TopoDisplayee.html","topicUid":"Hi.Mech.Topo.TopoDisplayee","type":"Class"},{"name":"TopoDisplayeeUtil","href":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicHref":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicUid":"Hi.Mech.Topo.TopoDisplayeeUtil","type":"Class"},{"name":"TopoReflection","href":"Hi.Mech.Topo.TopoReflection.html","topicHref":"Hi.Mech.Topo.TopoReflection.html","topicUid":"Hi.Mech.Topo.TopoReflection","type":"Class"},{"name":"TopoUtil","href":"Hi.Mech.Topo.TopoUtil.html","topicHref":"Hi.Mech.Topo.TopoUtil.html","topicUid":"Hi.Mech.Topo.TopoUtil","type":"Class"},{"name":"TransformerUtil","href":"Hi.Mech.Topo.TransformerUtil.html","topicHref":"Hi.Mech.Topo.TransformerUtil.html","topicUid":"Hi.Mech.Topo.TransformerUtil","type":"Class"}]},{"name":"Hi.Milling","href":"Hi.Milling.html","topicHref":"Hi.Milling.html","topicUid":"Hi.Milling","type":"Namespace","items":[{"name":"IGetDiameter","href":"Hi.Milling.IGetDiameter.html","topicHref":"Hi.Milling.IGetDiameter.html","topicUid":"Hi.Milling.IGetDiameter","type":"Interface"},{"name":"IGetFluteHeight","href":"Hi.Milling.IGetFluteHeight.html","topicHref":"Hi.Milling.IGetFluteHeight.html","topicUid":"Hi.Milling.IGetFluteHeight","type":"Interface"},{"name":"IGetMillingGeomBrief","href":"Hi.Milling.IGetMillingGeomBrief.html","topicHref":"Hi.Milling.IGetMillingGeomBrief.html","topicUid":"Hi.Milling.IGetMillingGeomBrief","type":"Interface"},{"name":"IGetRadialReliefAngle","href":"Hi.Milling.IGetRadialReliefAngle.html","topicHref":"Hi.Milling.IGetRadialReliefAngle.html","topicUid":"Hi.Milling.IGetRadialReliefAngle","type":"Interface"},{"name":"IMillingGeomBriefAccessor","href":"Hi.Milling.IMillingGeomBriefAccessor.html","topicHref":"Hi.Milling.IMillingGeomBriefAccessor.html","topicUid":"Hi.Milling.IMillingGeomBriefAccessor","type":"Interface"},{"name":"MillingGeomBrief","href":"Hi.Milling.MillingGeomBrief.html","topicHref":"Hi.Milling.MillingGeomBrief.html","topicUid":"Hi.Milling.MillingGeomBrief","type":"Class"},{"name":"MillingRemovalUtil","href":"Hi.Milling.MillingRemovalUtil.html","topicHref":"Hi.Milling.MillingRemovalUtil.html","topicUid":"Hi.Milling.MillingRemovalUtil","type":"Class"},{"name":"SpindleCapability","href":"Hi.Milling.SpindleCapability.html","topicHref":"Hi.Milling.SpindleCapability.html","topicUid":"Hi.Milling.SpindleCapability","type":"Class"}]},{"name":"Hi.Milling.Apts","href":"Hi.Milling.Apts.html","topicHref":"Hi.Milling.Apts.html","topicUid":"Hi.Milling.Apts","type":"Namespace","items":[{"name":"AptDerivative","href":"Hi.Milling.Apts.AptDerivative.html","topicHref":"Hi.Milling.Apts.AptDerivative.html","topicUid":"Hi.Milling.Apts.AptDerivative","type":"Class"},{"name":"BallApt","href":"Hi.Milling.Apts.BallApt.html","topicHref":"Hi.Milling.Apts.BallApt.html","topicUid":"Hi.Milling.Apts.BallApt","type":"Class"},{"name":"BullNoseApt","href":"Hi.Milling.Apts.BullNoseApt.html","topicHref":"Hi.Milling.Apts.BullNoseApt.html","topicUid":"Hi.Milling.Apts.BullNoseApt","type":"Class"},{"name":"ColumnApt","href":"Hi.Milling.Apts.ColumnApt.html","topicHref":"Hi.Milling.Apts.ColumnApt.html","topicUid":"Hi.Milling.Apts.ColumnApt","type":"Class"},{"name":"ConeApt","href":"Hi.Milling.Apts.ConeApt.html","topicHref":"Hi.Milling.Apts.ConeApt.html","topicUid":"Hi.Milling.Apts.ConeApt","type":"Class"},{"name":"ExactColumnApt","href":"Hi.Milling.Apts.ExactColumnApt.html","topicHref":"Hi.Milling.Apts.ExactColumnApt.html","topicUid":"Hi.Milling.Apts.ExactColumnApt","type":"Class"},{"name":"GeneralApt","href":"Hi.Milling.Apts.GeneralApt.html","topicHref":"Hi.Milling.Apts.GeneralApt.html","topicUid":"Hi.Milling.Apts.GeneralApt","type":"Class"},{"name":"IAptAlpha","href":"Hi.Milling.Apts.IAptAlpha.html","topicHref":"Hi.Milling.Apts.IAptAlpha.html","topicUid":"Hi.Milling.Apts.IAptAlpha","type":"Interface"},{"name":"IAptBased","href":"Hi.Milling.Apts.IAptBased.html","topicHref":"Hi.Milling.Apts.IAptBased.html","topicUid":"Hi.Milling.Apts.IAptBased","type":"Interface"},{"name":"IAptBeta","href":"Hi.Milling.Apts.IAptBeta.html","topicHref":"Hi.Milling.Apts.IAptBeta.html","topicUid":"Hi.Milling.Apts.IAptBeta","type":"Interface"},{"name":"IAptRc","href":"Hi.Milling.Apts.IAptRc.html","topicHref":"Hi.Milling.Apts.IAptRc.html","topicUid":"Hi.Milling.Apts.IAptRc","type":"Interface"},{"name":"IAptRr","href":"Hi.Milling.Apts.IAptRr.html","topicHref":"Hi.Milling.Apts.IAptRr.html","topicUid":"Hi.Milling.Apts.IAptRr","type":"Interface"},{"name":"IAptRz","href":"Hi.Milling.Apts.IAptRz.html","topicHref":"Hi.Milling.Apts.IAptRz.html","topicUid":"Hi.Milling.Apts.IAptRz","type":"Interface"},{"name":"IGetApt","href":"Hi.Milling.Apts.IGetApt.html","topicHref":"Hi.Milling.Apts.IGetApt.html","topicUid":"Hi.Milling.Apts.IGetApt","type":"Interface"},{"name":"IGetGeneralApt","href":"Hi.Milling.Apts.IGetGeneralApt.html","topicHref":"Hi.Milling.Apts.IGetGeneralApt.html","topicUid":"Hi.Milling.Apts.IGetGeneralApt","type":"Interface"},{"name":"TaperApt","href":"Hi.Milling.Apts.TaperApt.html","topicHref":"Hi.Milling.Apts.TaperApt.html","topicUid":"Hi.Milling.Apts.TaperApt","type":"Class"},{"name":"apt_t","href":"Hi.Milling.Apts.apt_t.html","topicHref":"Hi.Milling.Apts.apt_t.html","topicUid":"Hi.Milling.Apts.apt_t","type":"Struct"}]},{"name":"Hi.Milling.Cutters","href":"Hi.Milling.Cutters.html","topicHref":"Hi.Milling.Cutters.html","topicUid":"Hi.Milling.Cutters","type":"Namespace","items":[{"name":"AptProfile","href":"Hi.Milling.Cutters.AptProfile.html","topicHref":"Hi.Milling.Cutters.AptProfile.html","topicUid":"Hi.Milling.Cutters.AptProfile","type":"Class"},{"name":"ConstRatioProfile","href":"Hi.Milling.Cutters.ConstRatioProfile.html","topicHref":"Hi.Milling.Cutters.ConstRatioProfile.html","topicUid":"Hi.Milling.Cutters.ConstRatioProfile","type":"Class"},{"name":"CustomSpinningProfile","href":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicHref":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicUid":"Hi.Milling.Cutters.CustomSpinningProfile","type":"Class"},{"name":"CutterUtil","href":"Hi.Milling.Cutters.CutterUtil.html","topicHref":"Hi.Milling.Cutters.CutterUtil.html","topicUid":"Hi.Milling.Cutters.CutterUtil","type":"Class"},{"name":"FluteContourDisplayee","href":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicHref":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicUid":"Hi.Milling.Cutters.FluteContourDisplayee","type":"Class"},{"name":"FluteDependentRatioProfile","href":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicHref":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicUid":"Hi.Milling.Cutters.FluteDependentRatioProfile","type":"Class"},{"name":"IShaperProfile","href":"Hi.Milling.Cutters.IShaperProfile.html","topicHref":"Hi.Milling.Cutters.IShaperProfile.html","topicUid":"Hi.Milling.Cutters.IShaperProfile","type":"Interface"},{"name":"MillingCutter","href":"Hi.Milling.Cutters.MillingCutter.html","topicHref":"Hi.Milling.Cutters.MillingCutter.html","topicUid":"Hi.Milling.Cutters.MillingCutter","type":"Class"},{"name":"MillingCutter.IntegralModeEnum","href":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum","type":"Enum"},{"name":"MillingCutter.MassAssignmentMode","href":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicHref":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicUid":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode","type":"Enum"},{"name":"MillingCutterEditorDisplayee","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee","type":"Class"},{"name":"MillingCutterEditorDisplayee.ShapeModeEnum","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum","type":"Enum"}]},{"name":"Hi.Milling.Engagements","href":"Hi.Milling.Engagements.html","topicHref":"Hi.Milling.Engagements.html","topicUid":"Hi.Milling.Engagements","type":"Namespace","items":[{"name":"BitwiseMillingEngagement","href":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicHref":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicUid":"Hi.Milling.Engagements.BitwiseMillingEngagement","type":"Class"},{"name":"EngagementLayer","href":"Hi.Milling.Engagements.EngagementLayer.html","topicHref":"Hi.Milling.Engagements.EngagementLayer.html","topicUid":"Hi.Milling.Engagements.EngagementLayer","type":"Class"},{"name":"EngagementSlice","href":"Hi.Milling.Engagements.EngagementSlice.html","topicHref":"Hi.Milling.Engagements.EngagementSlice.html","topicUid":"Hi.Milling.Engagements.EngagementSlice","type":"Class"},{"name":"IBitwiseMillingEngagementSupport","href":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicHref":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicUid":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport","type":"Interface"},{"name":"IGetLayerMillingEngagement","href":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.IGetLayerMillingEngagement","type":"Interface"},{"name":"LayerMillingEngagement","href":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.LayerMillingEngagement","type":"Class"},{"name":"MillingEngagementUtil","href":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicHref":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicUid":"Hi.Milling.Engagements.MillingEngagementUtil","type":"Class"}]},{"name":"Hi.Milling.FluteContours","href":"Hi.Milling.FluteContours.html","topicHref":"Hi.Milling.FluteContours.html","topicUid":"Hi.Milling.FluteContours","type":"Namespace","items":[{"name":"ConstHelixSideContour","href":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicHref":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicUid":"Hi.Milling.FluteContours.ConstHelixSideContour","type":"Class"},{"name":"FluteContour","href":"Hi.Milling.FluteContours.FluteContour.html","topicHref":"Hi.Milling.FluteContours.FluteContour.html","topicUid":"Hi.Milling.FluteContours.FluteContour","type":"Class"},{"name":"FluteContourUtil","href":"Hi.Milling.FluteContours.FluteContourUtil.html","topicHref":"Hi.Milling.FluteContours.FluteContourUtil.html","topicUid":"Hi.Milling.FluteContours.FluteContourUtil","type":"Class"},{"name":"FreeContourTray","href":"Hi.Milling.FluteContours.FreeContourTray.html","topicHref":"Hi.Milling.FluteContours.FreeContourTray.html","topicUid":"Hi.Milling.FluteContours.FreeContourTray","type":"Class"},{"name":"FreeformSideContour","href":"Hi.Milling.FluteContours.FreeformSideContour.html","topicHref":"Hi.Milling.FluteContours.FreeformSideContour.html","topicUid":"Hi.Milling.FluteContours.FreeformSideContour","type":"Class"},{"name":"IBottomContour","href":"Hi.Milling.FluteContours.IBottomContour.html","topicHref":"Hi.Milling.FluteContours.IBottomContour.html","topicUid":"Hi.Milling.FluteContours.IBottomContour","type":"Interface"},{"name":"IContourTray","href":"Hi.Milling.FluteContours.IContourTray.html","topicHref":"Hi.Milling.FluteContours.IContourTray.html","topicUid":"Hi.Milling.FluteContours.IContourTray","type":"Interface"},{"name":"IFluteNumSourceProperty","href":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicHref":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicUid":"Hi.Milling.FluteContours.IFluteNumSourceProperty","type":"Interface"},{"name":"IGetFluteNum","href":"Hi.Milling.FluteContours.IGetFluteNum.html","topicHref":"Hi.Milling.FluteContours.IGetFluteNum.html","topicUid":"Hi.Milling.FluteContours.IGetFluteNum","type":"Interface"},{"name":"ISideContour","href":"Hi.Milling.FluteContours.ISideContour.html","topicHref":"Hi.Milling.FluteContours.ISideContour.html","topicUid":"Hi.Milling.FluteContours.ISideContour","type":"Interface"},{"name":"IWorkingContour","href":"Hi.Milling.FluteContours.IWorkingContour.html","topicHref":"Hi.Milling.FluteContours.IWorkingContour.html","topicUid":"Hi.Milling.FluteContours.IWorkingContour","type":"Interface"},{"name":"ShiftedWorkingContour","href":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicHref":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicUid":"Hi.Milling.FluteContours.ShiftedWorkingContour","type":"Class"},{"name":"SideContourDisplayee","href":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicHref":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicUid":"Hi.Milling.FluteContours.SideContourDisplayee","type":"Class"},{"name":"SlideBottomContour","href":"Hi.Milling.FluteContours.SlideBottomContour.html","topicHref":"Hi.Milling.FluteContours.SlideBottomContour.html","topicUid":"Hi.Milling.FluteContours.SlideBottomContour","type":"Class"},{"name":"SpanContourPos4d","href":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicHref":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicUid":"Hi.Milling.FluteContours.SpanContourPos4d","type":"Class"},{"name":"UniformContourTray","href":"Hi.Milling.FluteContours.UniformContourTray.html","topicHref":"Hi.Milling.FluteContours.UniformContourTray.html","topicUid":"Hi.Milling.FluteContours.UniformContourTray","type":"Class"}]},{"name":"Hi.Milling.MillingTools","href":"Hi.Milling.MillingTools.html","topicHref":"Hi.Milling.MillingTools.html","topicUid":"Hi.Milling.MillingTools","type":"Namespace","items":[{"name":"MillingTool","href":"Hi.Milling.MillingTools.MillingTool.html","topicHref":"Hi.Milling.MillingTools.MillingTool.html","topicUid":"Hi.Milling.MillingTools.MillingTool","type":"Class"},{"name":"MillingToolAnchorReference","href":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicHref":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicUid":"Hi.Milling.MillingTools.MillingToolAnchorReference","type":"Enum"},{"name":"MillingToolEditorDisplayee","href":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicHref":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicUid":"Hi.Milling.MillingTools.MillingToolEditorDisplayee","type":"Class"},{"name":"MillingToolUtil","href":"Hi.Milling.MillingTools.MillingToolUtil.html","topicHref":"Hi.Milling.MillingTools.MillingToolUtil.html","topicUid":"Hi.Milling.MillingTools.MillingToolUtil","type":"Class"}]},{"name":"Hi.MillingForces","href":"Hi.MillingForces.html","topicHref":"Hi.MillingForces.html","topicUid":"Hi.MillingForces","type":"Namespace","items":[{"name":"FluteZData","href":"Hi.MillingForces.FluteZData.html","topicHref":"Hi.MillingForces.FluteZData.html","topicUid":"Hi.MillingForces.FluteZData","type":"Class"},{"name":"IGetMillingForce","href":"Hi.MillingForces.IGetMillingForce.html","topicHref":"Hi.MillingForces.IGetMillingForce.html","topicUid":"Hi.MillingForces.IGetMillingForce","type":"Interface"},{"name":"IMillingForceAccessor","href":"Hi.MillingForces.IMillingForceAccessor.html","topicHref":"Hi.MillingForces.IMillingForceAccessor.html","topicUid":"Hi.MillingForces.IMillingForceAccessor","type":"Interface"},{"name":"MillingForce","href":"Hi.MillingForces.MillingForce.html","topicHref":"Hi.MillingForces.MillingForce.html","topicUid":"Hi.MillingForces.MillingForce","type":"Class"},{"name":"MillingForceLicense","href":"Hi.MillingForces.MillingForceLicense.html","topicHref":"Hi.MillingForces.MillingForceLicense.html","topicUid":"Hi.MillingForces.MillingForceLicense","type":"Class"},{"name":"MillingForceLuggage","href":"Hi.MillingForces.MillingForceLuggage.html","topicHref":"Hi.MillingForces.MillingForceLuggage.html","topicUid":"Hi.MillingForces.MillingForceLuggage","type":"Class"},{"name":"MillingForceUtil","href":"Hi.MillingForces.MillingForceUtil.html","topicHref":"Hi.MillingForces.MillingForceUtil.html","topicUid":"Hi.MillingForces.MillingForceUtil","type":"Class"},{"name":"MillingForceUtil.AnglePack","href":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicHref":"Hi.MillingForces.MillingForceUtil.AnglePack.html","topicUid":"Hi.MillingForces.MillingForceUtil.AnglePack","type":"Class"},{"name":"MillingPhysicsBrief","href":"Hi.MillingForces.MillingPhysicsBrief.html","topicHref":"Hi.MillingForces.MillingPhysicsBrief.html","topicUid":"Hi.MillingForces.MillingPhysicsBrief","type":"Class"},{"name":"PhysicsUtil","href":"Hi.MillingForces.PhysicsUtil.html","topicHref":"Hi.MillingForces.PhysicsUtil.html","topicUid":"Hi.MillingForces.PhysicsUtil","type":"Class"},{"name":"ToolObservationReference","href":"Hi.MillingForces.ToolObservationReference.html","topicHref":"Hi.MillingForces.ToolObservationReference.html","topicUid":"Hi.MillingForces.ToolObservationReference","type":"Enum"}]},{"name":"Hi.MillingForces.Fittings","href":"Hi.MillingForces.Fittings.html","topicHref":"Hi.MillingForces.Fittings.html","topicUid":"Hi.MillingForces.Fittings","type":"Namespace","items":[{"name":"CuttingParaUtil","href":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicHref":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicUid":"Hi.MillingForces.Fittings.CuttingParaUtil","type":"Class"},{"name":"ICuttingPara","href":"Hi.MillingForces.Fittings.ICuttingPara.html","topicHref":"Hi.MillingForces.Fittings.ICuttingPara.html","topicUid":"Hi.MillingForces.Fittings.ICuttingPara","type":"Interface"},{"name":"IGetCuttingPara","href":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicHref":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicUid":"Hi.MillingForces.Fittings.IGetCuttingPara","type":"Interface"},{"name":"SampleCategory","href":"Hi.MillingForces.Fittings.SampleCategory.html","topicHref":"Hi.MillingForces.Fittings.SampleCategory.html","topicUid":"Hi.MillingForces.Fittings.SampleCategory","type":"Class"},{"name":"SampleFlag","href":"Hi.MillingForces.Fittings.SampleFlag.html","topicHref":"Hi.MillingForces.Fittings.SampleFlag.html","topicUid":"Hi.MillingForces.Fittings.SampleFlag","type":"Enum"},{"name":"SampleFlagUtil","href":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicHref":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicUid":"Hi.MillingForces.Fittings.SampleFlagUtil","type":"Class"},{"name":"SampleInstance","href":"Hi.MillingForces.Fittings.SampleInstance.html","topicHref":"Hi.MillingForces.Fittings.SampleInstance.html","topicUid":"Hi.MillingForces.Fittings.SampleInstance","type":"Class"},{"name":"TimeForce","href":"Hi.MillingForces.Fittings.TimeForce.html","topicHref":"Hi.MillingForces.Fittings.TimeForce.html","topicUid":"Hi.MillingForces.Fittings.TimeForce","type":"Class"},{"name":"TimeForceFrequencyDomain","href":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicHref":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicUid":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain","type":"Class"},{"name":"TimeForceSeries","href":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeForceSeries","type":"Class"},{"name":"TimeForceUtil","href":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicHref":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicUid":"Hi.MillingForces.Fittings.TimeForceUtil","type":"Class"},{"name":"TimeVsForceSeries","href":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsForceSeries","type":"Class"},{"name":"TimeVsTorqueSeries","href":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsTorqueSeries","type":"Class"},{"name":"TrainingSample","href":"Hi.MillingForces.Fittings.TrainingSample.html","topicHref":"Hi.MillingForces.Fittings.TrainingSample.html","topicUid":"Hi.MillingForces.Fittings.TrainingSample","type":"Class"}]},{"name":"Hi.MillingForces.ProfileMillingParas","href":"Hi.MillingForces.ProfileMillingParas.html","topicHref":"Hi.MillingForces.ProfileMillingParas.html","topicUid":"Hi.MillingForces.ProfileMillingParas","type":"Namespace","items":[{"name":"IGetLocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara","type":"Interface"},{"name":"LocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara","type":"Class"},{"name":"ProfileMillingParaMap","href":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicHref":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicUid":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap","type":"Class"},{"name":"RtaMillingParaKey","href":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicHref":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicUid":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey","type":"Enum"}]},{"name":"Hi.MillingForces.RakeFaceCuttingParas","href":"Hi.MillingForces.RakeFaceCuttingParas.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas","type":"Namespace","items":[{"name":"IRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara","type":"Interface"},{"name":"MillingPhysicsUtil","href":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil","type":"Class"},{"name":"MultiFormRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara","type":"Class"},{"name":"RakeFaceCuttingPara2d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d","type":"Class"},{"name":"RakeFaceCuttingPara3d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d","type":"Class"},{"name":"RakeFaceCuttingParaMap","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap","type":"Class"}]},{"name":"Hi.MillingForces.Training","href":"Hi.MillingForces.Training.html","topicHref":"Hi.MillingForces.Training.html","topicUid":"Hi.MillingForces.Training","type":"Namespace","items":[{"name":"MillingTraining","href":"Hi.MillingForces.Training.MillingTraining.html","topicHref":"Hi.MillingForces.Training.MillingTraining.html","topicUid":"Hi.MillingForces.Training.MillingTraining","type":"Class"}]},{"name":"Hi.MillingProcs","href":"Hi.MillingProcs.html","topicHref":"Hi.MillingProcs.html","topicUid":"Hi.MillingProcs","type":"Namespace","items":[{"name":"MillingGuide","href":"Hi.MillingProcs.MillingGuide.html","topicHref":"Hi.MillingProcs.MillingGuide.html","topicUid":"Hi.MillingProcs.MillingGuide","type":"Class"}]},{"name":"Hi.MillingStepUtils","href":"Hi.MillingStepUtils.html","topicHref":"Hi.MillingStepUtils.html","topicUid":"Hi.MillingStepUtils","type":"Namespace","items":[{"name":"ClStripChartConfig","href":"Hi.MillingStepUtils.ClStripChartConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartConfig","type":"Class"},{"name":"ClStripChartItemConfig","href":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartItemConfig","type":"Class"},{"name":"ForceCycleFlag","href":"Hi.MillingStepUtils.ForceCycleFlag.html","topicHref":"Hi.MillingStepUtils.ForceCycleFlag.html","topicUid":"Hi.MillingStepUtils.ForceCycleFlag","type":"Enum"},{"name":"ForceCycleLineDivConfig","href":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.ForceCycleLineDivConfig","type":"Class"},{"name":"LineChartVRangeMode","href":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicHref":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicUid":"Hi.MillingStepUtils.LineChartVRangeMode","type":"Enum"},{"name":"SpindleMomentCycleLineDivConfig","href":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig","type":"Class"},{"name":"TimeChartYConfig","href":"Hi.MillingStepUtils.TimeChartYConfig.html","topicHref":"Hi.MillingStepUtils.TimeChartYConfig.html","topicUid":"Hi.MillingStepUtils.TimeChartYConfig","type":"Class"}]},{"name":"Hi.MillingSteps","href":"Hi.MillingSteps.html","topicHref":"Hi.MillingSteps.html","topicUid":"Hi.MillingSteps","type":"Namespace","items":[{"name":"MillingInstance","href":"Hi.MillingSteps.MillingInstance.html","topicHref":"Hi.MillingSteps.MillingInstance.html","topicUid":"Hi.MillingSteps.MillingInstance","type":"Class"},{"name":"MillingStepLuggage","href":"Hi.MillingSteps.MillingStepLuggage.html","topicHref":"Hi.MillingSteps.MillingStepLuggage.html","topicUid":"Hi.MillingSteps.MillingStepLuggage","type":"Class"}]},{"name":"Hi.Motion","href":"Hi.Motion.html","topicHref":"Hi.Motion.html","topicUid":"Hi.Motion","type":"Namespace","items":[{"name":"MotionUtil","href":"Hi.Motion.MotionUtil.html","topicHref":"Hi.Motion.MotionUtil.html","topicUid":"Hi.Motion.MotionUtil","type":"Class"}]},{"name":"Hi.Motion.MatValves","href":"Hi.Motion.MatValves.html","topicHref":"Hi.Motion.MatValves.html","topicUid":"Hi.Motion.MatValves","type":"Namespace","items":[{"name":"ClMachiningValve","href":"Hi.Motion.MatValves.ClMachiningValve.html","topicHref":"Hi.Motion.MatValves.ClMachiningValve.html","topicUid":"Hi.Motion.MatValves.ClMachiningValve","type":"Class"},{"name":"IMotionValve","href":"Hi.Motion.MatValves.IMotionValve.html","topicHref":"Hi.Motion.MatValves.IMotionValve.html","topicUid":"Hi.Motion.MatValves.IMotionValve","type":"Interface"},{"name":"MacroMotionValve","href":"Hi.Motion.MatValves.MacroMotionValve.html","topicHref":"Hi.Motion.MatValves.MacroMotionValve.html","topicUid":"Hi.Motion.MatValves.MacroMotionValve","type":"Class"},{"name":"StepMotionValve","href":"Hi.Motion.MatValves.StepMotionValve.html","topicHref":"Hi.Motion.MatValves.StepMotionValve.html","topicUid":"Hi.Motion.MatValves.StepMotionValve","type":"Class"}]},{"name":"Hi.Native","href":"Hi.Native.html","topicHref":"Hi.Native.html","topicUid":"Hi.Native","type":"Namespace","items":[{"name":"StopSource","href":"Hi.Native.StopSource.html","topicHref":"Hi.Native.StopSource.html","topicUid":"Hi.Native.StopSource","type":"Class"},{"name":"StopToken","href":"Hi.Native.StopToken.html","topicHref":"Hi.Native.StopToken.html","topicUid":"Hi.Native.StopToken","type":"Class"},{"name":"StopTokenKit","href":"Hi.Native.StopTokenKit.html","topicHref":"Hi.Native.StopTokenKit.html","topicUid":"Hi.Native.StopTokenKit","type":"Class"},{"name":"StopTokenUtil","href":"Hi.Native.StopTokenUtil.html","topicHref":"Hi.Native.StopTokenUtil.html","topicUid":"Hi.Native.StopTokenUtil","type":"Class"},{"name":"bind_t","href":"Hi.Native.bind_t.html","topicHref":"Hi.Native.bind_t.html","topicUid":"Hi.Native.bind_t","type":"Struct"},{"name":"box2d","href":"Hi.Native.box2d.html","topicHref":"Hi.Native.box2d.html","topicUid":"Hi.Native.box2d","type":"Struct"},{"name":"box3d","href":"Hi.Native.box3d.html","topicHref":"Hi.Native.box3d.html","topicUid":"Hi.Native.box3d","type":"Struct"},{"name":"expand_to_box3d_func_t","href":"Hi.Native.expand_to_box3d_func_t.html","topicHref":"Hi.Native.expand_to_box3d_func_t.html","topicUid":"Hi.Native.expand_to_box3d_func_t","type":"Delegate"},{"name":"key_event_t","href":"Hi.Native.key_event_t.html","topicHref":"Hi.Native.key_event_t.html","topicUid":"Hi.Native.key_event_t","type":"Struct"},{"name":"key_table__transform_view_by_key_pressing_t","href":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicHref":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicUid":"Hi.Native.key_table__transform_view_by_key_pressing_t","type":"Struct"},{"name":"mat4d","href":"Hi.Native.mat4d.html","topicHref":"Hi.Native.mat4d.html","topicUid":"Hi.Native.mat4d","type":"Struct"},{"name":"mat_stack_t","href":"Hi.Native.mat_stack_t.html","topicHref":"Hi.Native.mat_stack_t.html","topicUid":"Hi.Native.mat_stack_t","type":"Struct"},{"name":"mouse_button_event_t","href":"Hi.Native.mouse_button_event_t.html","topicHref":"Hi.Native.mouse_button_event_t.html","topicUid":"Hi.Native.mouse_button_event_t","type":"Struct"},{"name":"mouse_button_table__transform_view_by_mouse_drag_t","href":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicHref":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicUid":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t","type":"Struct"},{"name":"mouse_move_event_t","href":"Hi.Native.mouse_move_event_t.html","topicHref":"Hi.Native.mouse_move_event_t.html","topicUid":"Hi.Native.mouse_move_event_t","type":"Struct"},{"name":"mouse_wheel_event_t","href":"Hi.Native.mouse_wheel_event_t.html","topicHref":"Hi.Native.mouse_wheel_event_t.html","topicUid":"Hi.Native.mouse_wheel_event_t","type":"Struct"},{"name":"panel_state_t","href":"Hi.Native.panel_state_t.html","topicHref":"Hi.Native.panel_state_t.html","topicUid":"Hi.Native.panel_state_t","type":"Struct"},{"name":"picking_event_t","href":"Hi.Native.picking_event_t.html","topicHref":"Hi.Native.picking_event_t.html","topicUid":"Hi.Native.picking_event_t","type":"Struct"},{"name":"picking_mark_t","href":"Hi.Native.picking_mark_t.html","topicHref":"Hi.Native.picking_mark_t.html","topicUid":"Hi.Native.picking_mark_t","type":"Struct"},{"name":"tri3d","href":"Hi.Native.tri3d.html","topicHref":"Hi.Native.tri3d.html","topicUid":"Hi.Native.tri3d","type":"Struct"},{"name":"ui_event_type","href":"Hi.Native.ui_event_type.html","topicHref":"Hi.Native.ui_event_type.html","topicUid":"Hi.Native.ui_event_type","type":"Enum"},{"name":"vec2d","href":"Hi.Native.vec2d.html","topicHref":"Hi.Native.vec2d.html","topicUid":"Hi.Native.vec2d","type":"Struct"},{"name":"vec3d","href":"Hi.Native.vec3d.html","topicHref":"Hi.Native.vec3d.html","topicUid":"Hi.Native.vec3d","type":"Struct"},{"name":"vec3f","href":"Hi.Native.vec3f.html","topicHref":"Hi.Native.vec3f.html","topicUid":"Hi.Native.vec3f","type":"Struct"}]},{"name":"Hi.NcMech","href":"Hi.NcMech.html","topicHref":"Hi.NcMech.html","topicUid":"Hi.NcMech","type":"Namespace","items":[{"name":"ICollisionIndexPairsSource","href":"Hi.NcMech.ICollisionIndexPairsSource.html","topicHref":"Hi.NcMech.ICollisionIndexPairsSource.html","topicUid":"Hi.NcMech.ICollisionIndexPairsSource","type":"Interface"}]},{"name":"Hi.NcMech.Fixtures","href":"Hi.NcMech.Fixtures.html","topicHref":"Hi.NcMech.Fixtures.html","topicUid":"Hi.NcMech.Fixtures","type":"Namespace","items":[{"name":"Fixture","href":"Hi.NcMech.Fixtures.Fixture.html","topicHref":"Hi.NcMech.Fixtures.Fixture.html","topicUid":"Hi.NcMech.Fixtures.Fixture","type":"Class"},{"name":"FixtureEditorDisplayee","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayee","type":"Class"},{"name":"FixtureEditorDisplayeeConfig","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig","type":"Class"}]},{"name":"Hi.NcMech.Holders","href":"Hi.NcMech.Holders.html","topicHref":"Hi.NcMech.Holders.html","topicUid":"Hi.NcMech.Holders","type":"Namespace","items":[{"name":"CylindroidHolder","href":"Hi.NcMech.Holders.CylindroidHolder.html","topicHref":"Hi.NcMech.Holders.CylindroidHolder.html","topicUid":"Hi.NcMech.Holders.CylindroidHolder","type":"Class"},{"name":"FreeformHolder","href":"Hi.NcMech.Holders.FreeformHolder.html","topicHref":"Hi.NcMech.Holders.FreeformHolder.html","topicUid":"Hi.NcMech.Holders.FreeformHolder","type":"Class"},{"name":"HolderEditorDisplayee","href":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicHref":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicUid":"Hi.NcMech.Holders.HolderEditorDisplayee","type":"Class"},{"name":"IHolder","href":"Hi.NcMech.Holders.IHolder.html","topicHref":"Hi.NcMech.Holders.IHolder.html","topicUid":"Hi.NcMech.Holders.IHolder","type":"Interface"}]},{"name":"Hi.NcMech.Solids","href":"Hi.NcMech.Solids.html","topicHref":"Hi.NcMech.Solids.html","topicUid":"Hi.NcMech.Solids","type":"Namespace","items":[{"name":"IGetSolid","href":"Hi.NcMech.Solids.IGetSolid.html","topicHref":"Hi.NcMech.Solids.IGetSolid.html","topicUid":"Hi.NcMech.Solids.IGetSolid","type":"Interface"},{"name":"Solid","href":"Hi.NcMech.Solids.Solid.html","topicHref":"Hi.NcMech.Solids.Solid.html","topicUid":"Hi.NcMech.Solids.Solid","type":"Class"},{"name":"Solid.RenderingModeEnum","href":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicHref":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicUid":"Hi.NcMech.Solids.Solid.RenderingModeEnum","type":"Enum"},{"name":"SolidFuncSource","href":"Hi.NcMech.Solids.SolidFuncSource.html","topicHref":"Hi.NcMech.Solids.SolidFuncSource.html","topicUid":"Hi.NcMech.Solids.SolidFuncSource","type":"Class"}]},{"name":"Hi.NcMech.Topo","href":"Hi.NcMech.Topo.html","topicHref":"Hi.NcMech.Topo.html","topicUid":"Hi.NcMech.Topo","type":"Namespace","items":[{"name":"INcStroke","href":"Hi.NcMech.Topo.INcStroke.html","topicHref":"Hi.NcMech.Topo.INcStroke.html","topicUid":"Hi.NcMech.Topo.INcStroke","type":"Interface"},{"name":"INcTransformer","href":"Hi.NcMech.Topo.INcTransformer.html","topicHref":"Hi.NcMech.Topo.INcTransformer.html","topicUid":"Hi.NcMech.Topo.INcTransformer","type":"Interface"},{"name":"ITopoBrick","href":"Hi.NcMech.Topo.ITopoBrick.html","topicHref":"Hi.NcMech.Topo.ITopoBrick.html","topicUid":"Hi.NcMech.Topo.ITopoBrick","type":"Interface"},{"name":"NcRotation","href":"Hi.NcMech.Topo.NcRotation.html","topicHref":"Hi.NcMech.Topo.NcRotation.html","topicUid":"Hi.NcMech.Topo.NcRotation","type":"Class"},{"name":"NcTranslation","href":"Hi.NcMech.Topo.NcTranslation.html","topicHref":"Hi.NcMech.Topo.NcTranslation.html","topicUid":"Hi.NcMech.Topo.NcTranslation","type":"Class"},{"name":"SolidSourceTopoBrick","href":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.SolidSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.SolidSourceTopoBrick","type":"Class"},{"name":"StlSourceTopoBrick","href":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.StlSourceTopoBrick","type":"Class"}]},{"name":"Hi.NcMech.Workpieces","href":"Hi.NcMech.Workpieces.html","topicHref":"Hi.NcMech.Workpieces.html","topicUid":"Hi.NcMech.Workpieces","type":"Namespace","items":[{"name":"Workpiece","href":"Hi.NcMech.Workpieces.Workpiece.html","topicHref":"Hi.NcMech.Workpieces.Workpiece.html","topicUid":"Hi.NcMech.Workpieces.Workpiece","type":"Class"},{"name":"WorkpieceEditorDisplayee","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee","type":"Class"},{"name":"WorkpieceEditorDisplayeeConfig","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig","type":"Class"},{"name":"WorkpieceService","href":"Hi.NcMech.Workpieces.WorkpieceService.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceService.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceService","type":"Class"}]},{"name":"Hi.NcMech.Xyzabc","href":"Hi.NcMech.Xyzabc.html","topicHref":"Hi.NcMech.Xyzabc.html","topicUid":"Hi.NcMech.Xyzabc","type":"Namespace","items":[{"name":"CodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineTool","type":"Class"},{"name":"CodeXyzabcMachineToolUri","href":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicHref":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri.html","topicUid":"Hi.NcMech.Xyzabc.CodeXyzabcMachineToolUri","type":"Class"},{"name":"GeneralXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool","type":"Class"},{"name":"IGetCodeXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IGetCodeXyzabcMachineTool","type":"Interface"},{"name":"IXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IXyzabcMachineTool","type":"Interface"}]},{"name":"Hi.NcOpt","href":"Hi.NcOpt.html","topicHref":"Hi.NcOpt.html","topicUid":"Hi.NcOpt","type":"Namespace","items":[{"name":"CuttingVelocityOptLimit","href":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.CuttingVelocityOptLimit","type":"Class"},{"name":"FixedFeedPerCycleOptLimit","href":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerCycleOptLimit","type":"Class"},{"name":"FixedFeedPerToothOptLimit","href":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerToothOptLimit","type":"Class"},{"name":"ICutterOptLimitHost","href":"Hi.NcOpt.ICutterOptLimitHost.html","topicHref":"Hi.NcOpt.ICutterOptLimitHost.html","topicUid":"Hi.NcOpt.ICutterOptLimitHost","type":"Interface"},{"name":"ICutterOptOption","href":"Hi.NcOpt.ICutterOptOption.html","topicHref":"Hi.NcOpt.ICutterOptOption.html","topicUid":"Hi.NcOpt.ICutterOptOption","type":"Interface"},{"name":"ICuttingVelocityOptLimit","href":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.ICuttingVelocityOptLimit","type":"Interface"},{"name":"IFeedPerToothOptLimit","href":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.IFeedPerToothOptLimit","type":"Interface"},{"name":"MillingCutterOptOption","href":"Hi.NcOpt.MillingCutterOptOption.html","topicHref":"Hi.NcOpt.MillingCutterOptOption.html","topicUid":"Hi.NcOpt.MillingCutterOptOption","type":"Class"},{"name":"NcOptOption","href":"Hi.NcOpt.NcOptOption.html","topicHref":"Hi.NcOpt.NcOptOption.html","topicUid":"Hi.NcOpt.NcOptOption","type":"Class"},{"name":"NcOptProc","href":"Hi.NcOpt.NcOptProc.html","topicHref":"Hi.NcOpt.NcOptProc.html","topicUid":"Hi.NcOpt.NcOptProc","type":"Class"},{"name":"NcOptimizationEmbeddedLogMode","href":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicHref":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicUid":"Hi.NcOpt.NcOptimizationEmbeddedLogMode","type":"Enum"},{"name":"ShapeBasedCutterOptLimit","href":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicHref":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicUid":"Hi.NcOpt.ShapeBasedCutterOptLimit","type":"Class"}]},{"name":"Hi.NcParsers","href":"Hi.NcParsers.html","topicHref":"Hi.NcParsers.html","topicUid":"Hi.NcParsers","type":"Namespace","items":[{"name":"IGetSentence","href":"Hi.NcParsers.IGetSentence.html","topicHref":"Hi.NcParsers.IGetSentence.html","topicUid":"Hi.NcParsers.IGetSentence","type":"Interface"},{"name":"NcDiagnostic","href":"Hi.NcParsers.NcDiagnostic.html","topicHref":"Hi.NcParsers.NcDiagnostic.html","topicUid":"Hi.NcParsers.NcDiagnostic","type":"Class"},{"name":"NcDiagnosticCategory","href":"Hi.NcParsers.NcDiagnosticCategory.html","topicHref":"Hi.NcParsers.NcDiagnosticCategory.html","topicUid":"Hi.NcParsers.NcDiagnosticCategory","type":"Enum"},{"name":"NcDiagnosticProgress","href":"Hi.NcParsers.NcDiagnosticProgress.html","topicHref":"Hi.NcParsers.NcDiagnosticProgress.html","topicUid":"Hi.NcParsers.NcDiagnosticProgress","type":"Class"},{"name":"NcDiagnosticSeverity","href":"Hi.NcParsers.NcDiagnosticSeverity.html","topicHref":"Hi.NcParsers.NcDiagnosticSeverity.html","topicUid":"Hi.NcParsers.NcDiagnosticSeverity","type":"Enum"},{"name":"Sentence","href":"Hi.NcParsers.Sentence.html","topicHref":"Hi.NcParsers.Sentence.html","topicUid":"Hi.NcParsers.Sentence","type":"Class"},{"name":"SoftNcRunner","href":"Hi.NcParsers.SoftNcRunner.html","topicHref":"Hi.NcParsers.SoftNcRunner.html","topicUid":"Hi.NcParsers.SoftNcRunner","type":"Class"},{"name":"SoftNcUtil","href":"Hi.NcParsers.SoftNcUtil.html","topicHref":"Hi.NcParsers.SoftNcUtil.html","topicUid":"Hi.NcParsers.SoftNcUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys","href":"Hi.NcParsers.Dependencys.html","topicHref":"Hi.NcParsers.Dependencys.html","topicUid":"Hi.NcParsers.Dependencys","type":"Namespace","items":[{"name":"AxisType","href":"Hi.NcParsers.Dependencys.AxisType.html","topicHref":"Hi.NcParsers.Dependencys.AxisType.html","topicUid":"Hi.NcParsers.Dependencys.AxisType","type":"Enum"},{"name":"CncBrandDependency","href":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicHref":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicUid":"Hi.NcParsers.Dependencys.CncBrandDependency","type":"Class"},{"name":"ControllerParameterTableBase","href":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicHref":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicUid":"Hi.NcParsers.Dependencys.ControllerParameterTableBase","type":"Class"},{"name":"HeidenhainDatumTable","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTable","type":"Class"},{"name":"IBlockSkipConfig","href":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.IBlockSkipConfig","type":"Interface"},{"name":"ICannedCycleConfig","href":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicHref":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicUid":"Hi.NcParsers.Dependencys.ICannedCycleConfig","type":"Interface"},{"name":"IHomeMcConfig","href":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IHomeMcConfig","type":"Interface"},{"name":"IIsoCoordinateConfig","href":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig","type":"Interface"},{"name":"IMachineAxisConfig","href":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMachineAxisConfig","type":"Interface"},{"name":"INcDependency","href":"Hi.NcParsers.Dependencys.INcDependency.html","topicHref":"Hi.NcParsers.Dependencys.INcDependency.html","topicUid":"Hi.NcParsers.Dependencys.INcDependency","type":"Interface"},{"name":"IPowerResettable","href":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicHref":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicUid":"Hi.NcParsers.Dependencys.IPowerResettable","type":"Interface"},{"name":"IRapidFeedrateConfig","href":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig","type":"Interface"},{"name":"IStrokeLimitConfig","href":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicHref":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicUid":"Hi.NcParsers.Dependencys.IStrokeLimitConfig","type":"Interface"},{"name":"IToolOffsetConfig","href":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolOffsetConfig","type":"Interface"},{"name":"IToolingMcConfig","href":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolingMcConfig","type":"Interface"},{"name":"IsoCoordinateAddressMap","href":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicHref":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicUid":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Fanuc","href":"Hi.NcParsers.Dependencys.Fanuc.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc","type":"Namespace","items":[{"name":"CutterCompensationType","href":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType","type":"Enum"},{"name":"FanucParameterTable","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable","type":"Class"},{"name":"FanucPositionVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup","type":"Class"},{"name":"FanucToolOffsetVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup","type":"Class"},{"name":"RetainedCommonVariableTable","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Generic","href":"Hi.NcParsers.Dependencys.Generic.html","topicHref":"Hi.NcParsers.Dependencys.Generic.html","topicUid":"Hi.NcParsers.Dependencys.Generic","type":"Namespace","items":[{"name":"FallbackConfig","href":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.FallbackConfig","type":"Class"},{"name":"GenericBlockSkipConfig","href":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig","type":"Class"},{"name":"IsoCoordinateTable","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable","type":"Class"},{"name":"NcKinematicsDependency","href":"Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html","topicHref":"Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html","topicUid":"Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency","type":"Class"},{"name":"ToolOffsetRow","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow","type":"Class"},{"name":"ToolOffsetTable","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable","type":"Class"},{"name":"ToolingMcConfig","href":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Heidenhain","href":"Hi.NcParsers.Dependencys.Heidenhain.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Siemens","href":"Hi.NcParsers.Dependencys.Siemens.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.html","topicUid":"Hi.NcParsers.Dependencys.Siemens","type":"Namespace","items":[{"name":"ISiemensToolOffsetConfig","href":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig","type":"Interface"},{"name":"SiemensFrameTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable","type":"Class"},{"name":"SiemensMachineDataTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Syntec","href":"Hi.NcParsers.Dependencys.Syntec.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.html","topicUid":"Hi.NcParsers.Dependencys.Syntec","type":"Namespace","items":[{"name":"SyntecParameterTable","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable","type":"Class"}]},{"name":"Hi.NcParsers.Initializers","href":"Hi.NcParsers.Initializers.html","topicHref":"Hi.NcParsers.Initializers.html","topicUid":"Hi.NcParsers.Initializers","type":"Namespace","items":[{"name":"HomeMcInitializer","href":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicHref":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicUid":"Hi.NcParsers.Initializers.HomeMcInitializer","type":"Class"},{"name":"INcInitializer","href":"Hi.NcParsers.Initializers.INcInitializer.html","topicHref":"Hi.NcParsers.Initializers.INcInitializer.html","topicUid":"Hi.NcParsers.Initializers.INcInitializer","type":"Interface"},{"name":"StaticInitializer","href":"Hi.NcParsers.Initializers.StaticInitializer.html","topicHref":"Hi.NcParsers.Initializers.StaticInitializer.html","topicUid":"Hi.NcParsers.Initializers.StaticInitializer","type":"Class"}]},{"name":"Hi.NcParsers.InspectionSyntaxs","href":"Hi.NcParsers.InspectionSyntaxs.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.html","topicUid":"Hi.NcParsers.InspectionSyntaxs","type":"Namespace","items":[{"name":"CleanupSyntax","href":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax","type":"Class"},{"name":"ProgramXyzBackfillSyntax","href":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax","type":"Class"},{"name":"SnapshotSyntax","href":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax","type":"Class"},{"name":"UnconsumedCheckSyntax","href":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Keywords","href":"Hi.NcParsers.Keywords.html","topicHref":"Hi.NcParsers.Keywords.html","topicUid":"Hi.NcParsers.Keywords","type":"Namespace","items":[{"name":"BlockSkip","href":"Hi.NcParsers.Keywords.BlockSkip.html","topicHref":"Hi.NcParsers.Keywords.BlockSkip.html","topicUid":"Hi.NcParsers.Keywords.BlockSkip","type":"Class"},{"name":"CannedCycle","href":"Hi.NcParsers.Keywords.CannedCycle.html","topicHref":"Hi.NcParsers.Keywords.CannedCycle.html","topicUid":"Hi.NcParsers.Keywords.CannedCycle","type":"Class"},{"name":"Comment","href":"Hi.NcParsers.Keywords.Comment.html","topicHref":"Hi.NcParsers.Keywords.Comment.html","topicUid":"Hi.NcParsers.Keywords.Comment","type":"Class"},{"name":"CompoundMotion","href":"Hi.NcParsers.Keywords.CompoundMotion.html","topicHref":"Hi.NcParsers.Keywords.CompoundMotion.html","topicUid":"Hi.NcParsers.Keywords.CompoundMotion","type":"Class"},{"name":"Coolant","href":"Hi.NcParsers.Keywords.Coolant.html","topicHref":"Hi.NcParsers.Keywords.Coolant.html","topicUid":"Hi.NcParsers.Keywords.Coolant","type":"Class"},{"name":"CoordinateOffset","href":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.CoordinateOffset","type":"Class"},{"name":"CsScript","href":"Hi.NcParsers.Keywords.CsScript.html","topicHref":"Hi.NcParsers.Keywords.CsScript.html","topicUid":"Hi.NcParsers.Keywords.CsScript","type":"Class"},{"name":"Dwell","href":"Hi.NcParsers.Keywords.Dwell.html","topicHref":"Hi.NcParsers.Keywords.Dwell.html","topicUid":"Hi.NcParsers.Keywords.Dwell","type":"Class"},{"name":"FanucPathSmoothing","href":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.FanucPathSmoothing","type":"Class"},{"name":"Feedrate","href":"Hi.NcParsers.Keywords.Feedrate.html","topicHref":"Hi.NcParsers.Keywords.Feedrate.html","topicUid":"Hi.NcParsers.Keywords.Feedrate","type":"Class"},{"name":"IArcMotionDef","href":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicHref":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicUid":"Hi.NcParsers.Keywords.IArcMotionDef","type":"Interface"},{"name":"ICannedCycleDef","href":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicHref":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicUid":"Hi.NcParsers.Keywords.ICannedCycleDef","type":"Interface"},{"name":"ICompoundMotionDef","href":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicHref":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicUid":"Hi.NcParsers.Keywords.ICompoundMotionDef","type":"Interface"},{"name":"ICoolantDef","href":"Hi.NcParsers.Keywords.ICoolantDef.html","topicHref":"Hi.NcParsers.Keywords.ICoolantDef.html","topicUid":"Hi.NcParsers.Keywords.ICoolantDef","type":"Interface"},{"name":"IDwellDef","href":"Hi.NcParsers.Keywords.IDwellDef.html","topicHref":"Hi.NcParsers.Keywords.IDwellDef.html","topicUid":"Hi.NcParsers.Keywords.IDwellDef","type":"Interface"},{"name":"IFanucPathSmoothingDef","href":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef","type":"Interface"},{"name":"IFeedrateDef","href":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicHref":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicUid":"Hi.NcParsers.Keywords.IFeedrateDef","type":"Interface"},{"name":"IFlagsDef","href":"Hi.NcParsers.Keywords.IFlagsDef.html","topicHref":"Hi.NcParsers.Keywords.IFlagsDef.html","topicUid":"Hi.NcParsers.Keywords.IFlagsDef","type":"Interface"},{"name":"IMachineCoordinateStateDef","href":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef","type":"Interface"},{"name":"IMotionEventDef","href":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionEventDef","type":"Interface"},{"name":"IMotionStateDef","href":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionStateDef","type":"Interface"},{"name":"IParsingDef","href":"Hi.NcParsers.Keywords.IParsingDef.html","topicHref":"Hi.NcParsers.Keywords.IParsingDef.html","topicUid":"Hi.NcParsers.Keywords.IParsingDef","type":"Interface"},{"name":"IPathSmoothingDef","href":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IPathSmoothingDef","type":"Interface"},{"name":"IPlaneSelectDef","href":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicHref":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicUid":"Hi.NcParsers.Keywords.IPlaneSelectDef","type":"Interface"},{"name":"IPositioningDef","href":"Hi.NcParsers.Keywords.IPositioningDef.html","topicHref":"Hi.NcParsers.Keywords.IPositioningDef.html","topicUid":"Hi.NcParsers.Keywords.IPositioningDef","type":"Interface"},{"name":"IProgramEndDef","href":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramEndDef","type":"Interface"},{"name":"IProgramStopDef","href":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramStopDef","type":"Interface"},{"name":"IProgramXyzDef","href":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramXyzDef","type":"Interface"},{"name":"IRadiusCompensationDef","href":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IRadiusCompensationDef","type":"Interface"},{"name":"ISpindleControlDef","href":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleControlDef","type":"Interface"},{"name":"ISpindleOrientationDef","href":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleOrientationDef","type":"Interface"},{"name":"ISpindleSpeedDef","href":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleSpeedDef","type":"Interface"},{"name":"ITiltTransformDef","href":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicHref":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicUid":"Hi.NcParsers.Keywords.ITiltTransformDef","type":"Interface"},{"name":"IToolHeightCompensationDef","href":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IToolHeightCompensationDef","type":"Interface"},{"name":"ITransformationDef","href":"Hi.NcParsers.Keywords.ITransformationDef.html","topicHref":"Hi.NcParsers.Keywords.ITransformationDef.html","topicUid":"Hi.NcParsers.Keywords.ITransformationDef","type":"Interface"},{"name":"IUnitDef","href":"Hi.NcParsers.Keywords.IUnitDef.html","topicHref":"Hi.NcParsers.Keywords.IUnitDef.html","topicUid":"Hi.NcParsers.Keywords.IUnitDef","type":"Interface"},{"name":"IUnparsedTextDef","href":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicHref":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicUid":"Hi.NcParsers.Keywords.IUnparsedTextDef","type":"Interface"},{"name":"IndexNote","href":"Hi.NcParsers.Keywords.IndexNote.html","topicHref":"Hi.NcParsers.Keywords.IndexNote.html","topicUid":"Hi.NcParsers.Keywords.IndexNote","type":"Class"},{"name":"IsoLocalCoordinateOffset","href":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset","type":"Class"},{"name":"MachineCoordinateState","href":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicHref":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicUid":"Hi.NcParsers.Keywords.MachineCoordinateState","type":"Class"},{"name":"MotionEvent","href":"Hi.NcParsers.Keywords.MotionEvent.html","topicHref":"Hi.NcParsers.Keywords.MotionEvent.html","topicUid":"Hi.NcParsers.Keywords.MotionEvent","type":"Class"},{"name":"MotionState","href":"Hi.NcParsers.Keywords.MotionState.html","topicHref":"Hi.NcParsers.Keywords.MotionState.html","topicUid":"Hi.NcParsers.Keywords.MotionState","type":"Class"},{"name":"PathSmoothing","href":"Hi.NcParsers.Keywords.PathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.PathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.PathSmoothing","type":"Class"},{"name":"PlaneSelect","href":"Hi.NcParsers.Keywords.PlaneSelect.html","topicHref":"Hi.NcParsers.Keywords.PlaneSelect.html","topicUid":"Hi.NcParsers.Keywords.PlaneSelect","type":"Class"},{"name":"Positioning","href":"Hi.NcParsers.Keywords.Positioning.html","topicHref":"Hi.NcParsers.Keywords.Positioning.html","topicUid":"Hi.NcParsers.Keywords.Positioning","type":"Class"},{"name":"ProgramBoundary","href":"Hi.NcParsers.Keywords.ProgramBoundary.html","topicHref":"Hi.NcParsers.Keywords.ProgramBoundary.html","topicUid":"Hi.NcParsers.Keywords.ProgramBoundary","type":"Class"},{"name":"ProgramEnd","href":"Hi.NcParsers.Keywords.ProgramEnd.html","topicHref":"Hi.NcParsers.Keywords.ProgramEnd.html","topicUid":"Hi.NcParsers.Keywords.ProgramEnd","type":"Class"},{"name":"ProgramStop","href":"Hi.NcParsers.Keywords.ProgramStop.html","topicHref":"Hi.NcParsers.Keywords.ProgramStop.html","topicUid":"Hi.NcParsers.Keywords.ProgramStop","type":"Class"},{"name":"RadiusCompensation","href":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicHref":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicUid":"Hi.NcParsers.Keywords.RadiusCompensation","type":"Class"},{"name":"SpindleControl","href":"Hi.NcParsers.Keywords.SpindleControl.html","topicHref":"Hi.NcParsers.Keywords.SpindleControl.html","topicUid":"Hi.NcParsers.Keywords.SpindleControl","type":"Class"},{"name":"SpindleOrientation","href":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicHref":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicUid":"Hi.NcParsers.Keywords.SpindleOrientation","type":"Class"},{"name":"SpindleSpeed","href":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicHref":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicUid":"Hi.NcParsers.Keywords.SpindleSpeed","type":"Class"},{"name":"TiltTransform","href":"Hi.NcParsers.Keywords.TiltTransform.html","topicHref":"Hi.NcParsers.Keywords.TiltTransform.html","topicUid":"Hi.NcParsers.Keywords.TiltTransform","type":"Class"},{"name":"ToolHeightCompensation","href":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicHref":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicUid":"Hi.NcParsers.Keywords.ToolHeightCompensation","type":"Class"},{"name":"Unit","href":"Hi.NcParsers.Keywords.Unit.html","topicHref":"Hi.NcParsers.Keywords.Unit.html","topicUid":"Hi.NcParsers.Keywords.Unit","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Fanuc","href":"Hi.NcParsers.Keywords.Fanuc.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.html","topicUid":"Hi.NcParsers.Keywords.Fanuc","type":"Namespace","items":[{"name":"FanucKeywords","href":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicUid":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Generic","href":"Hi.NcParsers.Keywords.Generic.html","topicHref":"Hi.NcParsers.Keywords.Generic.html","topicUid":"Hi.NcParsers.Keywords.Generic","type":"Namespace","items":[{"name":"IsoKeywords","href":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicHref":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicUid":"Hi.NcParsers.Keywords.Generic.IsoKeywords","type":"Class"},{"name":"MotionForm","href":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicHref":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicUid":"Hi.NcParsers.Keywords.Generic.MotionForm","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Heidenhain","href":"Hi.NcParsers.Keywords.Heidenhain.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain","type":"Namespace","items":[{"name":"ICyclDef","href":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef","type":"Interface"}]},{"name":"Hi.NcParsers.Keywords.Siemens","href":"Hi.NcParsers.Keywords.Siemens.html","topicHref":"Hi.NcParsers.Keywords.Siemens.html","topicUid":"Hi.NcParsers.Keywords.Siemens","type":"Namespace","items":[{"name":"SiemensKeywords","href":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs","href":"Hi.NcParsers.LogicSyntaxs.html","topicHref":"Hi.NcParsers.LogicSyntaxs.html","topicUid":"Hi.NcParsers.LogicSyntaxs","type":"Namespace","items":[{"name":"BackBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax","type":"Class"},{"name":"BoringCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax","type":"Class"},{"name":"CannedCycleResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax","type":"Class"},{"name":"CircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax","type":"Class"},{"name":"CoolantSyntax","href":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax","type":"Class"},{"name":"CoordinateOffsetUtil","href":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil","type":"Class"},{"name":"DrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax","type":"Class"},{"name":"FanucPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax","type":"Class"},{"name":"FeedrateSyntax","href":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax","type":"Class"},{"name":"FineBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax","type":"Class"},{"name":"G43p4RtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax","type":"Class"},{"name":"G53p1RotaryPositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax","type":"Class"},{"name":"HighSpeedPeckCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax","type":"Class"},{"name":"IncrementalResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax","type":"Class"},{"name":"IsoCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax","type":"Class"},{"name":"IsoG68RotationSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax","type":"Class"},{"name":"IsoG68p2TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax","type":"Class"},{"name":"IsoLocalCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax","type":"Class"},{"name":"LinearMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax","type":"Class"},{"name":"MachineCoordSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax","type":"Class"},{"name":"McAbcCyclicPathSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax","type":"Class"},{"name":"McAbcSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax","type":"Class"},{"name":"McAbcXyzFallbackSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax","type":"Class"},{"name":"McXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax","type":"Class"},{"name":"PeckDrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax","type":"Class"},{"name":"PivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax","type":"Class"},{"name":"PlaneSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax","type":"Class"},{"name":"PositioningSyntax","href":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax","type":"Class"},{"name":"ProgramEndCleanSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax","type":"Class"},{"name":"ProgramEndSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax","type":"Class"},{"name":"ProgramStopSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax","type":"Class"},{"name":"ProgramXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax","type":"Class"},{"name":"ProgramXyzUtil","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil","type":"Class"},{"name":"ReferenceReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax","type":"Class"},{"name":"RetainedCommonVariableReadingSyntax","href":"Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax","type":"Class"},{"name":"RotaryAxisUtil","href":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil","type":"Class"},{"name":"SpindleSpeedSyntax","href":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax","type":"Class"},{"name":"TappingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax","type":"Class"},{"name":"TiltTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil","type":"Class"},{"name":"ToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax","type":"Class"},{"name":"ToolHeightOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax","type":"Class"},{"name":"UnitModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax","type":"Class"},{"name":"VariableEvaluatorSyntax","href":"Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax","type":"Class"},{"name":"VolatileVariableReadingSyntax","href":"Hi.NcParsers.LogicSyntaxs.VolatileVariableReadingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.VolatileVariableReadingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.VolatileVariableReadingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Evaluation","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation","type":"Namespace","items":[{"name":"EvalResult","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult","type":"Struct"},{"name":"IRuntimeVariableLookup","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.IRuntimeVariableLookup","type":"Interface"},{"name":"IVariableLookup","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.IVariableLookup.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.IVariableLookup.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.IVariableLookup","type":"Interface"},{"name":"NcBinaryExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryExpr","type":"Class"},{"name":"NcBinaryOp","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryOp.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryOp.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcBinaryOp","type":"Enum"},{"name":"NcExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpr","type":"Class"},{"name":"NcExpressionEvaluator","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionEvaluator.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionEvaluator.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionEvaluator","type":"Class"},{"name":"NcExpressionParser","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionParser.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionParser.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcExpressionParser","type":"Class"},{"name":"NcFunctionExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcFunctionExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcFunctionExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcFunctionExpr","type":"Class"},{"name":"NcIndirectVariableExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcIndirectVariableExpr","type":"Class"},{"name":"NcLiteralExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcLiteralExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcLiteralExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcLiteralExpr","type":"Class"},{"name":"NcUnaryExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryExpr","type":"Class"},{"name":"NcUnaryOp","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryOp.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryOp.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcUnaryOp","type":"Enum"},{"name":"NcVariableExpr","href":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcVariableExpr.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcVariableExpr.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Evaluation.NcVariableExpr","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Heidenhain","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Siemens","href":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs","type":"Namespace","items":[{"name":"BlockSkipSyntax","href":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax","type":"Class"},{"name":"CsScriptSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax","type":"Class"},{"name":"FlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax","type":"Class"},{"name":"FloatTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax","type":"Class"},{"name":"HeadIndexSyntax","href":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax","type":"Class"},{"name":"IntegerTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax","type":"Class"},{"name":"NamedVarAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax","type":"Class"},{"name":"NumberedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax","type":"Class"},{"name":"ParameterizedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax","type":"Class"},{"name":"ProgramBoundarySyntax","href":"Hi.NcParsers.ParsingSyntaxs.ProgramBoundarySyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ProgramBoundarySyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ProgramBoundarySyntax","type":"Class"},{"name":"ShrinkIfNoDecimalPointSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax","type":"Class"},{"name":"TagAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax","type":"Class"},{"name":"TagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","type":"Namespace","items":[{"name":"QuoteCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax","type":"Class"},{"name":"TailCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainBlkFormSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax","type":"Class"},{"name":"HeidenhainCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax","type":"Class"},{"name":"HeidenhainCyclDefSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax","type":"Class"},{"name":"HeidenhainFnAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax","type":"Class"},{"name":"HeidenhainLSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax","type":"Class"},{"name":"HeidenhainLblSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax","type":"Class"},{"name":"HeidenhainPlaneSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax","type":"Class"},{"name":"HeidenhainProgramSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax","type":"Class"},{"name":"HeidenhainToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","type":"Namespace","items":[{"name":"HeidenhainDatumSettingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax","type":"Class"},{"name":"HeidenhainDatumShiftSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax","type":"Class"}]},{"name":"Hi.NcParsers.PostLogicSyntaxs","href":"Hi.NcParsers.PostLogicSyntaxs.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs","type":"Namespace","items":[{"name":"ModalCarrySyntax","href":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax","type":"Class"},{"name":"RadiusCompensationSyntax","href":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Segmenters","href":"Hi.NcParsers.Segmenters.html","topicHref":"Hi.NcParsers.Segmenters.html","topicUid":"Hi.NcParsers.Segmenters","type":"Namespace","items":[{"name":"HeidenhainSegmenter","href":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.HeidenhainSegmenter","type":"Class"},{"name":"ISegmenter","href":"Hi.NcParsers.Segmenters.ISegmenter.html","topicHref":"Hi.NcParsers.Segmenters.ISegmenter.html","topicUid":"Hi.NcParsers.Segmenters.ISegmenter","type":"Interface"},{"name":"InlineDelimiterSegmenter","href":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter","type":"Class"},{"name":"SingleLineSegmenter","href":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.SingleLineSegmenter","type":"Class"}]},{"name":"Hi.NcParsers.Semantics","href":"Hi.NcParsers.Semantics.html","topicHref":"Hi.NcParsers.Semantics.html","topicUid":"Hi.NcParsers.Semantics","type":"Namespace","items":[{"name":"ClLinearMotionSemantic","href":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.ClLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.ClLinearMotionSemantic","type":"Class"},{"name":"CompoundMotionSemantic","href":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.CompoundMotionSemantic","type":"Class"},{"name":"CoolantSemantic","href":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicHref":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicUid":"Hi.NcParsers.Semantics.CoolantSemantic","type":"Class"},{"name":"CsScriptBeginSemantic","href":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptBeginSemantic","type":"Class"},{"name":"CsScriptEndSemantic","href":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptEndSemantic","type":"Class"},{"name":"CsScriptSemantic","href":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptSemantic","type":"Class"},{"name":"INcSemantic","href":"Hi.NcParsers.Semantics.INcSemantic.html","topicHref":"Hi.NcParsers.Semantics.INcSemantic.html","topicUid":"Hi.NcParsers.Semantics.INcSemantic","type":"Interface"},{"name":"MachineCoordinateStepSemantic","href":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicHref":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicUid":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic","type":"Class"},{"name":"McArcMotionSemantic","href":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McArcMotionSemantic","type":"Class"},{"name":"McLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McLinearMotionSemantic","type":"Class"},{"name":"SpindleSpeedSemantic","href":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicHref":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicUid":"Hi.NcParsers.Semantics.SpindleSpeedSemantic","type":"Class"},{"name":"StrokeLimitCheckSemantic","href":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicHref":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicUid":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic","type":"Class"},{"name":"ToolChangeSemantic","href":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolChangeSemantic","type":"Class"}]},{"name":"Hi.NcParsers.Syntaxs","href":"Hi.NcParsers.Syntaxs.html","topicHref":"Hi.NcParsers.Syntaxs.html","topicUid":"Hi.NcParsers.Syntaxs","type":"Namespace","items":[{"name":"BundleSyntax","href":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.BundleSyntax","type":"Class"},{"name":"FanucSyntaxUtil","href":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil","type":"Class"},{"name":"GenericSyntaxKit","href":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicHref":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicUid":"Hi.NcParsers.Syntaxs.GenericSyntaxKit","type":"Class"},{"name":"HeidenhainSyntaxUtil","href":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil","type":"Class"},{"name":"IExpandingNcSyntax","href":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax","type":"Interface"},{"name":"INcSyntax","href":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.INcSyntax","type":"Interface"},{"name":"ISituNcSyntax","href":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.ISituNcSyntax","type":"Interface"},{"name":"MazakSyntaxUtil","href":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil","type":"Class"},{"name":"NcSyntaxUtil","href":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.NcSyntaxUtil","type":"Class"},{"name":"SiemensSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil","type":"Class"},{"name":"SyntaxPiece","href":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxPiece","type":"Class"},{"name":"SyntaxStageKeys","href":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxStageKeys","type":"Class"},{"name":"SyntecSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil","type":"Class"},{"name":"TagValue","href":"Hi.NcParsers.Syntaxs.TagValue.html","topicHref":"Hi.NcParsers.Syntaxs.TagValue.html","topicUid":"Hi.NcParsers.Syntaxs.TagValue","type":"Class"},{"name":"TransformationUtil","href":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicHref":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicUid":"Hi.NcParsers.Syntaxs.TransformationUtil","type":"Class"}]},{"name":"Hi.Numerical","href":"Hi.Numerical.html","topicHref":"Hi.Numerical.html","topicUid":"Hi.Numerical","type":"Namespace","items":[{"name":"CncBrand","href":"Hi.Numerical.CncBrand.html","topicHref":"Hi.Numerical.CncBrand.html","topicUid":"Hi.Numerical.CncBrand","type":"Enum"},{"name":"CommentMark","href":"Hi.Numerical.CommentMark.html","topicHref":"Hi.Numerical.CommentMark.html","topicUid":"Hi.Numerical.CommentMark","type":"Enum"},{"name":"CoolantMode","href":"Hi.Numerical.CoolantMode.html","topicHref":"Hi.Numerical.CoolantMode.html","topicUid":"Hi.Numerical.CoolantMode","type":"Enum"},{"name":"CoordinateInterpolationMode","href":"Hi.Numerical.CoordinateInterpolationMode.html","topicHref":"Hi.Numerical.CoordinateInterpolationMode.html","topicUid":"Hi.Numerical.CoordinateInterpolationMode","type":"Enum"},{"name":"FlexDictionaryUtil","href":"Hi.Numerical.FlexDictionaryUtil.html","topicHref":"Hi.Numerical.FlexDictionaryUtil.html","topicUid":"Hi.Numerical.FlexDictionaryUtil","type":"Class"},{"name":"HardNcComment","href":"Hi.Numerical.HardNcComment.html","topicHref":"Hi.Numerical.HardNcComment.html","topicUid":"Hi.Numerical.HardNcComment","type":"Class"},{"name":"HardNcEnv","href":"Hi.Numerical.HardNcEnv.html","topicHref":"Hi.Numerical.HardNcEnv.html","topicUid":"Hi.Numerical.HardNcEnv","type":"Class"},{"name":"HardNcLine","href":"Hi.Numerical.HardNcLine.html","topicHref":"Hi.Numerical.HardNcLine.html","topicUid":"Hi.Numerical.HardNcLine","type":"Class"},{"name":"HardNcUtil","href":"Hi.Numerical.HardNcUtil.html","topicHref":"Hi.Numerical.HardNcUtil.html","topicUid":"Hi.Numerical.HardNcUtil","type":"Class"},{"name":"HeidenhainCoordinateEntryDisplayee","href":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.HeidenhainCoordinateEntryDisplayee","type":"Class"},{"name":"IControlRunner","href":"Hi.Numerical.IControlRunner.html","topicHref":"Hi.Numerical.IControlRunner.html","topicUid":"Hi.Numerical.IControlRunner","type":"Interface"},{"name":"IFlexDictionaryHost","href":"Hi.Numerical.IFlexDictionaryHost-1.html","topicHref":"Hi.Numerical.IFlexDictionaryHost-1.html","topicUid":"Hi.Numerical.IFlexDictionaryHost`1","type":"Interface"},{"name":"IGetFeedrate","href":"Hi.Numerical.IGetFeedrate.html","topicHref":"Hi.Numerical.IGetFeedrate.html","topicUid":"Hi.Numerical.IGetFeedrate","type":"Interface"},{"name":"IGetSpindleSpeed","href":"Hi.Numerical.IGetSpindleSpeed.html","topicHref":"Hi.Numerical.IGetSpindleSpeed.html","topicUid":"Hi.Numerical.IGetSpindleSpeed","type":"Interface"},{"name":"ISetFeedrate","href":"Hi.Numerical.ISetFeedrate.html","topicHref":"Hi.Numerical.ISetFeedrate.html","topicUid":"Hi.Numerical.ISetFeedrate","type":"Interface"},{"name":"ISetSpindleSpeed","href":"Hi.Numerical.ISetSpindleSpeed.html","topicHref":"Hi.Numerical.ISetSpindleSpeed.html","topicUid":"Hi.Numerical.ISetSpindleSpeed","type":"Interface"},{"name":"IsoCoordinateEntryDisplayee","href":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicHref":"Hi.Numerical.IsoCoordinateEntryDisplayee.html","topicUid":"Hi.Numerical.IsoCoordinateEntryDisplayee","type":"Class"},{"name":"MechNcUtil","href":"Hi.Numerical.MechNcUtil.html","topicHref":"Hi.Numerical.MechNcUtil.html","topicUid":"Hi.Numerical.MechNcUtil","type":"Class"},{"name":"MillingToolOffsetTable","href":"Hi.Numerical.MillingToolOffsetTable.html","topicHref":"Hi.Numerical.MillingToolOffsetTable.html","topicUid":"Hi.Numerical.MillingToolOffsetTable","type":"Class"},{"name":"MillingToolOffsetTableRow","href":"Hi.Numerical.MillingToolOffsetTableRow.html","topicHref":"Hi.Numerical.MillingToolOffsetTableRow.html","topicUid":"Hi.Numerical.MillingToolOffsetTableRow","type":"Class"},{"name":"NcFlag","href":"Hi.Numerical.NcFlag.html","topicHref":"Hi.Numerical.NcFlag.html","topicUid":"Hi.Numerical.NcFlag","type":"Enum"},{"name":"NcFlagUtil","href":"Hi.Numerical.NcFlagUtil.html","topicHref":"Hi.Numerical.NcFlagUtil.html","topicUid":"Hi.Numerical.NcFlagUtil","type":"Class"},{"name":"NcGroup00","href":"Hi.Numerical.NcGroup00.html","topicHref":"Hi.Numerical.NcGroup00.html","topicUid":"Hi.Numerical.NcGroup00","type":"Enum"},{"name":"NcGroup01","href":"Hi.Numerical.NcGroup01.html","topicHref":"Hi.Numerical.NcGroup01.html","topicUid":"Hi.Numerical.NcGroup01","type":"Enum"},{"name":"NcGroup02","href":"Hi.Numerical.NcGroup02.html","topicHref":"Hi.Numerical.NcGroup02.html","topicUid":"Hi.Numerical.NcGroup02","type":"Enum"},{"name":"NcGroup03","href":"Hi.Numerical.NcGroup03.html","topicHref":"Hi.Numerical.NcGroup03.html","topicUid":"Hi.Numerical.NcGroup03","type":"Enum"},{"name":"NcGroup05","href":"Hi.Numerical.NcGroup05.html","topicHref":"Hi.Numerical.NcGroup05.html","topicUid":"Hi.Numerical.NcGroup05","type":"Enum"},{"name":"NcGroup06","href":"Hi.Numerical.NcGroup06.html","topicHref":"Hi.Numerical.NcGroup06.html","topicUid":"Hi.Numerical.NcGroup06","type":"Enum"},{"name":"NcGroup07","href":"Hi.Numerical.NcGroup07.html","topicHref":"Hi.Numerical.NcGroup07.html","topicUid":"Hi.Numerical.NcGroup07","type":"Enum"},{"name":"NcGroup08","href":"Hi.Numerical.NcGroup08.html","topicHref":"Hi.Numerical.NcGroup08.html","topicUid":"Hi.Numerical.NcGroup08","type":"Enum"},{"name":"NcGroup09","href":"Hi.Numerical.NcGroup09.html","topicHref":"Hi.Numerical.NcGroup09.html","topicUid":"Hi.Numerical.NcGroup09","type":"Enum"},{"name":"NcGroup10","href":"Hi.Numerical.NcGroup10.html","topicHref":"Hi.Numerical.NcGroup10.html","topicUid":"Hi.Numerical.NcGroup10","type":"Enum"},{"name":"NcGroup13","href":"Hi.Numerical.NcGroup13.html","topicHref":"Hi.Numerical.NcGroup13.html","topicUid":"Hi.Numerical.NcGroup13","type":"Enum"},{"name":"NcGroup14","href":"Hi.Numerical.NcGroup14.html","topicHref":"Hi.Numerical.NcGroup14.html","topicUid":"Hi.Numerical.NcGroup14","type":"Enum"},{"name":"NcGroup15","href":"Hi.Numerical.NcGroup15.html","topicHref":"Hi.Numerical.NcGroup15.html","topicUid":"Hi.Numerical.NcGroup15","type":"Enum"},{"name":"NcGroup16","href":"Hi.Numerical.NcGroup16.html","topicHref":"Hi.Numerical.NcGroup16.html","topicUid":"Hi.Numerical.NcGroup16","type":"Enum"},{"name":"NcGroup21","href":"Hi.Numerical.NcGroup21.html","topicHref":"Hi.Numerical.NcGroup21.html","topicUid":"Hi.Numerical.NcGroup21","type":"Enum"},{"name":"NcGroupAttribute","href":"Hi.Numerical.NcGroupAttribute.html","topicHref":"Hi.Numerical.NcGroupAttribute.html","topicUid":"Hi.Numerical.NcGroupAttribute","type":"Class"},{"name":"NcGroupHeidenhainM107M108","href":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicHref":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicUid":"Hi.Numerical.NcGroupHeidenhainM107M108","type":"Enum"},{"name":"NcGroupHeidenhainPlane","href":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicHref":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicUid":"Hi.Numerical.NcGroupHeidenhainPlane","type":"Enum"},{"name":"NcGroupHeidenhainShortestRotaryPath","href":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicHref":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicUid":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath","type":"Enum"},{"name":"NcGroupSpindleRotation","href":"Hi.Numerical.NcGroupSpindleRotation.html","topicHref":"Hi.Numerical.NcGroupSpindleRotation.html","topicUid":"Hi.Numerical.NcGroupSpindleRotation","type":"Enum"},{"name":"NcLifeCycleAttribute","href":"Hi.Numerical.NcLifeCycleAttribute.html","topicHref":"Hi.Numerical.NcLifeCycleAttribute.html","topicUid":"Hi.Numerical.NcLifeCycleAttribute","type":"Class"},{"name":"NcLifeCycleMode","href":"Hi.Numerical.NcLifeCycleMode.html","topicHref":"Hi.Numerical.NcLifeCycleMode.html","topicUid":"Hi.Numerical.NcLifeCycleMode","type":"Enum"},{"name":"NcNameAttribute","href":"Hi.Numerical.NcNameAttribute.html","topicHref":"Hi.Numerical.NcNameAttribute.html","topicUid":"Hi.Numerical.NcNameAttribute","type":"Class"},{"name":"NcNoteCache","href":"Hi.Numerical.NcNoteCache.html","topicHref":"Hi.Numerical.NcNoteCache.html","topicUid":"Hi.Numerical.NcNoteCache","type":"Class"},{"name":"NcProc","href":"Hi.Numerical.NcProc.html","topicHref":"Hi.Numerical.NcProc.html","topicUid":"Hi.Numerical.NcProc","type":"Class"},{"name":"NcWarningSceneEnum","href":"Hi.Numerical.NcWarningSceneEnum.html","topicHref":"Hi.Numerical.NcWarningSceneEnum.html","topicUid":"Hi.Numerical.NcWarningSceneEnum","type":"Enum"},{"name":"NumericUtil","href":"Hi.Numerical.NumericUtil.html","topicHref":"Hi.Numerical.NumericUtil.html","topicUid":"Hi.Numerical.NumericUtil","type":"Class"},{"name":"PolarEntry","href":"Hi.Numerical.PolarEntry.html","topicHref":"Hi.Numerical.PolarEntry.html","topicUid":"Hi.Numerical.PolarEntry","type":"Class"},{"name":"RadiusCompensationBuf","href":"Hi.Numerical.RadiusCompensationBuf.html","topicHref":"Hi.Numerical.RadiusCompensationBuf.html","topicUid":"Hi.Numerical.RadiusCompensationBuf","type":"Class"},{"name":"SourcedActEntry","href":"Hi.Numerical.SourcedActEntry.html","topicHref":"Hi.Numerical.SourcedActEntry.html","topicUid":"Hi.Numerical.SourcedActEntry","type":"Class"},{"name":"SpindleDirection","href":"Hi.Numerical.SpindleDirection.html","topicHref":"Hi.Numerical.SpindleDirection.html","topicUid":"Hi.Numerical.SpindleDirection","type":"Enum"},{"name":"SubStringKit","href":"Hi.Numerical.SubStringKit.html","topicHref":"Hi.Numerical.SubStringKit.html","topicUid":"Hi.Numerical.SubStringKit","type":"Class"},{"name":"SubStringKit.ActivationMode","href":"Hi.Numerical.SubStringKit.ActivationMode.html","topicHref":"Hi.Numerical.SubStringKit.ActivationMode.html","topicUid":"Hi.Numerical.SubStringKit.ActivationMode","type":"Enum"},{"name":"ToolConfigNotFoundException","href":"Hi.Numerical.ToolConfigNotFoundException.html","topicHref":"Hi.Numerical.ToolConfigNotFoundException.html","topicUid":"Hi.Numerical.ToolConfigNotFoundException","type":"Class"}]},{"name":"Hi.Numerical.Acts","href":"Hi.Numerical.Acts.html","topicHref":"Hi.Numerical.Acts.html","topicUid":"Hi.Numerical.Acts","type":"Namespace","items":[{"name":"ActActualTime","href":"Hi.Numerical.Acts.ActActualTime.html","topicHref":"Hi.Numerical.Acts.ActActualTime.html","topicUid":"Hi.Numerical.Acts.ActActualTime","type":"Class"},{"name":"ActClArc","href":"Hi.Numerical.Acts.ActClArc.html","topicHref":"Hi.Numerical.Acts.ActClArc.html","topicUid":"Hi.Numerical.Acts.ActClArc","type":"Class"},{"name":"ActClDerivedMcXyzabcContour","href":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClDerivedMcXyzabcContour","type":"Class"},{"name":"ActClLinear","href":"Hi.Numerical.Acts.ActClLinear.html","topicHref":"Hi.Numerical.Acts.ActClLinear.html","topicUid":"Hi.Numerical.Acts.ActClLinear","type":"Class"},{"name":"ActClStep","href":"Hi.Numerical.Acts.ActClStep.html","topicHref":"Hi.Numerical.Acts.ActClStep.html","topicUid":"Hi.Numerical.Acts.ActClStep","type":"Class"},{"name":"ActClTeleport","href":"Hi.Numerical.Acts.ActClTeleport.html","topicHref":"Hi.Numerical.Acts.ActClTeleport.html","topicUid":"Hi.Numerical.Acts.ActClTeleport","type":"Class"},{"name":"ActCooling","href":"Hi.Numerical.Acts.ActCooling.html","topicHref":"Hi.Numerical.Acts.ActCooling.html","topicUid":"Hi.Numerical.Acts.ActCooling","type":"Class"},{"name":"ActData","href":"Hi.Numerical.Acts.ActData.html","topicHref":"Hi.Numerical.Acts.ActData.html","topicUid":"Hi.Numerical.Acts.ActData","type":"Class"},{"name":"ActDelay","href":"Hi.Numerical.Acts.ActDelay.html","topicHref":"Hi.Numerical.Acts.ActDelay.html","topicUid":"Hi.Numerical.Acts.ActDelay","type":"Class"},{"name":"ActFeedrate","href":"Hi.Numerical.Acts.ActFeedrate.html","topicHref":"Hi.Numerical.Acts.ActFeedrate.html","topicUid":"Hi.Numerical.Acts.ActFeedrate","type":"Class"},{"name":"ActHiddenStateChanged","href":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicHref":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicUid":"Hi.Numerical.Acts.ActHiddenStateChanged","type":"Class"},{"name":"ActIntentionalSkip","href":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicHref":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicUid":"Hi.Numerical.Acts.ActIntentionalSkip","type":"Class"},{"name":"ActLineBegin","href":"Hi.Numerical.Acts.ActLineBegin.html","topicHref":"Hi.Numerical.Acts.ActLineBegin.html","topicUid":"Hi.Numerical.Acts.ActLineBegin","type":"Class"},{"name":"ActLineCsScript","href":"Hi.Numerical.Acts.ActLineCsScript.html","topicHref":"Hi.Numerical.Acts.ActLineCsScript.html","topicUid":"Hi.Numerical.Acts.ActLineCsScript","type":"Class"},{"name":"ActLineEnd","href":"Hi.Numerical.Acts.ActLineEnd.html","topicHref":"Hi.Numerical.Acts.ActLineEnd.html","topicUid":"Hi.Numerical.Acts.ActLineEnd","type":"Class"},{"name":"ActMcPolarLinearContour","href":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarLinearContour","type":"Class"},{"name":"ActMcXyzLinearContour","href":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzLinearContour","type":"Class"},{"name":"ActMcXyzSpiralContour","href":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzSpiralContour","type":"Class"},{"name":"ActMcXyzStep","href":"Hi.Numerical.Acts.ActMcXyzStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzStep","type":"Class"},{"name":"ActMcXyzabcLinearContour","href":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcLinearContour","type":"Class"},{"name":"ActMcXyzabcStep","href":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcStep","type":"Class"},{"name":"ActRapid","href":"Hi.Numerical.Acts.ActRapid.html","topicHref":"Hi.Numerical.Acts.ActRapid.html","topicUid":"Hi.Numerical.Acts.ActRapid","type":"Class"},{"name":"ActSpindleDirection","href":"Hi.Numerical.Acts.ActSpindleDirection.html","topicHref":"Hi.Numerical.Acts.ActSpindleDirection.html","topicUid":"Hi.Numerical.Acts.ActSpindleDirection","type":"Class"},{"name":"ActSpindleOrientation","href":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicHref":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicUid":"Hi.Numerical.Acts.ActSpindleOrientation","type":"Class"},{"name":"ActSpindleSpeed","href":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicHref":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicUid":"Hi.Numerical.Acts.ActSpindleSpeed","type":"Class"},{"name":"ActToolingStep","href":"Hi.Numerical.Acts.ActToolingStep.html","topicHref":"Hi.Numerical.Acts.ActToolingStep.html","topicUid":"Hi.Numerical.Acts.ActToolingStep","type":"Class"},{"name":"ActToolingTeleport","href":"Hi.Numerical.Acts.ActToolingTeleport.html","topicHref":"Hi.Numerical.Acts.ActToolingTeleport.html","topicUid":"Hi.Numerical.Acts.ActToolingTeleport","type":"Class"},{"name":"ActUnknownSkip","href":"Hi.Numerical.Acts.ActUnknownSkip.html","topicHref":"Hi.Numerical.Acts.ActUnknownSkip.html","topicUid":"Hi.Numerical.Acts.ActUnknownSkip","type":"Class"},{"name":"ActUtil","href":"Hi.Numerical.Acts.ActUtil.html","topicHref":"Hi.Numerical.Acts.ActUtil.html","topicUid":"Hi.Numerical.Acts.ActUtil","type":"Class"},{"name":"IAct","href":"Hi.Numerical.Acts.IAct.html","topicHref":"Hi.Numerical.Acts.IAct.html","topicUid":"Hi.Numerical.Acts.IAct","type":"Interface"},{"name":"IActClMove","href":"Hi.Numerical.Acts.IActClMove.html","topicHref":"Hi.Numerical.Acts.IActClMove.html","topicUid":"Hi.Numerical.Acts.IActClMove","type":"Interface"},{"name":"IActDuration","href":"Hi.Numerical.Acts.IActDuration.html","topicHref":"Hi.Numerical.Acts.IActDuration.html","topicUid":"Hi.Numerical.Acts.IActDuration","type":"Interface"},{"name":"IActMachineStep","href":"Hi.Numerical.Acts.IActMachineStep.html","topicHref":"Hi.Numerical.Acts.IActMachineStep.html","topicUid":"Hi.Numerical.Acts.IActMachineStep","type":"Interface"},{"name":"IActMcXyzContour","href":"Hi.Numerical.Acts.IActMcXyzContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzContour","type":"Interface"},{"name":"IActMcXyzabcContour","href":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzabcContour","type":"Interface"},{"name":"IActSkip","href":"Hi.Numerical.Acts.IActSkip.html","topicHref":"Hi.Numerical.Acts.IActSkip.html","topicUid":"Hi.Numerical.Acts.IActSkip","type":"Interface"},{"name":"IActTooling","href":"Hi.Numerical.Acts.IActTooling.html","topicHref":"Hi.Numerical.Acts.IActTooling.html","topicUid":"Hi.Numerical.Acts.IActTooling","type":"Interface"},{"name":"IWorkTimeAttrib","href":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicHref":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicUid":"Hi.Numerical.Acts.IWorkTimeAttrib","type":"Interface"},{"name":"IWorkTimeGetter","href":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeGetter","type":"Interface"},{"name":"IWorkTimeSetter","href":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeSetter","type":"Interface"},{"name":"StateActRunner","href":"Hi.Numerical.Acts.StateActRunner.html","topicHref":"Hi.Numerical.Acts.StateActRunner.html","topicUid":"Hi.Numerical.Acts.StateActRunner","type":"Class"}]},{"name":"Hi.Numerical.Args","href":"Hi.Numerical.Args.html","topicHref":"Hi.Numerical.Args.html","topicUid":"Hi.Numerical.Args","type":"Namespace","items":[{"name":"OrthogonalPlaneFlag","href":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicHref":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicUid":"Hi.Numerical.Args.OrthogonalPlaneFlag","type":"Enum"},{"name":"PolarModeDirEnum","href":"Hi.Numerical.Args.PolarModeDirEnum.html","topicHref":"Hi.Numerical.Args.PolarModeDirEnum.html","topicUid":"Hi.Numerical.Args.PolarModeDirEnum","type":"Enum"}]},{"name":"Hi.Numerical.FilePlayers","href":"Hi.Numerical.FilePlayers.html","topicHref":"Hi.Numerical.FilePlayers.html","topicUid":"Hi.Numerical.FilePlayers","type":"Namespace","items":[{"name":"CsvRunner","href":"Hi.Numerical.FilePlayers.CsvRunner.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunner.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunner","type":"Class"},{"name":"CsvRunnerConfig","href":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicHref":"Hi.Numerical.FilePlayers.CsvRunnerConfig.html","topicUid":"Hi.Numerical.FilePlayers.CsvRunnerConfig","type":"Class"},{"name":"HardNcRunner","href":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicHref":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicUid":"Hi.Numerical.FilePlayers.HardNcRunner","type":"Class"}]},{"name":"Hi.Numerical.MachiningMotionResolutionUtils","href":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils","type":"Namespace","items":[{"name":"FeedPerCycleMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution","type":"Class"},{"name":"FeedPerToothMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution","type":"Class"},{"name":"FixedMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution","type":"Class"},{"name":"IMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution","type":"Interface"}]},{"name":"Hi.Numerical.NcArgs","href":"Hi.Numerical.NcArgs.html","topicHref":"Hi.Numerical.NcArgs.html","topicUid":"Hi.Numerical.NcArgs","type":"Namespace","items":[{"name":"ArcNcArg","href":"Hi.Numerical.NcArgs.ArcNcArg.html","topicHref":"Hi.Numerical.NcArgs.ArcNcArg.html","topicUid":"Hi.Numerical.NcArgs.ArcNcArg","type":"Class"},{"name":"G28Arg","href":"Hi.Numerical.NcArgs.G28Arg.html","topicHref":"Hi.Numerical.NcArgs.G28Arg.html","topicUid":"Hi.Numerical.NcArgs.G28Arg","type":"Class"},{"name":"Group07NcArg","href":"Hi.Numerical.NcArgs.Group07NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group07NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group07NcArg","type":"Class"},{"name":"Group09NcArg","href":"Hi.Numerical.NcArgs.Group09NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group09NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group09NcArg","type":"Class"},{"name":"HeidenhainCycleDef7Arg","href":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg","type":"Class"},{"name":"HeidenhainPlaneSpatialArg","href":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg","type":"Class"},{"name":"IHeidenhainBlockCacheArg","href":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg","type":"Interface"},{"name":"IHeidenhainPlaneArg","href":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg","type":"Interface"},{"name":"ITiltPlaneNcArg","href":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicHref":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicUid":"Hi.Numerical.NcArgs.ITiltPlaneNcArg","type":"Interface"},{"name":"NcArgCycle800","href":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicHref":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicUid":"Hi.Numerical.NcArgs.NcArgCycle800","type":"Class"},{"name":"NcArgG68","href":"Hi.Numerical.NcArgs.NcArgG68.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68","type":"Class"},{"name":"NcArgG68p2","href":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68p2","type":"Class"},{"name":"NcArgSiemensFrame","href":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicHref":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicUid":"Hi.Numerical.NcArgs.NcArgSiemensFrame","type":"Class"},{"name":"PausingNcArg","href":"Hi.Numerical.NcArgs.PausingNcArg.html","topicHref":"Hi.Numerical.NcArgs.PausingNcArg.html","topicUid":"Hi.Numerical.NcArgs.PausingNcArg","type":"Class"}]},{"name":"Hi.Numerical.StepSelectionUtils","href":"Hi.Numerical.StepSelectionUtils.html","topicHref":"Hi.Numerical.StepSelectionUtils.html","topicUid":"Hi.Numerical.StepSelectionUtils","type":"Namespace","items":[{"name":"AnchorMode","href":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicHref":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicUid":"Hi.Numerical.StepSelectionUtils.AnchorMode","type":"Enum"},{"name":"BoundSelector","href":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelector","type":"Class"},{"name":"BoundSelectorHost","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost","type":"Class"},{"name":"BoundSelectorPair","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair","type":"Class"},{"name":"BoundSelectorPair.BoundLocale","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale","type":"Enum"},{"name":"BoundSelectorStepSectionBundle","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle","type":"Class"},{"name":"BoundSelectorUtil","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil","type":"Class"},{"name":"DistanceShift","href":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.DistanceShift","type":"Class"},{"name":"IStepShift","href":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.IStepShift","type":"Interface"},{"name":"TimeShift","href":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.TimeShift","type":"Class"}]},{"name":"Hi.Numerical.Xyzabc","href":"Hi.Numerical.Xyzabc.html","topicHref":"Hi.Numerical.Xyzabc.html","topicUid":"Hi.Numerical.Xyzabc","type":"Namespace","items":[{"name":"Abc","href":"Hi.Numerical.Xyzabc.Abc.html","topicHref":"Hi.Numerical.Xyzabc.Abc.html","topicUid":"Hi.Numerical.Xyzabc.Abc","type":"Struct"},{"name":"CodeXyzabcChain","href":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.CodeXyzabcChain","type":"Class"},{"name":"GeneralXyzabcChain","href":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.GeneralXyzabcChain","type":"Class"},{"name":"IGetMcXyzabc","href":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.IGetMcXyzabc","type":"Interface"},{"name":"IGetXyzabcChain","href":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IGetXyzabcChain","type":"Interface"},{"name":"IMachineKinematics","href":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicHref":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicUid":"Hi.Numerical.Xyzabc.IMachineKinematics","type":"Interface"},{"name":"ISetMcXyzabc","href":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.ISetMcXyzabc","type":"Interface"},{"name":"IXyzabcChain","href":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IXyzabcChain","type":"Interface"},{"name":"ReflectedXyzabcChain","href":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain","type":"Class"},{"name":"XyzabcSolver","href":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcSolver","type":"Class"},{"name":"XyzabcUtil","href":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcUtil","type":"Class"}]},{"name":"Hi.PanelModels","href":"Hi.PanelModels.html","topicHref":"Hi.PanelModels.html","topicUid":"Hi.PanelModels","type":"Namespace","items":[{"name":"HiKey","href":"Hi.PanelModels.HiKey.html","topicHref":"Hi.PanelModels.HiKey.html","topicUid":"Hi.PanelModels.HiKey","type":"Enum"},{"name":"HiKeyEvent","href":"Hi.PanelModels.HiKeyEvent.html","topicHref":"Hi.PanelModels.HiKeyEvent.html","topicUid":"Hi.PanelModels.HiKeyEvent","type":"Class"},{"name":"HiModifierKeys","href":"Hi.PanelModels.HiModifierKeys.html","topicHref":"Hi.PanelModels.HiModifierKeys.html","topicUid":"Hi.PanelModels.HiModifierKeys","type":"Enum"},{"name":"HiMouseButton","href":"Hi.PanelModels.HiMouseButton.html","topicHref":"Hi.PanelModels.HiMouseButton.html","topicUid":"Hi.PanelModels.HiMouseButton","type":"Enum"},{"name":"HiMouseButtonEvent","href":"Hi.PanelModels.HiMouseButtonEvent.html","topicHref":"Hi.PanelModels.HiMouseButtonEvent.html","topicUid":"Hi.PanelModels.HiMouseButtonEvent","type":"Class"},{"name":"HiMouseButtonMask","href":"Hi.PanelModels.HiMouseButtonMask.html","topicHref":"Hi.PanelModels.HiMouseButtonMask.html","topicUid":"Hi.PanelModels.HiMouseButtonMask","type":"Enum"},{"name":"HiMouseButtonMaskUtil","href":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicHref":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicUid":"Hi.PanelModels.HiMouseButtonMaskUtil","type":"Class"},{"name":"HiMouseMoveEvent","href":"Hi.PanelModels.HiMouseMoveEvent.html","topicHref":"Hi.PanelModels.HiMouseMoveEvent.html","topicUid":"Hi.PanelModels.HiMouseMoveEvent","type":"Class"},{"name":"HiMouseWheelEvent","href":"Hi.PanelModels.HiMouseWheelEvent.html","topicHref":"Hi.PanelModels.HiMouseWheelEvent.html","topicUid":"Hi.PanelModels.HiMouseWheelEvent","type":"Class"},{"name":"PanelModel","href":"Hi.PanelModels.PanelModel.html","topicHref":"Hi.PanelModels.PanelModel.html","topicUid":"Hi.PanelModels.PanelModel","type":"Class"}]},{"name":"Hi.Parallels","href":"Hi.Parallels.html","topicHref":"Hi.Parallels.html","topicUid":"Hi.Parallels","type":"Namespace","items":[{"name":"CurrentThreadTaskScheduler","href":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicHref":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicUid":"Hi.Parallels.CurrentThreadTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskScheduler","href":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicHref":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicUid":"Hi.Parallels.DistributedQueueTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskStarter","href":"Hi.Parallels.DistributedQueueTaskStarter.html","topicHref":"Hi.Parallels.DistributedQueueTaskStarter.html","topicUid":"Hi.Parallels.DistributedQueueTaskStarter","type":"Class"},{"name":"LockUtil","href":"Hi.Parallels.LockUtil.html","topicHref":"Hi.Parallels.LockUtil.html","topicUid":"Hi.Parallels.LockUtil","type":"Class"},{"name":"PriorityTaskScheduler","href":"Hi.Parallels.PriorityTaskScheduler.html","topicHref":"Hi.Parallels.PriorityTaskScheduler.html","topicUid":"Hi.Parallels.PriorityTaskScheduler","type":"Class"},{"name":"QueueTaskScheduler","href":"Hi.Parallels.QueueTaskScheduler.html","topicHref":"Hi.Parallels.QueueTaskScheduler.html","topicUid":"Hi.Parallels.QueueTaskScheduler","type":"Class"},{"name":"ReaderWriterLockUtil","href":"Hi.Parallels.ReaderWriterLockUtil.html","topicHref":"Hi.Parallels.ReaderWriterLockUtil.html","topicUid":"Hi.Parallels.ReaderWriterLockUtil","type":"Class"},{"name":"SemaphoreUtil","href":"Hi.Parallels.SemaphoreUtil.html","topicHref":"Hi.Parallels.SemaphoreUtil.html","topicUid":"Hi.Parallels.SemaphoreUtil","type":"Class"},{"name":"ThreadSafeSet","href":"Hi.Parallels.ThreadSafeSet-1.html","topicHref":"Hi.Parallels.ThreadSafeSet-1.html","topicUid":"Hi.Parallels.ThreadSafeSet`1","type":"Class"}]},{"name":"Hi.Physics","href":"Hi.Physics.html","topicHref":"Hi.Physics.html","topicUid":"Hi.Physics","type":"Namespace","items":[{"name":"AmpPhase","href":"Hi.Physics.AmpPhase.html","topicHref":"Hi.Physics.AmpPhase.html","topicUid":"Hi.Physics.AmpPhase","type":"Class"},{"name":"CoatingMaterial","href":"Hi.Physics.CoatingMaterial.html","topicHref":"Hi.Physics.CoatingMaterial.html","topicUid":"Hi.Physics.CoatingMaterial","type":"Class"},{"name":"CoolantHeatCondition","href":"Hi.Physics.CoolantHeatCondition.html","topicHref":"Hi.Physics.CoolantHeatCondition.html","topicUid":"Hi.Physics.CoolantHeatCondition","type":"Class"},{"name":"CutterMaterial","href":"Hi.Physics.CutterMaterial.html","topicHref":"Hi.Physics.CutterMaterial.html","topicUid":"Hi.Physics.CutterMaterial","type":"Class"},{"name":"IGetThermalLayerList","href":"Hi.Physics.IGetThermalLayerList.html","topicHref":"Hi.Physics.IGetThermalLayerList.html","topicUid":"Hi.Physics.IGetThermalLayerList","type":"Interface"},{"name":"IStructureMaterial","href":"Hi.Physics.IStructureMaterial.html","topicHref":"Hi.Physics.IStructureMaterial.html","topicUid":"Hi.Physics.IStructureMaterial","type":"Interface"},{"name":"ISuccessivePhysicsBriefAccessor","href":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicHref":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicUid":"Hi.Physics.ISuccessivePhysicsBriefAccessor","type":"Interface"},{"name":"ISurfaceMaterial","href":"Hi.Physics.ISurfaceMaterial.html","topicHref":"Hi.Physics.ISurfaceMaterial.html","topicUid":"Hi.Physics.ISurfaceMaterial","type":"Interface"},{"name":"ITimeGetter","href":"Hi.Physics.ITimeGetter.html","topicHref":"Hi.Physics.ITimeGetter.html","topicUid":"Hi.Physics.ITimeGetter","type":"Interface"},{"name":"MillingTemperatureUtil","href":"Hi.Physics.MillingTemperatureUtil.html","topicHref":"Hi.Physics.MillingTemperatureUtil.html","topicUid":"Hi.Physics.MillingTemperatureUtil","type":"Class"},{"name":"SeqPhysicsBrief","href":"Hi.Physics.SeqPhysicsBrief.html","topicHref":"Hi.Physics.SeqPhysicsBrief.html","topicUid":"Hi.Physics.SeqPhysicsBrief","type":"Class"},{"name":"StructureMaterial","href":"Hi.Physics.StructureMaterial.html","topicHref":"Hi.Physics.StructureMaterial.html","topicUid":"Hi.Physics.StructureMaterial","type":"Class"},{"name":"TemperatureUtil","href":"Hi.Physics.TemperatureUtil.html","topicHref":"Hi.Physics.TemperatureUtil.html","topicUid":"Hi.Physics.TemperatureUtil","type":"Class"},{"name":"TemperatureVsHardness","href":"Hi.Physics.TemperatureVsHardness.html","topicHref":"Hi.Physics.TemperatureVsHardness.html","topicUid":"Hi.Physics.TemperatureVsHardness","type":"Class"},{"name":"ThermalLayer1D","href":"Hi.Physics.ThermalLayer1D.html","topicHref":"Hi.Physics.ThermalLayer1D.html","topicUid":"Hi.Physics.ThermalLayer1D","type":"Class"},{"name":"TimeSeriesUtil","href":"Hi.Physics.TimeSeriesUtil.html","topicHref":"Hi.Physics.TimeSeriesUtil.html","topicUid":"Hi.Physics.TimeSeriesUtil","type":"Class"},{"name":"TimeValue","href":"Hi.Physics.TimeValue.html","topicHref":"Hi.Physics.TimeValue.html","topicUid":"Hi.Physics.TimeValue","type":"Class"},{"name":"WorkpieceMaterial","href":"Hi.Physics.WorkpieceMaterial.html","topicHref":"Hi.Physics.WorkpieceMaterial.html","topicUid":"Hi.Physics.WorkpieceMaterial","type":"Class"}]},{"name":"Hi.ScriptApiUtils","href":"Hi.ScriptApiUtils.html","topicHref":"Hi.ScriptApiUtils.html","topicUid":"Hi.ScriptApiUtils","type":"Namespace","items":[{"name":"ICsScriptApi","href":"Hi.ScriptApiUtils.ICsScriptApi.html","topicHref":"Hi.ScriptApiUtils.ICsScriptApi.html","topicUid":"Hi.ScriptApiUtils.ICsScriptApi","type":"Interface"},{"name":"JsAceAttribute","href":"Hi.ScriptApiUtils.JsAceAttribute.html","topicHref":"Hi.ScriptApiUtils.JsAceAttribute.html","topicUid":"Hi.ScriptApiUtils.JsAceAttribute","type":"Class"}]},{"name":"Hi.ShellCommands","href":"Hi.ShellCommands.html","topicHref":"Hi.ShellCommands.html","topicUid":"Hi.ShellCommands","type":"Namespace","items":[{"name":"EnablingWrapper","href":"Hi.ShellCommands.EnablingWrapper.html","topicHref":"Hi.ShellCommands.EnablingWrapper.html","topicUid":"Hi.ShellCommands.EnablingWrapper","type":"Class"},{"name":"GeomDiffCommand","href":"Hi.ShellCommands.GeomDiffCommand.html","topicHref":"Hi.ShellCommands.GeomDiffCommand.html","topicUid":"Hi.ShellCommands.GeomDiffCommand","type":"Class"},{"name":"IShellCommand","href":"Hi.ShellCommands.IShellCommand.html","topicHref":"Hi.ShellCommands.IShellCommand.html","topicUid":"Hi.ShellCommands.IShellCommand","type":"Interface"},{"name":"ITitleCommand","href":"Hi.ShellCommands.ITitleCommand.html","topicHref":"Hi.ShellCommands.ITitleCommand.html","topicUid":"Hi.ShellCommands.ITitleCommand","type":"Interface"},{"name":"Lang","href":"Hi.ShellCommands.Lang.html","topicHref":"Hi.ShellCommands.Lang.html","topicUid":"Hi.ShellCommands.Lang","type":"Class"},{"name":"ListCommand","href":"Hi.ShellCommands.ListCommand.html","topicHref":"Hi.ShellCommands.ListCommand.html","topicUid":"Hi.ShellCommands.ListCommand","type":"Class"},{"name":"MachiningMotionResolutionCommand","href":"Hi.ShellCommands.MachiningMotionResolutionCommand.html","topicHref":"Hi.ShellCommands.MachiningMotionResolutionCommand.html","topicUid":"Hi.ShellCommands.MachiningMotionResolutionCommand","type":"Class"},{"name":"NcCodeCommand","href":"Hi.ShellCommands.NcCodeCommand.html","topicHref":"Hi.ShellCommands.NcCodeCommand.html","topicUid":"Hi.ShellCommands.NcCodeCommand","type":"Class"},{"name":"NcFileCommand","href":"Hi.ShellCommands.NcFileCommand.html","topicHref":"Hi.ShellCommands.NcFileCommand.html","topicUid":"Hi.ShellCommands.NcFileCommand","type":"Class"},{"name":"NcFileListCommand","href":"Hi.ShellCommands.NcFileListCommand.html","topicHref":"Hi.ShellCommands.NcFileListCommand.html","topicUid":"Hi.ShellCommands.NcFileListCommand","type":"Class"},{"name":"NcOptOptionCommand","href":"Hi.ShellCommands.NcOptOptionCommand.html","topicHref":"Hi.ShellCommands.NcOptOptionCommand.html","topicUid":"Hi.ShellCommands.NcOptOptionCommand","type":"Class"},{"name":"OptimizeToFilesCommand","href":"Hi.ShellCommands.OptimizeToFilesCommand.html","topicHref":"Hi.ShellCommands.OptimizeToFilesCommand.html","topicUid":"Hi.ShellCommands.OptimizeToFilesCommand","type":"Class"},{"name":"PostExecutionCommand","href":"Hi.ShellCommands.PostExecutionCommand.html","topicHref":"Hi.ShellCommands.PostExecutionCommand.html","topicUid":"Hi.ShellCommands.PostExecutionCommand","type":"Class"},{"name":"PreSettingCommand","href":"Hi.ShellCommands.PreSettingCommand.html","topicHref":"Hi.ShellCommands.PreSettingCommand.html","topicUid":"Hi.ShellCommands.PreSettingCommand","type":"Class"},{"name":"RecordRuntimeGeomActionEnum","href":"Hi.ShellCommands.RecordRuntimeGeomActionEnum.html","topicHref":"Hi.ShellCommands.RecordRuntimeGeomActionEnum.html","topicUid":"Hi.ShellCommands.RecordRuntimeGeomActionEnum","type":"Enum"},{"name":"RecordRuntimeGeomCommand","href":"Hi.ShellCommands.RecordRuntimeGeomCommand.html","topicHref":"Hi.ShellCommands.RecordRuntimeGeomCommand.html","topicUid":"Hi.ShellCommands.RecordRuntimeGeomCommand","type":"Class"},{"name":"ScriptCommand","href":"Hi.ShellCommands.ScriptCommand.html","topicHref":"Hi.ShellCommands.ScriptCommand.html","topicUid":"Hi.ShellCommands.ScriptCommand","type":"Class"},{"name":"SimpleSessionCommand","href":"Hi.ShellCommands.SimpleSessionCommand.html","topicHref":"Hi.ShellCommands.SimpleSessionCommand.html","topicUid":"Hi.ShellCommands.SimpleSessionCommand","type":"Class"},{"name":"WriteRuntimeGeomToStlCommand","href":"Hi.ShellCommands.WriteRuntimeGeomToStlCommand.html","topicHref":"Hi.ShellCommands.WriteRuntimeGeomToStlCommand.html","topicUid":"Hi.ShellCommands.WriteRuntimeGeomToStlCommand","type":"Class"},{"name":"WriteShotFilesCommand","href":"Hi.ShellCommands.WriteShotFilesCommand.html","topicHref":"Hi.ShellCommands.WriteShotFilesCommand.html","topicUid":"Hi.ShellCommands.WriteShotFilesCommand","type":"Class"},{"name":"WriteStepFilesCommand","href":"Hi.ShellCommands.WriteStepFilesCommand.html","topicHref":"Hi.ShellCommands.WriteStepFilesCommand.html","topicUid":"Hi.ShellCommands.WriteStepFilesCommand","type":"Class"}]},{"name":"Hi.SqliteUtils","href":"Hi.SqliteUtils.html","topicHref":"Hi.SqliteUtils.html","topicUid":"Hi.SqliteUtils","type":"Namespace","items":[{"name":"SqliteIdentityRole","href":"Hi.SqliteUtils.SqliteIdentityRole.html","topicHref":"Hi.SqliteUtils.SqliteIdentityRole.html","topicUid":"Hi.SqliteUtils.SqliteIdentityRole","type":"Class"},{"name":"SqliteIdentityStorage","href":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage","type":"Class"},{"name":"SqliteIdentityStorage.RoleRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow","type":"Class"},{"name":"SqliteIdentityStorage.UserRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow","type":"Class"},{"name":"SqliteIdentityUser","href":"Hi.SqliteUtils.SqliteIdentityUser.html","topicHref":"Hi.SqliteUtils.SqliteIdentityUser.html","topicUid":"Hi.SqliteUtils.SqliteIdentityUser","type":"Class"},{"name":"SqliteRoleStore","href":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicHref":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicUid":"Hi.SqliteUtils.SqliteRoleStore`1","type":"Class"},{"name":"SqliteStepStorage","href":"Hi.SqliteUtils.SqliteStepStorage.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage","type":"Class"},{"name":"SqliteStepStorage.MillingStepLuggageRow","href":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow","type":"Class"},{"name":"SqliteUserStore","href":"Hi.SqliteUtils.SqliteUserStore-1.html","topicHref":"Hi.SqliteUtils.SqliteUserStore-1.html","topicUid":"Hi.SqliteUtils.SqliteUserStore`1","type":"Class"}]},{"name":"Hi.Test","href":"Hi.Test.html","topicHref":"Hi.Test.html","topicUid":"Hi.Test","type":"Namespace","items":[{"name":"TestCollision","href":"Hi.Test.TestCollision.html","topicHref":"Hi.Test.TestCollision.html","topicUid":"Hi.Test.TestCollision","type":"Class"}]},{"name":"Hi.UiExtensions","href":"Hi.UiExtensions.html","topicHref":"Hi.UiExtensions.html","topicUid":"Hi.UiExtensions","type":"Namespace","items":[{"name":"ChartBoundary","href":"Hi.UiExtensions.ChartBoundary.html","topicHref":"Hi.UiExtensions.ChartBoundary.html","topicUid":"Hi.UiExtensions.ChartBoundary","type":"Class"},{"name":"ChartBoundaryEnum","href":"Hi.UiExtensions.ChartBoundaryEnum.html","topicHref":"Hi.UiExtensions.ChartBoundaryEnum.html","topicUid":"Hi.UiExtensions.ChartBoundaryEnum","type":"Enum"},{"name":"NativeVisibility","href":"Hi.UiExtensions.NativeVisibility.html","topicHref":"Hi.UiExtensions.NativeVisibility.html","topicUid":"Hi.UiExtensions.NativeVisibility","type":"Enum"},{"name":"UiUtil","href":"Hi.UiExtensions.UiUtil.html","topicHref":"Hi.UiExtensions.UiUtil.html","topicUid":"Hi.UiExtensions.UiUtil","type":"Class"},{"name":"UiUtil.InvokeFunc","href":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicHref":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicUid":"Hi.UiExtensions.UiUtil.InvokeFunc","type":"Delegate"}]},{"name":"Hi.UniversalNc","href":"Hi.UniversalNc.html","topicHref":"Hi.UniversalNc.html","topicUid":"Hi.UniversalNc","type":"Namespace","items":[{"name":"Lang","href":"Hi.UniversalNc.Lang.html","topicHref":"Hi.UniversalNc.Lang.html","topicUid":"Hi.UniversalNc.Lang","type":"Class"}]},{"name":"Hi.Vibrations","href":"Hi.Vibrations.html","topicHref":"Hi.Vibrations.html","topicUid":"Hi.Vibrations","type":"Namespace","items":[{"name":"AngularVelocityUtil","href":"Hi.Vibrations.AngularVelocityUtil.html","topicHref":"Hi.Vibrations.AngularVelocityUtil.html","topicUid":"Hi.Vibrations.AngularVelocityUtil","type":"Class"},{"name":"ForceAccelAmpPhase","href":"Hi.Vibrations.ForceAccelAmpPhase.html","topicHref":"Hi.Vibrations.ForceAccelAmpPhase.html","topicUid":"Hi.Vibrations.ForceAccelAmpPhase","type":"Class"},{"name":"ForceAccelFourierSeries","href":"Hi.Vibrations.ForceAccelFourierSeries.html","topicHref":"Hi.Vibrations.ForceAccelFourierSeries.html","topicUid":"Hi.Vibrations.ForceAccelFourierSeries","type":"Class"},{"name":"ForceAccelShot","href":"Hi.Vibrations.ForceAccelShot.html","topicHref":"Hi.Vibrations.ForceAccelShot.html","topicUid":"Hi.Vibrations.ForceAccelShot","type":"Class"},{"name":"ForceAccelUtil","href":"Hi.Vibrations.ForceAccelUtil.html","topicHref":"Hi.Vibrations.ForceAccelUtil.html","topicUid":"Hi.Vibrations.ForceAccelUtil","type":"Class"},{"name":"IAngularVelocityOwner","href":"Hi.Vibrations.IAngularVelocityOwner.html","topicHref":"Hi.Vibrations.IAngularVelocityOwner.html","topicUid":"Hi.Vibrations.IAngularVelocityOwner","type":"Interface"},{"name":"VibrationUtil","href":"Hi.Vibrations.VibrationUtil.html","topicHref":"Hi.Vibrations.VibrationUtil.html","topicUid":"Hi.Vibrations.VibrationUtil","type":"Class"},{"name":"WAmpPhase","href":"Hi.Vibrations.WAmpPhase.html","topicHref":"Hi.Vibrations.WAmpPhase.html","topicUid":"Hi.Vibrations.WAmpPhase","type":"Class"},{"name":"WAmpPhaseXyzTransformation","href":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicHref":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicUid":"Hi.Vibrations.WAmpPhaseXyzTransformation","type":"Class"}]},{"name":"Hi.WinForm.Disp","href":"Hi.WinForm.Disp.html","topicHref":"Hi.WinForm.Disp.html","topicUid":"Hi.WinForm.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WinForm.Disp.RenderingCanvas.html","topicHref":"Hi.WinForm.Disp.RenderingCanvas.html","topicUid":"Hi.WinForm.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingForm","href":"Hi.WinForm.Disp.RenderingForm.html","topicHref":"Hi.WinForm.Disp.RenderingForm.html","topicUid":"Hi.WinForm.Disp.RenderingForm","type":"Class"}]},{"name":"Hi.WpfPlus.Disp","href":"Hi.WpfPlus.Disp.html","topicHref":"Hi.WpfPlus.Disp.html","topicUid":"Hi.WpfPlus.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicHref":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicUid":"Hi.WpfPlus.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingWindow","href":"Hi.WpfPlus.Disp.RenderingWindow.html","topicHref":"Hi.WpfPlus.Disp.RenderingWindow.html","topicUid":"Hi.WpfPlus.Disp.RenderingWindow","type":"Class"},{"name":"WpfDispUtil","href":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicHref":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicUid":"Hi.WpfPlus.Disp.WpfDispUtil","type":"Class"}]},{"name":"HiMachining.Milling","href":"HiMachining.Milling.html","topicHref":"HiMachining.Milling.html","topicUid":"HiMachining.Milling","type":"Namespace","items":[{"name":"ClMillingDevice","href":"HiMachining.Milling.ClMillingDevice.html","topicHref":"HiMachining.Milling.ClMillingDevice.html","topicUid":"HiMachining.Milling.ClMillingDevice","type":"Class"}]},{"name":"HiNc.Grpcs","href":"HiNc.Grpcs.html","topicHref":"HiNc.Grpcs.html","topicUid":"HiNc.Grpcs","type":"Namespace","items":[{"name":"MachiningProjectGrpcServer","href":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicHref":"HiNc.Grpcs.MachiningProjectGrpcServer.html","topicUid":"HiNc.Grpcs.MachiningProjectGrpcServer","type":"Class"}]},{"name":"numerical","href":"numerical.html","topicHref":"numerical.html","topicUid":"numerical","type":"Namespace","items":[{"name":"Empty","href":"numerical.Empty.html","topicHref":"numerical.Empty.html","topicUid":"numerical.Empty","type":"Class"},{"name":"GrpcCsvRowDictionary","href":"numerical.GrpcCsvRowDictionary.html","topicHref":"numerical.GrpcCsvRowDictionary.html","topicUid":"numerical.GrpcCsvRowDictionary","type":"Class"},{"name":"GrpcNcStep","href":"numerical.GrpcNcStep.html","topicHref":"numerical.GrpcNcStep.html","topicUid":"numerical.GrpcNcStep","type":"Class"},{"name":"NumericalReflection","href":"numerical.NumericalReflection.html","topicHref":"numerical.NumericalReflection.html","topicUid":"numerical.NumericalReflection","type":"Class"},{"name":"NumericalService","href":"numerical.NumericalService.html","topicHref":"numerical.NumericalService.html","topicUid":"numerical.NumericalService","type":"Class"},{"name":"NumericalService.NumericalServiceBase","href":"numerical.NumericalService.NumericalServiceBase.html","topicHref":"numerical.NumericalService.NumericalServiceBase.html","topicUid":"numerical.NumericalService.NumericalServiceBase","type":"Class"},{"name":"NumericalService.NumericalServiceClient","href":"numerical.NumericalService.NumericalServiceClient.html","topicHref":"numerical.NumericalService.NumericalServiceClient.html","topicUid":"numerical.NumericalService.NumericalServiceClient","type":"Class"},{"name":"UniversalNcReflection","href":"numerical.UniversalNcReflection.html","topicHref":"numerical.UniversalNcReflection.html","topicUid":"numerical.UniversalNcReflection","type":"Class"},{"name":"UniversalNcService","href":"numerical.UniversalNcService.html","topicHref":"numerical.UniversalNcService.html","topicUid":"numerical.UniversalNcService","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceBase","href":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceBase.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceBase","type":"Class"},{"name":"UniversalNcService.UniversalNcServiceClient","href":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicHref":"numerical.UniversalNcService.UniversalNcServiceClient.html","topicUid":"numerical.UniversalNcService.UniversalNcServiceClient","type":"Class"}]}],"memberLayout":"SamePage"} diff --git a/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html b/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html index b2e71437..6fd5a6a1 100644 --- a/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html +++ b/App/wwwroot/HiAPI-docsite/fundamentals/common/xml-io.html @@ -184,7 +184,7 @@ public SpindleCapability(XElement src, string baseDirectory, params object[] res { double r = XmlConvert.ToDouble(contourElem.Attribute("InsistentRatio")?.Value); //600s=10mins - return r ==1?double.PositiveInfinity:(r * 600); + return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements("SpindleSpeedToPower").Select( elem => new Vec2d( diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json index 4a8d8600..cbc8fa45 100644 --- a/App/wwwroot/HiAPI-docsite/index.json +++ b/App/wwwroot/HiAPI-docsite/index.json @@ -52,7 +52,12 @@ "api/Hi.Cbtr.CubeTree.html": { "href": "api/Hi.Cbtr.CubeTree.html", "title": "Class CubeTree | HiAPI-C# 2025", - "summary": "Class CubeTree Namespace Hi.Cbtr Assembly HiCbtr.dll Cube-based data structure. CubeTree has high performance for free-form geometry manipulation include volume removal and addition. public class CubeTree : IDisposable, IDisplayee, ICollidee, ICollidable, IExpandToBox3d, IGetCollidable Inheritance object CubeTree Implements IDisposable IDisplayee ICollidee ICollidable IExpandToBox3d IGetCollidable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CollisionUtil.Detect(CubeTree, TriTree, Mat4d, double, int) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) SweptableUtil.RemoveBySweepingVolume(CubeTree, IGetSweptable, Mat4d, Mat4d, double, double, bool, bool) CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CubeTree(NativeStl, double, CancellationToken, IProgress) Ctor. This ctor is faster than CubeTree(NativeStl, double, CancellationToken, IProgress). public CubeTree(NativeStl stl, double preferredGridWidth, CancellationToken token, IProgress progress) Parameters stl NativeStl Triangle Grid. The triangles must be manifold geometry. preferredGridWidth double The expected resolution. token CancellationToken Cancellation token for the operation progress IProgress Progress reporter for the operation Remarks The applied resolution is equal or smaller than the expected resolution. The applied resolution is c*(2^i). Where c is a constant; i is a integer to make the closest value of the formula. Errors relative to the input geometry are distributed at sharp edges and curved surfaces. CubeTree(Stl, double, CancellationToken, IProgress) Can be initialized with Stl or NativeStl objects; using NativeStl is faster. The input triangle mesh must be manifold geometry, i.e., triangle vertices are aligned with other triangles' vertices, and the geometry must be closed. public CubeTree(Stl stl, double expectedResolution, CancellationToken token, IProgress progress) Parameters stl Stl expectedResolution double Sets the preferred resolution. The actual resolution will be equal to or smaller than the specified value, approximately spaced by powers of 2. Errors relative to the input geometry are distributed at sharp edges and curved surfaces. token CancellationToken Cancellation token for the operation progress IProgress Progress reporter for the operation CubeTree(string) Initializes a new instance of the CubeTree class from a file. public CubeTree(string file) Parameters file string The path to the cube tree file. Fields KeyDll Key dll path. public const string KeyDll = \"hi-key.dll\" Field Value string defaultPreferredGridWidth The default grid_width for the constructor. public const double defaultPreferredGridWidth = 0.0625 Field Value double Properties CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag CubetreePtr Private element. public nint CubetreePtr { get; } Property Value nint DispCacheMb Display cache size in Mb. The cahce cost from graphic card and RAM. public static long DispCacheMb { get; set; } Property Value long Resolution Get initialized resolution. public double Resolution { get; } Property Value double TotalCacheMb Cache size used by CubeTree. Sum of TrisCacheMb and DispCacheMb. TotalCacheMb Setter distributes (2/5 of the setting value) for DispCacheMb. public static long TotalCacheMb { get; set; } Property Value long TrisCacheMb Triangles cache size in Mb. The cache costs from RAM. public static long TrisCacheMb { get; set; } Property Value long Methods CleanCache() Call Hi.Cbtr.CubeTree.CleanTrisCache() and Hi.Cbtr.CubeTree.CleanDispCache_(). public static void CleanCache() CleanDispCachee() Clean display cache of this. public void CleanDispCachee() ContainsInfEdgeCuts() Checks if any existing node in the cube tree contains inf or -inf in its edge_cuts array. public bool ContainsInfEdgeCuts() Returns bool true if any node contains inf or -inf in edge_cuts, false otherwise. Diff(NativeStl, double, RangeColorRule, IProgress) Compares the cube tree with an ideal geometry and returns difference attachments. public ConcurrentBag Diff(NativeStl idealGeom, double diffRadius, RangeColorRule diffRangeColorRule, IProgress progress = null) Parameters idealGeom NativeStl The ideal geometry to compare with. diffRadius double The radius for difference detection. diffRangeColorRule RangeColorRule The color rule for visualizing differences. progress IProgress Progress reporter for the operation. Returns ConcurrentBag A collection of difference attachments. Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box ~CubeTree() dtor protected ~CubeTree() GetCollidable() Gets the collidable object. public ICollidable GetCollidable() Returns ICollidable The collidable object (this instance). GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetInfEdgeCutsInfo() Gets info for all nodes that contain inf or -inf in their edge_cuts array. Each node's box is grouped with its corresponding inf edge indices. This is useful for identifying and visualizing non-manifold geometry issues in the cube tree. public List GetInfEdgeCutsInfo() Returns List A list of node info, each containing a box and its inf edge indices. GetRgbTrisNativeArray(double) Get triangles in type of double array. The returned triangles is non-manifold. It may not be closed model and the apexes of triangle grid may not be overlapped. public double[] GetRgbTrisNativeArray(double resolution = 0) Parameters resolution double The preferred resolution. The real resolution may be smaller or equal the prefered resolution. The real resolution is discrete. The resolution value is at 2^i. The geometric error mainly locate at corner. Returns double[] rgb traingle grid. In sequence of r,g,b,n.x,n.y,n.z,p0.x,p0.y,p0.z,p1.x,p1.y,p1.z,p2.x,p2.y,p2.z, repetitively. A triangle take 15 double. GetTris(double) Get triangles. The returned triangles is non-manifold. It may not be closed model and the apexes of triangle grid may not be overlapped. public List GetTris(double resolution = 0) Parameters resolution double Sets the preferred resolution. The actual resolution will be equal to or smaller than the specified value, approximately spaced by powers of 2. Errors relative to the input geometry are distributed at sharp edges and curved surfaces. A larger resolution results in fewer triangles and faster computation. Returns List Triangle mesh NewWithDefectInfos(NativeStl, double, CancellationToken, IProgress) Creates a new CubeTree and collects defect node infos during construction. public static (CubeTree cubeTree, List defectInfos) NewWithDefectInfos(NativeStl stl, double preferredGridWidth, CancellationToken token, IProgress progress) Parameters stl NativeStl preferredGridWidth double token CancellationToken progress IProgress Returns (CubeTree cubeTree, List defectInfos) NewWithDefectInfos(Stl, double, CancellationToken, IProgress) Creates a new CubeTree and collects defect node infos during construction. public static (CubeTree cubeTree, List defectInfos) NewWithDefectInfos(Stl stl, double preferredGridWidth, CancellationToken token, IProgress progress) Parameters stl Stl preferredGridWidth double token CancellationToken progress IProgress Returns (CubeTree cubeTree, List defectInfos) RebuildAttach(CbtrPickable) Every node in CubeTree can contain one CbtrPickable object. This function put or replace the contained data of all nodes to src. Using UpdateAttach(CbtrPickable) will place nodes that have not yet stored data (CbtrPickable is null) into src. public void RebuildAttach(CbtrPickable src) Parameters src CbtrPickable RemoveFlyPiece() Removes disconnected pieces (fly pieces) from the cube tree. public void RemoveFlyPiece() Substract(CachedTris, double, bool, bool) Using BufferedTris is more efficient than NativeStl. If the resolution of the subtraction region differs from the body's resolution, the lower resolution is applied to that region. public UnmanagedSubstraction Substract(CachedTris cutterBufferedTris, double preferredCubeWidth, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters cutterBufferedTris CachedTris Subtraction geometry preferredCubeWidth double The preferred cube width for the operation. isBuildContactContours bool If true, the returned Substraction contains contour groups at the intersection of the subtraction geometry and the workpiece geometry, which can be used for further analysis. isAggressiveCut bool If true, uses aggressive cutting mode. Returns UnmanagedSubstraction Substract(GeomBoolCache, bool, bool) Subtracts a geometry from the cube tree using a geometry boolean cache. public UnmanagedSubstraction Substract(GeomBoolCache geomBoolCache, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters geomBoolCache GeomBoolCache The geometry boolean cache containing the geometry to subtract. isBuildContactContours bool If true, the returned Substraction will contain contact contours. isAggressiveCut bool If true, uses aggressive cutting mode. Returns UnmanagedSubstraction The result of the subtraction operation. Substract(InitStickConvex, Mat4d, double, bool, bool) Subtracts a stick convex geometry from the cube tree. public UnmanagedSubstraction Substract(InitStickConvex initStickConvex, Mat4d mat, double preferredCubeWidth, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters initStickConvex InitStickConvex The stick convex geometry to subtract. mat Mat4d The transformation matrix to apply to the stick convex. preferredCubeWidth double The preferred cube width for the operation. isBuildContactContours bool If true, the returned Substraction will contain contact contours. isAggressiveCut bool If true, uses aggressive cutting mode. Returns UnmanagedSubstraction The result of the subtraction operation. Substract(NativeStl, double, bool, bool) Same functionality as Substract(BufferedTris,...). Less efficient due to the additional step of converting to CachedTris. public UnmanagedSubstraction Substract(NativeStl cutterStl, double preferredCubeWidth = 0, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters cutterStl NativeStl preferredCubeWidth double isBuildContactContours bool isAggressiveCut bool Returns UnmanagedSubstraction TestDiff(out CubeTree, out NativeStl) Tests the difference calculation between a cube tree and an ideal geometry. public static void TestDiff(out CubeTree cubeTree_, out NativeStl idealGeom_) Parameters cubeTree_ CubeTree The resulting cube tree. idealGeom_ NativeStl The ideal geometry used for comparison. TestIO() Tests the input/output operations for a cube tree. public static CubeTree TestIO() Returns CubeTree The cube tree created or loaded during the test. TestSimpleRemove(out CubeTree) Tests the simple removal operation on a cube tree. public static void TestSimpleRemove(out CubeTree cubeTree_) Parameters cubeTree_ CubeTree The resulting cube tree after the removal operation. UpdateAttach(CbtrPickable) Every node in CubeTree can contain one CbtrPickable object. This function put src to the nodes that contain null. public void UpdateAttach(CbtrPickable src) Parameters src CbtrPickable WriteFile(string) Writes the cube tree to a file. public void WriteFile(string file) Parameters file string The path where the cube tree will be written." + "summary": "Class CubeTree Namespace Hi.Cbtr Assembly HiCbtr.dll Cube-based data structure. CubeTree has high performance for free-form geometry manipulation include volume removal and addition. public class CubeTree : IDisposable, IDisplayee, ICollidee, ICollidable, IExpandToBox3d, IGetCollidable Inheritance object CubeTree Implements IDisposable IDisplayee ICollidee ICollidable IExpandToBox3d IGetCollidable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CubeTreeExportExtensions.ToStl(CubeTree, double) CollisionUtil.Detect(CubeTree, TriTree, Mat4d, double, int) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) SweptableUtil.RemoveBySweepingVolume(CubeTree, IGetSweptable, Mat4d, Mat4d, double, double, bool, bool) CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CubeTree(NativeStl, double, CancellationToken, IProgress) Ctor. This ctor is faster than CubeTree(NativeStl, double, CancellationToken, IProgress). public CubeTree(NativeStl stl, double preferredGridWidth, CancellationToken token, IProgress progress) Parameters stl NativeStl Triangle Grid. The triangles must be manifold geometry. preferredGridWidth double The expected resolution. token CancellationToken Cancellation token for the operation progress IProgress Progress reporter for the operation Remarks The applied resolution is equal or smaller than the expected resolution. The applied resolution is c*(2^i). Where c is a constant; i is a integer to make the closest value of the formula. Errors relative to the input geometry are distributed at sharp edges and curved surfaces. CubeTree(Stl, double, CancellationToken, IProgress) Can be initialized with Stl or NativeStl objects; using NativeStl is faster. The input triangle mesh must be manifold geometry, i.e., triangle vertices are aligned with other triangles' vertices, and the geometry must be closed. public CubeTree(Stl stl, double expectedResolution, CancellationToken token, IProgress progress) Parameters stl Stl expectedResolution double Sets the preferred resolution. The actual resolution will be equal to or smaller than the specified value, approximately spaced by powers of 2. Errors relative to the input geometry are distributed at sharp edges and curved surfaces. token CancellationToken Cancellation token for the operation progress IProgress Progress reporter for the operation CubeTree(string) Initializes a new instance of the CubeTree class from a file. public CubeTree(string file) Parameters file string The path to the cube tree file. Fields KeyDll Key dll path. public const string KeyDll = \"hi-key.dll\" Field Value string defaultPreferredGridWidth The default grid_width for the constructor. public const double defaultPreferredGridWidth = 0.0625 Field Value double Properties CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag CubetreePtr Private element. public nint CubetreePtr { get; } Property Value nint DispCacheMb Display cache size in Mb. The cahce cost from graphic card and RAM. public static long DispCacheMb { get; set; } Property Value long Resolution Get initialized resolution. public double Resolution { get; } Property Value double TotalCacheMb Cache size used by CubeTree. Sum of TrisCacheMb and DispCacheMb. TotalCacheMb Setter distributes (2/5 of the setting value) for DispCacheMb. public static long TotalCacheMb { get; set; } Property Value long TrisCacheMb Triangles cache size in Mb. The cache costs from RAM. public static long TrisCacheMb { get; set; } Property Value long Methods CleanCache() Call Hi.Cbtr.CubeTree.CleanTrisCache() and Hi.Cbtr.CubeTree.CleanDispCache_(). public static void CleanCache() CleanDispCachee() Clean display cache of this. public void CleanDispCachee() ContainsInfEdgeCuts() Checks if any existing node in the cube tree contains inf or -inf in its edge_cuts array. public bool ContainsInfEdgeCuts() Returns bool true if any node contains inf or -inf in edge_cuts, false otherwise. Diff(NativeStl, double, RangeColorRule, IProgress) Compares the cube tree with an ideal geometry and returns difference attachments. public ConcurrentBag Diff(NativeStl idealGeom, double diffRadius, RangeColorRule diffRangeColorRule, IProgress progress = null) Parameters idealGeom NativeStl The ideal geometry to compare with. diffRadius double The radius for difference detection. diffRangeColorRule RangeColorRule The color rule for visualizing differences. progress IProgress Progress reporter for the operation. Returns ConcurrentBag A collection of difference attachments. Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box ~CubeTree() dtor protected ~CubeTree() GetCollidable() Gets the collidable object. public ICollidable GetCollidable() Returns ICollidable The collidable object (this instance). GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetInfEdgeCutsInfo() Gets info for all nodes that contain inf or -inf in their edge_cuts array. Each node's box is grouped with its corresponding inf edge indices. This is useful for identifying and visualizing non-manifold geometry issues in the cube tree. public List GetInfEdgeCutsInfo() Returns List A list of node info, each containing a box and its inf edge indices. GetRgbTrisNativeArray(double) Get triangles in type of double array. The returned triangles is non-manifold. It may not be closed model and the apexes of triangle grid may not be overlapped. public double[] GetRgbTrisNativeArray(double resolution = 0) Parameters resolution double The preferred resolution. The real resolution may be smaller or equal the prefered resolution. The real resolution is discrete. The resolution value is at 2^i. The geometric error mainly locate at corner. Returns double[] rgb traingle grid. In sequence of r,g,b,n.x,n.y,n.z,p0.x,p0.y,p0.z,p1.x,p1.y,p1.z,p2.x,p2.y,p2.z, repetitively. A triangle take 15 double. GetTris(double) Get triangles. The returned triangles is non-manifold. It may not be closed model and the apexes of triangle grid may not be overlapped. public List GetTris(double resolution = 0) Parameters resolution double Sets the preferred resolution. The actual resolution will be equal to or smaller than the specified value, approximately spaced by powers of 2. Errors relative to the input geometry are distributed at sharp edges and curved surfaces. A larger resolution results in fewer triangles and faster computation. Returns List Triangle mesh NewWithDefectInfos(NativeStl, double, CancellationToken, IProgress) Creates a new CubeTree and collects defect node infos during construction. public static (CubeTree cubeTree, List defectInfos) NewWithDefectInfos(NativeStl stl, double preferredGridWidth, CancellationToken token, IProgress progress) Parameters stl NativeStl preferredGridWidth double token CancellationToken progress IProgress Returns (CubeTree cubeTree, List defectInfos) NewWithDefectInfos(Stl, double, CancellationToken, IProgress) Creates a new CubeTree and collects defect node infos during construction. public static (CubeTree cubeTree, List defectInfos) NewWithDefectInfos(Stl stl, double preferredGridWidth, CancellationToken token, IProgress progress) Parameters stl Stl preferredGridWidth double token CancellationToken progress IProgress Returns (CubeTree cubeTree, List defectInfos) RebuildAttach(CbtrPickable) Every node in CubeTree can contain one CbtrPickable object. This function put or replace the contained data of all nodes to src. Using UpdateAttach(CbtrPickable) will place nodes that have not yet stored data (CbtrPickable is null) into src. public void RebuildAttach(CbtrPickable src) Parameters src CbtrPickable RemoveFlyPiece() Removes disconnected pieces (fly pieces) from the cube tree. public void RemoveFlyPiece() Substract(CachedTris, double, bool, bool) Using BufferedTris is more efficient than NativeStl. If the resolution of the subtraction region differs from the body's resolution, the lower resolution is applied to that region. public UnmanagedSubstraction Substract(CachedTris cutterBufferedTris, double preferredCubeWidth, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters cutterBufferedTris CachedTris Subtraction geometry preferredCubeWidth double The preferred cube width for the operation. isBuildContactContours bool If true, the returned Substraction contains contour groups at the intersection of the subtraction geometry and the workpiece geometry, which can be used for further analysis. isAggressiveCut bool If true, uses aggressive cutting mode. Returns UnmanagedSubstraction Substract(GeomBoolCache, bool, bool) Subtracts a geometry from the cube tree using a geometry boolean cache. public UnmanagedSubstraction Substract(GeomBoolCache geomBoolCache, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters geomBoolCache GeomBoolCache The geometry boolean cache containing the geometry to subtract. isBuildContactContours bool If true, the returned Substraction will contain contact contours. isAggressiveCut bool If true, uses aggressive cutting mode. Returns UnmanagedSubstraction The result of the subtraction operation. Substract(InitStickConvex, Mat4d, double, bool, bool) Subtracts a stick convex geometry from the cube tree. public UnmanagedSubstraction Substract(InitStickConvex initStickConvex, Mat4d mat, double preferredCubeWidth, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters initStickConvex InitStickConvex The stick convex geometry to subtract. mat Mat4d The transformation matrix to apply to the stick convex. preferredCubeWidth double The preferred cube width for the operation. isBuildContactContours bool If true, the returned Substraction will contain contact contours. isAggressiveCut bool If true, uses aggressive cutting mode. Returns UnmanagedSubstraction The result of the subtraction operation. Substract(NativeStl, double, bool, bool) Same functionality as Substract(BufferedTris,...). Less efficient due to the additional step of converting to CachedTris. public UnmanagedSubstraction Substract(NativeStl cutterStl, double preferredCubeWidth = 0, bool isBuildContactContours = false, bool isAggressiveCut = false) Parameters cutterStl NativeStl preferredCubeWidth double isBuildContactContours bool isAggressiveCut bool Returns UnmanagedSubstraction TestDiff(out CubeTree, out NativeStl) Tests the difference calculation between a cube tree and an ideal geometry. public static void TestDiff(out CubeTree cubeTree_, out NativeStl idealGeom_) Parameters cubeTree_ CubeTree The resulting cube tree. idealGeom_ NativeStl The ideal geometry used for comparison. TestIO() Tests the input/output operations for a cube tree. public static CubeTree TestIO() Returns CubeTree The cube tree created or loaded during the test. TestSimpleRemove(out CubeTree) Tests the simple removal operation on a cube tree. public static void TestSimpleRemove(out CubeTree cubeTree_) Parameters cubeTree_ CubeTree The resulting cube tree after the removal operation. UpdateAttach(CbtrPickable) Every node in CubeTree can contain one CbtrPickable object. This function put src to the nodes that contain null. public void UpdateAttach(CbtrPickable src) Parameters src CbtrPickable WriteFile(string) Writes the cube tree to a file. public void WriteFile(string file) Parameters file string The path where the cube tree will be written." + }, + "api/Hi.Cbtr.CubeTreeExportExtensions.html": { + "href": "api/Hi.Cbtr.CubeTreeExportExtensions.html", + "title": "Class CubeTreeExportExtensions | HiAPI-C# 2025", + "summary": "Class CubeTreeExportExtensions Namespace Hi.Cbtr Assembly HiCbtr.dll Mesh export helpers for CubeTree. public static class CubeTreeExportExtensions Inheritance object CubeTreeExportExtensions Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ToStl(CubeTree, double) Builds an Stl from the cube tree's surface triangles. Per-triangle face normals are rebuilt before returning. public static Stl ToStl(this CubeTree cubeTree, double resolution = 0) Parameters cubeTree CubeTree Source cube tree. resolution double Preferred resolution; 0 keeps the cube tree's default. Returns Stl STL containing triangles with rebuilt face normals." }, "api/Hi.Cbtr.CubeTreeFile.html": { "href": "api/Hi.Cbtr.CubeTreeFile.html", @@ -117,7 +122,7 @@ "api/Hi.Cbtr.html": { "href": "api/Hi.Cbtr.html", "title": "Namespace Hi.Cbtr | HiAPI-C# 2025", - "summary": "Namespace Hi.Cbtr Classes CachedTris Feature-cached triangle for CubeTree computation. CbtrPickable Pickable of CubeTree grids. ConstructionDefectDisplayee Encapsulates cube tree construction defect results, including both defect data and visualization drawings. CubeTree Cube-based data structure. CubeTree has high performance for free-form geometry manipulation include volume removal and addition. CubeTree.DefectNodeInfo Info for a single defect node detected during cube tree construction. CubeTree.DefectNodeInfo.TriWireInfo A single triangle-wire relation entry within a defect node. CubeTree.InfNodeInfo Info for a single node with inf edge_cuts, containing box and edge indices. CubeTreeFile Represents a file containing cube tree data. DiffAttachment Represents an attachment with a difference value for cube tree. GeomBoolCache Cache for geometry boolean operations. InfDefectDisplayee Encapsulates inf edge cuts defect visualization for a cube tree, including defect boxes, edge segments, and flag drawings. InitStickConvex Represents a stick convex initialization object. LsStl Linear Sweptable Stl. Substraction Represents the result of a volume subtraction operation. UnhighlightablePickable Cbtr un-highlightable pickable. For initailizing purpose by RebuildAttach(CbtrPickable). UnmanagedSubstraction Data about the removing behavior of CubeTree. WireCube For Internal Use Only. Represents a wire cube for display purposes. The edge index follows the C++ cube_node_t pattern: edgeIndex = (dir << 2) | (th1 << 1) | th0 where dir is the edge direction (0=X, 1=Y, 2=Z), th0 is the position flag in (dir+1)%3 direction, th1 is the position flag in (dir+2)%3 direction. Structs CubeTree.DefectTriWireInfoInterop Interop struct matching C++ defect_tri_wire_info_interop_t. CubeTree.TriWireRelationInterop Interop struct matching C++ tri_wire_relation_interop_t. node_diff_t Structure representing a node with a difference value. Interfaces IGetInitStickConvex Interface of GetInitStickConvex(). Enums CachedTris.SweepingMode Defines the mode for sweeping operations. GeomBoolCacheEnum Enumeration of geometry boolean cache types. Delegates CubeTree.diff_response_func_t Delegate for handling difference responses during geometry comparison." + "summary": "Namespace Hi.Cbtr Classes CachedTris Feature-cached triangle for CubeTree computation. CbtrPickable Pickable of CubeTree grids. ConstructionDefectDisplayee Encapsulates cube tree construction defect results, including both defect data and visualization drawings. CubeTree Cube-based data structure. CubeTree has high performance for free-form geometry manipulation include volume removal and addition. CubeTree.DefectNodeInfo Info for a single defect node detected during cube tree construction. CubeTree.DefectNodeInfo.TriWireInfo A single triangle-wire relation entry within a defect node. CubeTree.InfNodeInfo Info for a single node with inf edge_cuts, containing box and edge indices. CubeTreeExportExtensions Mesh export helpers for CubeTree. CubeTreeFile Represents a file containing cube tree data. DiffAttachment Represents an attachment with a difference value for cube tree. GeomBoolCache Cache for geometry boolean operations. InfDefectDisplayee Encapsulates inf edge cuts defect visualization for a cube tree, including defect boxes, edge segments, and flag drawings. InitStickConvex Represents a stick convex initialization object. LsStl Linear Sweptable Stl. Substraction Represents the result of a volume subtraction operation. UnhighlightablePickable Cbtr un-highlightable pickable. For initailizing purpose by RebuildAttach(CbtrPickable). UnmanagedSubstraction Data about the removing behavior of CubeTree. WireCube For Internal Use Only. Represents a wire cube for display purposes. The edge index follows the C++ cube_node_t pattern: edgeIndex = (dir << 2) | (th1 << 1) | th0 where dir is the edge direction (0=X, 1=Y, 2=Z), th0 is the position flag in (dir+1)%3 direction, th1 is the position flag in (dir+2)%3 direction. Structs CubeTree.DefectTriWireInfoInterop Interop struct matching C++ defect_tri_wire_info_interop_t. CubeTree.TriWireRelationInterop Interop struct matching C++ tri_wire_relation_interop_t. node_diff_t Structure representing a node with a difference value. Interfaces IGetInitStickConvex Interface of GetInitStickConvex(). Enums CachedTris.SweepingMode Defines the mode for sweeping operations. GeomBoolCacheEnum Enumeration of geometry boolean cache types. Delegates CubeTree.diff_response_func_t Delegate for handling difference responses during geometry comparison." }, "api/Hi.Cbtr.node_diff_t.html": { "href": "api/Hi.Cbtr.node_diff_t.html", @@ -132,7 +137,7 @@ "api/Hi.Collision.AnchoredCollidablePair.html": { "href": "api/Hi.Collision.AnchoredCollidablePair.html", "title": "Class AnchoredCollidablePair | HiAPI-C# 2025", - "summary": "Class AnchoredCollidablePair Namespace Hi.Collision Assembly HiMech.dll Represents a pair of anchored collidable objects for collision detection. public class AnchoredCollidablePair : IMakeXmlSource Inheritance object AnchoredCollidablePair Implements IMakeXmlSource Inherited Members object.Equals(object, object) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors AnchoredCollidablePair(IAnchoredCollidableBased, IAnchoredCollidableBased) Initializes a new instance of the AnchoredCollidablePair class with two collidable objects. public AnchoredCollidablePair(IAnchoredCollidableBased indexA, IAnchoredCollidableBased indexB) Parameters indexA IAnchoredCollidableBased The first collidable object. indexB IAnchoredCollidableBased The second collidable object. AnchoredCollidablePair(string, IAnchoredCollidableBased, IAnchoredCollidableBased) Initializes a new instance of the AnchoredCollidablePair class with a name and two collidable objects. public AnchoredCollidablePair(string name, IAnchoredCollidableBased indexA, IAnchoredCollidableBased indexB) Parameters name string The name of the pair. indexA IAnchoredCollidableBased The first collidable object. indexB IAnchoredCollidableBased The second collidable object. AnchoredCollidablePair(XElement, string, IProgress, object[]) Initializes a new instance of the AnchoredCollidablePair class from XML. public AnchoredCollidablePair(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The XML element containing the pair data. baseDirectory string The base directory for resolving relative paths. progress IProgress res object[] Additional resources for initialization. Fields XName The XML element name for serialization. public static string XName Field Value string Properties CollisionFlag Gets or sets the collision flag indicating the collision status between the two objects. public CollisionFlag CollisionFlag { get; } Property Value CollisionFlag IndexA Gets the first collidable object in the pair. public IAnchoredCollidableBased IndexA { get; } Property Value IAnchoredCollidableBased IndexB Gets the second collidable object in the pair. public IAnchoredCollidableBased IndexB { get; } Property Value IAnchoredCollidableBased MatAB Gets or sets the transformation matrix from object A to object B. public Mat4d MatAB { get; set; } Property Value Mat4d Name Gets or sets the pair name for UI manipulation. public string Name { get; set; } Property Value string SafeDistance Gets or sets the safe distance between the two collidable objects. public double SafeDistance { get; set; } Property Value double Methods Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. 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." + "summary": "Class AnchoredCollidablePair Namespace Hi.Collision Assembly HiMech.dll Represents a pair of anchored collidable objects for collision detection. public class AnchoredCollidablePair : IMakeXmlSource Inheritance object AnchoredCollidablePair Implements IMakeXmlSource Inherited Members object.Equals(object, object) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors AnchoredCollidablePair(IAnchoredCollidableBased, IAnchoredCollidableBased) Initializes a new instance of the AnchoredCollidablePair class with two collidable objects. public AnchoredCollidablePair(IAnchoredCollidableBased indexA, IAnchoredCollidableBased indexB) Parameters indexA IAnchoredCollidableBased The first collidable object. indexB IAnchoredCollidableBased The second collidable object. AnchoredCollidablePair(string, IAnchoredCollidableBased, IAnchoredCollidableBased) Initializes a new instance of the AnchoredCollidablePair class with a name and two collidable objects. public AnchoredCollidablePair(string name, IAnchoredCollidableBased indexA, IAnchoredCollidableBased indexB) Parameters name string The name of the pair. indexA IAnchoredCollidableBased The first collidable object. indexB IAnchoredCollidableBased The second collidable object. AnchoredCollidablePair(XElement, string, IProgress, object[]) Initializes a new instance of the AnchoredCollidablePair class from XML. public AnchoredCollidablePair(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The XML element containing the pair data. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional resources for initialization. Fields XName The XML element name for serialization. public static string XName Field Value string Properties CollisionFlag Gets or sets the collision flag indicating the collision status between the two objects. public CollisionFlag CollisionFlag { get; } Property Value CollisionFlag IndexA Gets the first collidable object in the pair. public IAnchoredCollidableBased IndexA { get; } Property Value IAnchoredCollidableBased IndexB Gets the second collidable object in the pair. public IAnchoredCollidableBased IndexB { get; } Property Value IAnchoredCollidableBased MatAB Gets or sets the transformation matrix from object A to object B. public Mat4d MatAB { get; set; } Property Value Mat4d Name Gets or sets the pair name for UI manipulation. public string Name { get; set; } Property Value string SafeDistance Gets or sets the safe distance between the two collidable objects. public double SafeDistance { get; set; } Property Value double Methods Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. 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." }, "api/Hi.Collision.CollidableStl.html": { "href": "api/Hi.Collision.CollidableStl.html", @@ -147,7 +152,7 @@ "api/Hi.Collision.CollisionIndexPair.html": { "href": "api/Hi.Collision.CollisionIndexPair.html", "title": "Class CollisionIndexPair | HiAPI-C# 2025", - "summary": "Class CollisionIndexPair Namespace Hi.Collision Assembly HiMech.dll Represents a pair of collision indices for collision detection. public class CollisionIndexPair : IMakeXmlSource Inheritance object CollisionIndexPair Implements IMakeXmlSource Inherited Members object.Equals(object, object) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CollisionIndexPair(ICollisionIndex, ICollisionIndex) Initializes a new instance of the CollisionIndexPair class with two collision indices. public CollisionIndexPair(ICollisionIndex indexA, ICollisionIndex indexB) Parameters indexA ICollisionIndex The first collision index. indexB ICollisionIndex The second collision index. CollisionIndexPair(XElement, string, IProgress, object[]) Initializes a new instance of the CollisionIndexPair class from XML. public CollisionIndexPair(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The XML element containing the pair data. baseDirectory string The base directory for resolving relative paths. progress IProgress res object[] Additional resources for initialization. Fields XName The XML element name for serialization. public static string XName Field Value string Properties CollisionFlag Gets or sets the collision flag indicating the collision status between the two objects. public CollisionFlag CollisionFlag { get; } Property Value CollisionFlag IndexA Gets the first collision index in the pair. public ICollisionIndex IndexA { get; } Property Value ICollisionIndex IndexB Gets the second collision index in the pair. public ICollisionIndex IndexB { get; } Property Value ICollisionIndex MatAB Gets or sets the transformation matrix from object A to object B. public Mat4d MatAB { get; set; } Property Value Mat4d SafeDistance Gets or sets the safe distance between the two collision indices. public double SafeDistance { get; set; } Property Value double Methods Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. 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." + "summary": "Class CollisionIndexPair Namespace Hi.Collision Assembly HiMech.dll Represents a pair of collision indices for collision detection. public class CollisionIndexPair : IMakeXmlSource Inheritance object CollisionIndexPair Implements IMakeXmlSource Inherited Members object.Equals(object, object) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CollisionIndexPair(ICollisionIndex, ICollisionIndex) Initializes a new instance of the CollisionIndexPair class with two collision indices. public CollisionIndexPair(ICollisionIndex indexA, ICollisionIndex indexB) Parameters indexA ICollisionIndex The first collision index. indexB ICollisionIndex The second collision index. CollisionIndexPair(XElement, string, IProgress, object[]) Initializes a new instance of the CollisionIndexPair class from XML. public CollisionIndexPair(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The XML element containing the pair data. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional resources for initialization. Fields XName The XML element name for serialization. public static string XName Field Value string Properties CollisionFlag Gets or sets the collision flag indicating the collision status between the two objects. public CollisionFlag CollisionFlag { get; } Property Value CollisionFlag IndexA Gets the first collision index in the pair. public ICollisionIndex IndexA { get; } Property Value ICollisionIndex IndexB Gets the second collision index in the pair. public ICollisionIndex IndexB { get; } Property Value ICollisionIndex MatAB Gets or sets the transformation matrix from object A to object B. public Mat4d MatAB { get; set; } Property Value Mat4d SafeDistance Gets or sets the safe distance between the two collision indices. public double SafeDistance { get; set; } Property Value double Methods Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. 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." }, "api/Hi.Collision.CollisionUtil.html": { "href": "api/Hi.Collision.CollisionUtil.html", @@ -267,7 +272,7 @@ "api/Hi.Coloring.DictionaryColorGuide.html": { "href": "api/Hi.Coloring.DictionaryColorGuide.html", "title": "Class DictionaryColorGuide | HiAPI-C# 2025", - "summary": "Class DictionaryColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that manages a dictionary of color guides and allows selection of one active guide. public class DictionaryColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object DictionaryColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors DictionaryColorGuide() Initializes a new instance of the DictionaryColorGuide class. public DictionaryColorGuide() DictionaryColorGuide(DictionaryColorGuide) Initializes a new instance of the DictionaryColorGuide class by copying from another instance. public DictionaryColorGuide(DictionaryColorGuide src) Parameters src DictionaryColorGuide The source color guide to copy from. DictionaryColorGuide(XElement, string, IProgress, Dictionary) Initializes a new instance of the DictionaryColorGuide class from XML. public DictionaryColorGuide(XElement src, string baseDirectory, IProgress progress, Dictionary colorGuideCtorArgDictionary) Parameters src XElement The XML element containing the color guide data. baseDirectory string The base directory for resolving relative paths. progress IProgress colorGuideCtorArgDictionary Dictionary Dictionary containing constructor arguments for color guides. Properties KeyToColorGuide Gets or sets the dictionary mapping keys to color guides. public Dictionary KeyToColorGuide { get; set; } Property Value Dictionary SelectedColorGuide Gets the currently selected color guide. public IColorGuide SelectedColorGuide { get; } Property Value IColorGuide SelectedKey Gets or sets the key of the currently selected color guide. public string SelectedKey { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRgb(object) Get rgb bystep. public Vec3d GetRgb(object step) Parameters step object step Returns Vec3d rgb GetRgbWithPriority(object, out Vec3d, out double) Get color with the showing priority if the showing area overlapped by shrinking. Only effect on CubeTree. public void GetRgbWithPriority(object step, out Vec3d rgb, out double attachmentPriority) Parameters step object step rgb Vec3d rgb attachmentPriority double priority. Larger one takes priority. 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. RefreshSelectedColorGuide() Refreshes the selected color guide based on the current SelectedKey. public void RefreshSelectedColorGuide()" + "summary": "Class DictionaryColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that manages a dictionary of color guides and allows selection of one active guide. public class DictionaryColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object DictionaryColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors DictionaryColorGuide() Initializes a new instance of the DictionaryColorGuide class. public DictionaryColorGuide() DictionaryColorGuide(DictionaryColorGuide) Initializes a new instance of the DictionaryColorGuide class by copying from another instance. public DictionaryColorGuide(DictionaryColorGuide src) Parameters src DictionaryColorGuide The source color guide to copy from. DictionaryColorGuide(XElement, string, IProgress, Dictionary) Initializes a new instance of the DictionaryColorGuide class from XML. public DictionaryColorGuide(XElement src, string baseDirectory, IProgress progress, Dictionary colorGuideCtorArgDictionary) Parameters src XElement The XML element containing the color guide data. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. colorGuideCtorArgDictionary Dictionary Dictionary containing constructor arguments for color guides. Properties KeyToColorGuide Gets or sets the dictionary mapping keys to color guides. public Dictionary KeyToColorGuide { get; set; } Property Value Dictionary SelectedColorGuide Gets the currently selected color guide. public IColorGuide SelectedColorGuide { get; } Property Value IColorGuide SelectedKey Gets or sets the key of the currently selected color guide. public string SelectedKey { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRgb(object) Get rgb bystep. public Vec3d GetRgb(object step) Parameters step object step Returns Vec3d rgb GetRgbWithPriority(object, out Vec3d, out double) Get color with the showing priority if the showing area overlapped by shrinking. Only effect on CubeTree. public void GetRgbWithPriority(object step, out Vec3d rgb, out double attachmentPriority) Parameters step object step rgb Vec3d rgb attachmentPriority double priority. Larger one takes priority. 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. RefreshSelectedColorGuide() Refreshes the selected color guide based on the current SelectedKey. public void RefreshSelectedColorGuide()" }, "api/Hi.Coloring.DiscreteQuantityColorGuide.html": { "href": "api/Hi.Coloring.DiscreteQuantityColorGuide.html", @@ -277,7 +282,7 @@ "api/Hi.Coloring.FilteredColorGuide.html": { "href": "api/Hi.Coloring.FilteredColorGuide.html", "title": "Class FilteredColorGuide | HiAPI-C# 2025", - "summary": "Class FilteredColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that combines a filter color guide with a dictionary color guide. public class FilteredColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object FilteredColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FilteredColorGuide() Initializes a new instance of the FilteredColorGuide class. public FilteredColorGuide() FilteredColorGuide(XElement, string, IProgress, Dictionary) Initializes a new instance of the FilteredColorGuide class from XML. public FilteredColorGuide(XElement src, string baseDirectory, IProgress progress, Dictionary colorGuideCtorArgDictionary) Parameters src XElement The XML element containing the color guide data. baseDirectory string The base directory for resolving relative paths. progress IProgress colorGuideCtorArgDictionary Dictionary Dictionary containing constructor arguments for color guides. Properties DictionaryColorGuide Gets or sets the dictionary color guide that is used when the filter color guide returns null. public DictionaryColorGuide DictionaryColorGuide { get; set; } Property Value DictionaryColorGuide FilterColorGuide Gets or sets the filter color guide that is applied first. public IColorGuide FilterColorGuide { get; set; } Property Value IColorGuide XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRgb(object) Get rgb bystep. public Vec3d GetRgb(object step) Parameters step object step Returns Vec3d rgb GetRgbWithPriority(object, out Vec3d, out double) Get color with the showing priority if the showing area overlapped by shrinking. Only effect on CubeTree. public void GetRgbWithPriority(object step, out Vec3d rgb, out double attachmentPriority) Parameters step object step rgb Vec3d rgb attachmentPriority double priority. Larger one takes priority. 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." + "summary": "Class FilteredColorGuide Namespace Hi.Coloring Assembly HiMech.dll A color guide that combines a filter color guide with a dictionary color guide. public class FilteredColorGuide : IColorGuide, IMakeXmlSource, IGetColorGuide Inheritance object FilteredColorGuide Implements IColorGuide IMakeXmlSource IGetColorGuide 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FilteredColorGuide() Initializes a new instance of the FilteredColorGuide class. public FilteredColorGuide() FilteredColorGuide(XElement, string, IProgress, Dictionary) Initializes a new instance of the FilteredColorGuide class from XML. public FilteredColorGuide(XElement src, string baseDirectory, IProgress progress, Dictionary colorGuideCtorArgDictionary) Parameters src XElement The XML element containing the color guide data. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. colorGuideCtorArgDictionary Dictionary Dictionary containing constructor arguments for color guides. Properties DictionaryColorGuide Gets or sets the dictionary color guide that is used when the filter color guide returns null. public DictionaryColorGuide DictionaryColorGuide { get; set; } Property Value DictionaryColorGuide FilterColorGuide Gets or sets the filter color guide that is applied first. public IColorGuide FilterColorGuide { get; set; } Property Value IColorGuide XName Name for XML IO. public static string XName { get; } Property Value string Methods GetColorGuide() Get IColorGuide. public IColorGuide GetColorGuide() Returns IColorGuide IColorGuide GetRgb(object) Get rgb bystep. public Vec3d GetRgb(object step) Parameters step object step Returns Vec3d rgb GetRgbWithPriority(object, out Vec3d, out double) Get color with the showing priority if the showing area overlapped by shrinking. Only effect on CubeTree. public void GetRgbWithPriority(object step, out Vec3d rgb, out double attachmentPriority) Parameters step object step rgb Vec3d rgb attachmentPriority double priority. Larger one takes priority. 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." }, "api/Hi.Coloring.FuncRangeColorGuide.html": { "href": "api/Hi.Coloring.FuncRangeColorGuide.html", @@ -527,12 +532,12 @@ "api/Hi.Common.FileLines.FileLineCharIndex.html": { "href": "api/Hi.Common.FileLines.FileLineCharIndex.html", "title": "Class FileLineCharIndex | HiAPI-C# 2025", - "summary": "Class FileLineCharIndex Namespace Hi.Common.FileLines Assembly HiGeom.dll Represents a character-level position within a file by file index, line index, and character index. All indices are 0-based. public class FileLineCharIndex : IFileLineCharIndex, IFileLineIndex, IGetFileLineIndex, IComparable, IEquatable Inheritance object FileLineCharIndex Implements IFileLineCharIndex IFileLineIndex IGetFileLineIndex IComparable IEquatable Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MathUtil.Clamp(T, T, T) FileLineUtil.GetFileNo(IFileLineIndex) FileLineUtil.GetLineNo(IFileLineIndex) FileLineUtil.MixedIndex(IFileLineIndex) FileLineUtil.MixedIndex(IGetFileLineIndex) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FileLineCharIndex() Initializes a new instance of the FileLineCharIndex class. public FileLineCharIndex() FileLineCharIndex(IFileLineCharIndex) Initializes a new instance of the FileLineCharIndex class by copying another instance. public FileLineCharIndex(IFileLineCharIndex src) Parameters src IFileLineCharIndex The source to copy from. FileLineCharIndex(int, int, int) Initializes a new instance of the FileLineCharIndex class with specified indices. public FileLineCharIndex(int fileIndex, int lineIndex, int charIndex) Parameters fileIndex int The zero-based file index. lineIndex int The zero-based line index. charIndex int The zero-based character index within the line. Properties CharIndex Character index within the line. 0-based. public int CharIndex { get; set; } Property Value int FileIndex File Index. Start on 0. public int FileIndex { get; set; } Property Value int LineIndex Line Index. Start on 0. public int LineIndex { get; set; } Property Value int Methods AtLineBegin(int, int) Creates a FileLineCharIndex at the beginning of a line (CharIndex = 0). public static FileLineCharIndex AtLineBegin(int fileIndex, int lineIndex) Parameters fileIndex int The zero-based file index. lineIndex int The zero-based line index. Returns FileLineCharIndex CompareTo(FileLineCharIndex) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public int CompareTo(FileLineCharIndex other) Parameters other FileLineCharIndex An object to compare with this instance. Returns int A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes other in the sort order. Zero This instance occurs in the same position in the sort order as other. Greater than zero This instance follows other in the sort order. Equals(FileLineCharIndex) Indicates whether the current object is equal to another object of the same type. public bool Equals(FileLineCharIndex other) Parameters other FileLineCharIndex An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToUserString() Returns a user-friendly string representation. public string ToUserString() Returns string Operators operator ==(FileLineCharIndex, FileLineCharIndex) public static bool operator ==(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator >(FileLineCharIndex, FileLineCharIndex) public static bool operator >(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator >=(FileLineCharIndex, FileLineCharIndex) public static bool operator >=(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator !=(FileLineCharIndex, FileLineCharIndex) public static bool operator !=(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator <(FileLineCharIndex, FileLineCharIndex) public static bool operator <(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator <=(FileLineCharIndex, FileLineCharIndex) public static bool operator <=(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool" + "summary": "Class FileLineCharIndex Namespace Hi.Common.FileLines Assembly HiGeom.dll Represents a character-level position within a file by file index, line index, and character index. All indices are 0-based. public class FileLineCharIndex : IFileLineCharIndex, IFileLineIndex, IGetFileLineIndex, IComparable, IEquatable Inheritance object FileLineCharIndex Implements IFileLineCharIndex IFileLineIndex IGetFileLineIndex IComparable IEquatable Inherited Members object.Equals(object, object) object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MathUtil.Clamp(T, T, T) FileLineUtil.GetFileNo(IFileLineIndex) FileLineUtil.GetLineNo(IFileLineIndex) FileLineUtil.MixedIndex(IFileLineIndex) FileLineUtil.MixedIndex(IGetFileLineIndex) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FileLineCharIndex() Initializes a new instance of the FileLineCharIndex class. public FileLineCharIndex() FileLineCharIndex(IFileLineCharIndex) Initializes a new instance of the FileLineCharIndex class by copying another instance. public FileLineCharIndex(IFileLineCharIndex src) Parameters src IFileLineCharIndex The source to copy from. FileLineCharIndex(int, int, int) Initializes a new instance of the FileLineCharIndex class with specified indices. public FileLineCharIndex(int fileIndex, int lineIndex, int charIndex) Parameters fileIndex int The zero-based file index. lineIndex int The zero-based line index. charIndex int The zero-based character index within the line. Properties CharIndex Character index within the line. 0-based. public int CharIndex { get; set; } Property Value int FileIndex File Index. Start on 0. public int FileIndex { get; set; } Property Value int LineIndex Line Index. Start on 0. public int LineIndex { get; set; } Property Value int Methods AtLineBegin(int, int) Creates a FileLineCharIndex at the beginning of a line (CharIndex = 0). public static FileLineCharIndex AtLineBegin(int fileIndex, int lineIndex) Parameters fileIndex int The zero-based file index. lineIndex int The zero-based line index. Returns FileLineCharIndex CompareTo(FileLineCharIndex) Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. public int CompareTo(FileLineCharIndex other) Parameters other FileLineCharIndex An object to compare with this instance. Returns int A value that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance precedes other in the sort order. Zero This instance occurs in the same position in the sort order as other. Greater than zero This instance follows other in the sort order. Equals(FileLineCharIndex) Indicates whether the current object is equal to another object of the same type. public bool Equals(FileLineCharIndex other) Parameters other FileLineCharIndex An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToUserString() Returns a user-friendly string representation. public string ToUserString() Returns string Operators operator ==(FileLineCharIndex, FileLineCharIndex) Returns true when both operands point to the same position, treating two null references as equal. public static bool operator ==(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator >(FileLineCharIndex, FileLineCharIndex) Returns true when left orders after right; a null left is never after any value. public static bool operator >(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator >=(FileLineCharIndex, FileLineCharIndex) Returns true when left orders at or after right; treats two null references as equal. public static bool operator >=(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator !=(FileLineCharIndex, FileLineCharIndex) Returns true when the operands point to different positions. Inverse of operator ==(FileLineCharIndex, FileLineCharIndex). public static bool operator !=(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator <(FileLineCharIndex, FileLineCharIndex) Returns true when left orders before right; a null left is treated as the lowest position. public static bool operator <(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool operator <=(FileLineCharIndex, FileLineCharIndex) Returns true when left orders at or before right; a null left is always at-or-before any value. public static bool operator <=(FileLineCharIndex left, FileLineCharIndex right) Parameters left FileLineCharIndex right FileLineCharIndex Returns bool" }, "api/Hi.Common.FileLines.FileLineCharIndexSegment.html": { "href": "api/Hi.Common.FileLines.FileLineCharIndexSegment.html", "title": "Class FileLineCharIndexSegment | HiAPI-C# 2025", - "summary": "Class FileLineCharIndexSegment Namespace Hi.Common.FileLines Assembly HiGeom.dll Represents a character-level segment within file(s). Begin is inclusive, End is exclusive: [Begin, End). public class FileLineCharIndexSegment : IEquatable Inheritance object FileLineCharIndexSegment Implements IEquatable Inherited Members object.Equals(object, object) 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 FileLineCharIndexSegment() Initializes a new instance of the FileLineCharIndexSegment class. public FileLineCharIndexSegment() FileLineCharIndexSegment(FileLineCharIndex, FileLineCharIndex) Initializes a new instance of the FileLineCharIndexSegment class with specified begin and end positions. public FileLineCharIndexSegment(FileLineCharIndex begin, FileLineCharIndex end) Parameters begin FileLineCharIndex The beginning position (inclusive). end FileLineCharIndex The ending position (exclusive). FileLineCharIndexSegment(FileLineCharIndexSegment) Initializes a new instance of the FileLineCharIndexSegment class by copying another instance. public FileLineCharIndexSegment(FileLineCharIndexSegment src) Parameters src FileLineCharIndexSegment The source to copy from. FileLineCharIndexSegment(IIndexedFileLine) public FileLineCharIndexSegment(IIndexedFileLine indexedFileLine) Parameters indexedFileLine IIndexedFileLine Properties Begin Beginning position (inclusive). public FileLineCharIndex Begin { get; set; } Property Value FileLineCharIndex End Ending position (exclusive). public FileLineCharIndex End { get; set; } Property Value FileLineCharIndex IsMultiLine Whether the segment spans multiple lines. public bool IsMultiLine { get; } Property Value bool Methods Any() Whether this segment contains any characters (End > Begin). public bool Any() Returns bool Equals(FileLineCharIndexSegment) Indicates whether the current object is equal to another object of the same type. public bool Equals(FileLineCharIndexSegment other) Parameters other FileLineCharIndexSegment An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class FileLineCharIndexSegment Namespace Hi.Common.FileLines Assembly HiGeom.dll Represents a character-level segment within file(s). Begin is inclusive, End is exclusive: [Begin, End). public class FileLineCharIndexSegment : IEquatable Inheritance object FileLineCharIndexSegment Implements IEquatable Inherited Members object.Equals(object, object) 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 FileLineCharIndexSegment() Initializes a new instance of the FileLineCharIndexSegment class. public FileLineCharIndexSegment() FileLineCharIndexSegment(FileLineCharIndex, FileLineCharIndex) Initializes a new instance of the FileLineCharIndexSegment class with specified begin and end positions. public FileLineCharIndexSegment(FileLineCharIndex begin, FileLineCharIndex end) Parameters begin FileLineCharIndex The beginning position (inclusive). end FileLineCharIndex The ending position (exclusive). FileLineCharIndexSegment(FileLineCharIndexSegment) Initializes a new instance of the FileLineCharIndexSegment class by copying another instance. public FileLineCharIndexSegment(FileLineCharIndexSegment src) Parameters src FileLineCharIndexSegment The source to copy from. FileLineCharIndexSegment(IIndexedFileLine) Initializes a new instance that spans the entire indexedFileLine — from its first character to one past its last character. public FileLineCharIndexSegment(IIndexedFileLine indexedFileLine) Parameters indexedFileLine IIndexedFileLine The file line whose full extent the segment should cover. Properties Begin Beginning position (inclusive). public FileLineCharIndex Begin { get; set; } Property Value FileLineCharIndex End Ending position (exclusive). public FileLineCharIndex End { get; set; } Property Value FileLineCharIndex IsMultiLine Whether the segment spans multiple lines. public bool IsMultiLine { get; } Property Value bool Methods Any() Whether this segment contains any characters (End > Begin). public bool Any() Returns bool Equals(FileLineCharIndexSegment) Indicates whether the current object is equal to another object of the same type. public bool Equals(FileLineCharIndexSegment other) Parameters other FileLineCharIndexSegment An object to compare with this object. Returns bool true if the current object is equal to the other parameter; otherwise, false. Equals(object) Determines whether the specified object is equal to the current object. public override bool Equals(object obj) Parameters obj object The object to compare with the current object. Returns bool true if the specified object is equal to the current object; otherwise, false. GetHashCode() Serves as the default hash function. public override int GetHashCode() Returns int A hash code for the current object. 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.FileLines.FileLineIndex.html": { "href": "api/Hi.Common.FileLines.FileLineIndex.html", @@ -742,7 +747,7 @@ "api/Hi.Common.Messages.ActionProgress-1.html": { "href": "api/Hi.Common.Messages.ActionProgress-1.html", "title": "Class ActionProgress | HiAPI-C# 2025", - "summary": "Class ActionProgress Namespace Hi.Common.Messages Assembly HiGeom.dll Lightweight IProgress that delegates to an Action. Unlike Progress, does not capture SynchronizationContext and invokes the handler synchronously on the caller's thread. public class ActionProgress : IProgress Type Parameters T Inheritance object ActionProgress Implements IProgress 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ActionProgress(Action) public ActionProgress(Action handler) Parameters handler Action Methods FromLogger(ILogger) Creates an IProgress that routes MultiTagMessage to the appropriate ILogger level. public static IProgress FromLogger(ILogger logger) Parameters logger ILogger Returns IProgress Report(T) Reports a progress update. public void Report(T value) Parameters value T The value of the updated progress." + "summary": "Class ActionProgress Namespace Hi.Common.Messages Assembly HiGeom.dll Lightweight IProgress that delegates to an Action. Unlike Progress, does not capture SynchronizationContext and invokes the handler synchronously on the caller's thread. public class ActionProgress : IProgress Type Parameters T Inheritance object ActionProgress Implements IProgress 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ActionProgress(Action) Initializes a new instance that forwards each reported value to handler. public ActionProgress(Action handler) Parameters handler Action Delegate invoked synchronously by Report(T). Methods FromLogger(ILogger) Creates an IProgress that routes MultiTagMessage to the appropriate ILogger level. public static IProgress FromLogger(ILogger logger) Parameters logger ILogger Returns IProgress Report(T) Reports a progress update. public void Report(T value) Parameters value T The value of the updated progress." }, "api/Hi.Common.Messages.BootstrapTheme.html": { "href": "api/Hi.Common.Messages.BootstrapTheme.html", @@ -837,7 +842,7 @@ "api/Hi.Common.PacePlayer.html": { "href": "api/Hi.Common.PacePlayer.html", "title": "Class PacePlayer | HiAPI-C# 2025", - "summary": "Class PacePlayer Namespace Hi.Common Assembly HiGeom.dll Controls the pace execution of a task. public class PacePlayer : IDisposable Inheritance object PacePlayer Implements 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors PacePlayer(ILogger) public PacePlayer(ILogger logger) Parameters logger ILogger Properties CancellationToken Gets the cancellation token for the running task. public CancellationToken CancellationToken { get; } Property Value CancellationToken IsFinished Is the process finished from Start(). public bool IsFinished { get; } Property Value bool IsLocked Is started but not finished. IsLocked keeps true even if Pause() is called. The property is true if a task started and the task has not yet finished. public bool IsLocked { get; } Property Value bool IsRunning Is running. Not paused either finished. The property is true if a task started and the task has not yet finished and Pause() is not called. public bool IsRunning { get; } Property Value bool Logger Logger for reporting exceptions during task execution. public ILogger Logger { get; } Property Value ILogger MainAction Gets or sets the main action to be executed by the player. public Action MainAction { get; set; } Property Value Action Methods Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) Releases the unmanaged resources and optionally releases the managed resources. protected virtual void Dispose(bool disposing) Parameters disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources. Pause() Pauses the execution. public void Pause() Reset() Resets the player to its initial state. public void Reset() Resume() Resumes the execution if paused. public void Resume() RunToNextPace() Runs to the next pace point. public void RunToNextPace() Start() Starts the main action execution. public void Start() Terminate() Terminates the execution by cancelling the task. public void Terminate() Wait() Waits for the task to complete. public void Wait() Events IsFinishedChangedEvent Event triggered when the IsFinished state changes. public event Action IsFinishedChangedEvent Event Type Action IsLockedChangedEvent Event triggered when the lock state changes. public event Action IsLockedChangedEvent Event Type Action IsRunningChangedEvent Event triggered when the running state changes. public event Action IsRunningChangedEvent Event Type Action ResetedEvent Event triggered after the player has been reset. public event Action ResetedEvent Event Type Action" + "summary": "Class PacePlayer Namespace Hi.Common Assembly HiGeom.dll Controls the pace execution of a task. public class PacePlayer : IDisposable Inheritance object PacePlayer Implements 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors PacePlayer(ILogger) Initializes a new instance with the specified logger for exception reporting. public PacePlayer(ILogger logger) Parameters logger ILogger Logger used by the player to report exceptions raised during pace execution. Properties CancellationToken Gets the cancellation token for the running task. public CancellationToken CancellationToken { get; } Property Value CancellationToken IsFinished Is the process finished from Start(). public bool IsFinished { get; } Property Value bool IsLocked Is started but not finished. IsLocked keeps true even if Pause() is called. The property is true if a task started and the task has not yet finished. public bool IsLocked { get; } Property Value bool IsRunning Is running. Not paused either finished. The property is true if a task started and the task has not yet finished and Pause() is not called. public bool IsRunning { get; } Property Value bool Logger Logger for reporting exceptions during task execution. public ILogger Logger { get; } Property Value ILogger MainAction Gets or sets the main action to be executed by the player. public Action MainAction { get; set; } Property Value Action Methods Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) Releases the unmanaged resources and optionally releases the managed resources. protected virtual void Dispose(bool disposing) Parameters disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources. Pause() Pauses the execution. public void Pause() Reset() Resets the player to its initial state. public void Reset() Resume() Resumes the execution if paused. public void Resume() RunToNextPace() Runs to the next pace point. public void RunToNextPace() Start() Starts the main action execution. public void Start() Terminate() Terminates the execution by cancelling the task. public void Terminate() Wait() Waits for the task to complete. public void Wait() Events IsFinishedChangedEvent Event triggered when the IsFinished state changes. public event Action IsFinishedChangedEvent Event Type Action IsLockedChangedEvent Event triggered when the lock state changes. public event Action IsLockedChangedEvent Event Type Action IsRunningChangedEvent Event triggered when the running state changes. public event Action IsRunningChangedEvent Event Type Action ResetedEvent Event triggered after the player has been reset. public event Action ResetedEvent Event Type Action" }, "api/Hi.Common.Pair-2.html": { "href": "api/Hi.Common.Pair-2.html", @@ -992,7 +997,7 @@ "api/Hi.Common.XmlUtils.ProjectApiVersion.html": { "href": "api/Hi.Common.XmlUtils.ProjectApiVersion.html", "title": "Class ProjectApiVersion | HiAPI-C# 2025", - "summary": "Class ProjectApiVersion Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Carries the API version read from a project file's XML attribute through the XFactory deserialization pipeline via the object[] res parameter. Consumers retrieve it with res?.OfType().FirstOrDefault(). public class ProjectApiVersion Inheritance object ProjectApiVersion 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProjectApiVersion(Version) public ProjectApiVersion(Version version) Parameters version Version Properties Version public Version Version { get; } Property Value Version Methods IsOlderThan(Version) Returns true if the source file was saved by an API version older than version. Returns false when the source version is unknown (null). public bool IsOlderThan(Version version) Parameters version Version Returns bool" + "summary": "Class ProjectApiVersion Namespace Hi.Common.XmlUtils Assembly HiGeom.dll Carries the API version read from a project file's XML attribute through the XFactory deserialization pipeline via the object[] res parameter. Consumers retrieve it with res?.OfType().FirstOrDefault(). public class ProjectApiVersion Inheritance object ProjectApiVersion 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProjectApiVersion(Version) Initializes a new instance carrying the specified version. public ProjectApiVersion(Version version) Parameters version Version API version read from the project XML; may be null when the source file did not record a version. Properties Version API version stamped on the source project file at save time. public Version Version { get; } Property Value Version Methods IsOlderThan(Version) Returns true if the source file was saved by an API version older than version. Returns false when the source version is unknown (null). public bool IsOlderThan(Version version) Parameters version Version Returns bool" }, "api/Hi.Common.XmlUtils.SetFileDelegate.html": { "href": "api/Hi.Common.XmlUtils.SetFileDelegate.html", @@ -1504,6 +1509,11 @@ "title": "Class NativeTopoStlfr | HiAPI-C# 2025", "summary": "Class NativeTopoStlfr Namespace Hi.Geom Assembly HiDisp.dll Native TopoStl with element type fraction. public class NativeTopoStlfr : IDisposable, IDisplayee, IExpandToBox3d Inheritance object NativeTopoStlfr Implements IDisposable IDisplayee IExpandToBox3d Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) 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 NativeTopoStlfr(Stl, double) Initializes a new instance of the NativeTopoStlfr class. public NativeTopoStlfr(Stl stl, double fractionTolerance) Parameters stl Stl The STL model to convert to a native topology. fractionTolerance double The tolerance for fraction calculations. Properties Size Gets the number of triangles in the native topology. public int Size { get; } Property Value int TopoStlPtr Gets the pointer to the native topology structure. public nint TopoStlPtr { get; } Property Value nint Methods Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box ~NativeTopoStlfr() protected ~NativeTopoStlfr() GenStl() Generates an STL model from the native topology. public Stl GenStl() Returns Stl A new STL model." }, + "api/Hi.Geom.ObjUtil.html": { + "href": "api/Hi.Geom.ObjUtil.html", + "title": "Class ObjUtil | HiAPI-C# 2025", + "summary": "Class ObjUtil Namespace Hi.Geom Assembly HiGeom.dll Wavefront OBJ writer for RGB-coloured triangle buffers. public static class ObjUtil Inheritance object ObjUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods WriteText(string, double[]) Write a stride-15 RGB-triangle buffer as Wavefront OBJ text with the per-vertex colour extension (v x y z r g b). Triangle vertices are not shared; faces reference vertices/normals via negative (relative) indices, so no global counters are required. public static void WriteText(string file, double[] rgbTrisNativeArray) Parameters file string Destination OBJ file path. rgbTrisNativeArray double[] Stride-15 array: r,g,b, nx,ny,nz, p0.x,p0.y,p0.z, p1.x,p1.y,p1.z, p2.x,p2.y,p2.z, repeated once per triangle. RGB components are in the [0, 1] range. See Hi.Cbtr.CubeTree.GetRgbTrisNativeArray." + }, "api/Hi.Geom.PairZr.html": { "href": "api/Hi.Geom.PairZr.html", "title": "Class PairZr | HiAPI-C# 2025", @@ -1514,6 +1524,11 @@ "title": "Class PairZrUtil | HiAPI-C# 2025", "summary": "Class PairZrUtil Namespace Hi.Geom Assembly HiGeom.dll Utility class for working with PairZr objects public static class PairZrUtil Inheritance object PairZrUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetIntensiveZrs(IEnumerable, double) public static IEnumerable GetIntensiveZrs(this IEnumerable src, double ZResolution) Parameters src IEnumerable ZResolution double Returns IEnumerable GetNormal2d(SortedList, double) Gets a 2D normal vector to the surface at the specified Z position public static Vec2d GetNormal2d(this SortedList zVsPairZr, double z) Parameters zVsPairZr SortedList The sorted list of PairZr objects defining the surface z double The Z position to get the normal vector for Returns Vec2d A 2D normal vector to the surface, or null if it cannot be calculated GetNormal2dByFittedZ(SortedList, double, out double) Gets a 2D normal vector to the surface at the specified Z position, adjusted to fit within the Z range public static Vec2d GetNormal2dByFittedZ(this SortedList zVsPairZr, double z, out double fittedZ) Parameters zVsPairZr SortedList The sorted list of PairZr objects defining the surface z double The Z position to get the normal vector for fittedZ double Output parameter that receives the adjusted Z value that fits within the range Returns Vec2d A 2D normal vector to the surface, or null if it cannot be calculated GetRByZ(List, double) Gets the R value at a specified Z position by interpolating between PairZr objects in a list public static double GetRByZ(this List zVsPairZr, double z) Parameters zVsPairZr List The list of PairZr objects z double The Z position to get the R value for Returns double The interpolated R value at the specified Z position, or NaN if interpolation is not possible GetRByZ(SortedList, double) Gets the R value at a specified Z position by interpolating between PairZr objects in a sorted list public static double GetRByZ(this SortedList zVsPairZr, double z) Parameters zVsPairZr SortedList The sorted list of PairZr objects keyed by Z values z double The Z position to get the R value for Returns double The interpolated R value at the specified Z position, or NaN if interpolation is not possible GetSurfaceVerticalArrow2d(List, double) Gets a 2D vector perpendicular to the surface at the specified Z position public static Vec2d GetSurfaceVerticalArrow2d(this List zVsPairZr, double z) Parameters zVsPairZr List The list of PairZr objects defining the surface z double The Z position to get the vector for Returns Vec2d A 2D vector perpendicular to the surface, or null if it cannot be calculated GetSurfaceVerticalArrow2dByFittedZ(List, double, out double) Gets a 2D vector perpendicular to the surface at the specified Z position, adjusted to fit within the Z range public static Vec2d GetSurfaceVerticalArrow2dByFittedZ(this List zVsPairZr, double z, out double fittedZ) Parameters zVsPairZr List The list of PairZr objects defining the surface z double The Z position to get the vector for fittedZ double Output parameter that receives the adjusted Z value that fits within the range Returns Vec2d A 2D vector perpendicular to the surface, or null if it cannot be calculated GetSurfaceVerticalArrow3dByFittedZ(List, double, double, out double) Gets a 3D vector perpendicular to the surface at the specified Z position, adjusted to fit within the Z range public static Vec3d GetSurfaceVerticalArrow3dByFittedZ(this List zVsPairZr, double z, double angle_rad, out double fittedZ) Parameters zVsPairZr List The list of PairZr objects defining the surface z double The Z position to get the vector for angle_rad double The angle in radians to position the vector around the Z axis fittedZ double Output parameter that receives the adjusted Z value that fits within the range Returns Vec3d A 3D vector perpendicular to the surface, or null if it cannot be calculated GetVolume(IGetZrList) Calculates the volume of an object that implements IGetZrList public static double GetVolume(this IGetZrList src) Parameters src IGetZrList The object that implements IGetZrList Returns double The calculated volume, or 0 if the source is null GetVolume(IEnumerable) Get Volume. Assume the src.Z is ascendent. If Z descendent, the result may be negative. public static double GetVolume(this IEnumerable src) Parameters src IEnumerable Returns double GetZrList(IGetStl) Extracts a list of PairZr objects from an object that implements IGetStl public static List GetZrList(this IGetStl geom) Parameters geom IGetStl The object that implements IGetStl Returns List A list of PairZr objects, or null if the geometry is null GetZrList(IEnumerable) Extracts a list of PairZr objects from a collection of triangles public static List GetZrList(this IEnumerable tris) Parameters tris IEnumerable The collection of triangles Returns List A list of PairZr objects ordered by Z value" }, + "api/Hi.Geom.PlyUtil.html": { + "href": "api/Hi.Geom.PlyUtil.html", + "title": "Class PlyUtil | HiAPI-C# 2025", + "summary": "Class PlyUtil Namespace Hi.Geom Assembly HiGeom.dll Stanford PLY writer for RGB-coloured triangle buffers. public static class PlyUtil Inheritance object PlyUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods WriteBin(string, double[]) Write a stride-15 RGB-triangle buffer as little-endian binary PLY with per-vertex RGB. Vertices are not shared between triangles (the input is a non-manifold soup), so each triangle contributes 3 unique vertices. public static void WriteBin(string file, double[] rgbTrisNativeArray) Parameters file string Destination PLY file path. rgbTrisNativeArray double[] Stride-15 array: r,g,b, nx,ny,nz, p0.x,p0.y,p0.z, p1.x,p1.y,p1.z, p2.x,p2.y,p2.z, repeated once per triangle. RGB components are in the [0, 1] range. See Hi.Cbtr.CubeTree.GetRgbTrisNativeArray." + }, "api/Hi.Geom.Polar3d.html": { "href": "api/Hi.Geom.Polar3d.html", "title": "Class Polar3d | HiAPI-C# 2025", @@ -1612,7 +1627,7 @@ "api/Hi.Geom.StlFile.html": { "href": "api/Hi.Geom.StlFile.html", "title": "Class StlFile | HiAPI-C# 2025", - "summary": "Class StlFile Namespace Hi.Geom Assembly HiGeom.dll Represents an STL file with loading and saving capabilities public class StlFile : IStlSource, IGetStl, IMakeXmlSource, IExpandToBox3d, IDuplicate, ISourceFile, IToPresentDto Inheritance object StlFile Implements IStlSource IGetStl IMakeXmlSource IExpandToBox3d IDuplicate ISourceFile IToPresentDto Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) 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 StlFile() Ctor. public StlFile() StlFile(string) Ctor. public StlFile(string filePath) Parameters filePath string file path StlFile(string, string) Initializes a new instance with the specified file path and optional base directory. If base directory is provided, the STL will be loaded immediately. public StlFile(string filePath, string baseDirectory) Parameters filePath string STL file path baseDirectory string Base directory to load file from StlFile(XElement, string, IProgress) Ctor. public StlFile(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML baseDirectory string Base directory path progress IProgress Properties CacheStl CacheStl is loaded by the xml construtor. public Stl CacheStl { get; set; } Property Value Stl SourceFile Stl file path. public string SourceFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetStl() Gets the STL geometry data. public Stl GetStl() Returns Stl The STL geometry object LoadStlByFile(string) Loads an STL file from the specified base directory into the cache public Stl LoadStlByFile(string baseDirectory) Parameters baseDirectory string The base directory where the file is located Returns Stl The loaded STL object, or null if the file path is empty or loading fails 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. SaveStlToFile(string) Saves the cached STL data to a file in the specified base directory public void SaveStlToFile(string baseDirectory) Parameters baseDirectory string The base directory where the file will be saved ToPresentDto() Convert StlFile to presentation DTO (Data Transfer Object) for JSON serialization. The returned object includes type metadata for web API presentation. public object ToPresentDto() Returns object DTO object with type and sourceFile properties" + "summary": "Class StlFile Namespace Hi.Geom Assembly HiGeom.dll Represents an STL file with loading and saving capabilities public class StlFile : IStlSource, IGetStl, IMakeXmlSource, IExpandToBox3d, IDuplicate, ISourceFile, IToPresentDto Inheritance object StlFile Implements IStlSource IGetStl IMakeXmlSource IExpandToBox3d IDuplicate ISourceFile IToPresentDto Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods XmlUtil.MakeXmlSourceToFile(IMakeXmlSource, string, bool) XmlUtil.MakeXmlSourceToFileRef(IMakeXmlSource, string, string, bool) XmlUtil.SaveToByteArrayAsync(IMakeXmlSource, string) GeomUtil.ExpandToBox3d(IExpandToBox3d, Mat4d, Box3d) GeomUtil.GetBox3d(IExpandToBox3d) PairZrUtil.GetZrList(IGetStl) 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 StlFile() Ctor. public StlFile() StlFile(string) Ctor. public StlFile(string filePath) Parameters filePath string file path StlFile(string, string) Initializes a new instance with the specified file path and optional base directory. If base directory is provided, the STL will be loaded immediately. public StlFile(string filePath, string baseDirectory) Parameters filePath string STL file path baseDirectory string Base directory to load file from StlFile(XElement, string, IProgress) Ctor. public StlFile(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML baseDirectory string Base directory path progress IProgress Progress reporter for diagnostic messages emitted during construction. Properties CacheStl CacheStl is loaded by the xml construtor. public Stl CacheStl { get; set; } Property Value Stl SourceFile Stl file path. public string SourceFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetStl() Gets the STL geometry data. public Stl GetStl() Returns Stl The STL geometry object LoadStlByFile(string) Loads an STL file from the specified base directory into the cache public Stl LoadStlByFile(string baseDirectory) Parameters baseDirectory string The base directory where the file is located Returns Stl The loaded STL object, or null if the file path is empty or loading fails 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. SaveStlToFile(string) Saves the cached STL data to a file in the specified base directory public void SaveStlToFile(string baseDirectory) Parameters baseDirectory string The base directory where the file will be saved ToPresentDto() Convert StlFile to presentation DTO (Data Transfer Object) for JSON serialization. The returned object includes type metadata for web API presentation. public object ToPresentDto() Returns object DTO object with type and sourceFile properties" }, "api/Hi.Geom.StlFuncHost.html": { "href": "api/Hi.Geom.StlFuncHost.html", @@ -1682,7 +1697,7 @@ "api/Hi.Geom.TransformationGeom.html": { "href": "api/Hi.Geom.TransformationGeom.html", "title": "Class TransformationGeom | HiAPI-C# 2025", - "summary": "Class TransformationGeom Namespace Hi.Geom Assembly HiMech.dll Represents a geometric transformation that can be applied to a geometry object. This class combines a transformer with a target geometry to produce transformed geometric results. public class TransformationGeom : IStlSource, IGetStl, IMakeXmlSource, IGeomProperty, IGenStl, IExpandToBox3d, IDuplicate Inheritance object TransformationGeom Implements IStlSource IGetStl IMakeXmlSource IGeomProperty IGenStl IExpandToBox3d IDuplicate Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods StlUtil.ToFaceDrawing(IGetStl) StlUtil.ToLineDrawing(IGetStl) StlUtil.ToSparkleLineDrawing(IGetStl) 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) Remarks The TransformationGeom class provides functionality to: Apply geometric transformations to STL geometry Support XML serialization and deserialization Handle duplication of transformation configurations Manage transformation matrices and their application to geometry Constructors TransformationGeom() Initializes a new instance of the TransformationGeom class with default values. public TransformationGeom() TransformationGeom(IGetStl) Initializes a new instance of the TransformationGeom class with a specified geometry. public TransformationGeom(IGetStl geom) Parameters geom IGetStl The geometry object to be transformed. TransformationGeom(XElement, string, IProgress) Initializes a new instance of the TransformationGeom class from XML data. public TransformationGeom(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML element containing the transformation data. baseDirectory string The base directory for resolving relative paths. progress IProgress Remarks This constructor deserializes both the transformer and geometry data from the provided XML. If either element is missing or invalid, the corresponding property will be null. Properties Geom Gets or sets the target geometry that will be transformed. public IGetStl Geom { get; set; } Property Value IGetStl Remarks This property represents the base geometry object that will have the transformation applied to it. If null, operations involving this geometry will return null results. Transformer Gets or sets the transformer that defines the geometric transformation. The transformation is applied from left (first element) to right (last element), with the target geometry being on the left side. public ITransformer Transformer { get; set; } Property Value ITransformer Remarks The transformer can be null, in which case no transformation is applied to the geometry. XName Gets the XML element name used for serialization. public static string XName { get; } Property Value string The string “TransformationGeom”. Methods Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object Remarks The duplication process creates new instances of both the transformer and geometry objects if they implement the appropriate cloning interfaces. ExpandToBox3d(Box3d) Expands the given box to include the bounds of the transformed geometry. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The box to expand. Remarks This method updates the provided box to encompass the transformed geometry. If the geometry or its STL representation is null, no expansion occurs. GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d resolution) Parameters resolution IPolarResolution2d Polar resolution Returns Stl A newly created STL. GetStl() Gets the transformed STL representation of the geometry. public Stl GetStl() Returns Stl The transformed STL if both geometry and transformer are valid; the original STL if transformer is null; null if geometry is null or produces null STL. Remarks If the transformer is null, the method returns the untransformed geometry. If the geometry is null or produces a null STL, the method returns null. 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. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class TransformationGeom Namespace Hi.Geom Assembly HiMech.dll Represents a geometric transformation that can be applied to a geometry object. This class combines a transformer with a target geometry to produce transformed geometric results. public class TransformationGeom : IStlSource, IGetStl, IMakeXmlSource, IGeomProperty, IGenStl, IExpandToBox3d, IDuplicate Inheritance object TransformationGeom Implements IStlSource IGetStl IMakeXmlSource IGeomProperty IGenStl IExpandToBox3d IDuplicate Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) Extension Methods StlUtil.ToFaceDrawing(IGetStl) StlUtil.ToLineDrawing(IGetStl) StlUtil.ToSparkleLineDrawing(IGetStl) 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) Remarks The TransformationGeom class provides functionality to: Apply geometric transformations to STL geometry Support XML serialization and deserialization Handle duplication of transformation configurations Manage transformation matrices and their application to geometry Constructors TransformationGeom() Initializes a new instance of the TransformationGeom class with default values. public TransformationGeom() TransformationGeom(IGetStl) Initializes a new instance of the TransformationGeom class with a specified geometry. public TransformationGeom(IGetStl geom) Parameters geom IGetStl The geometry object to be transformed. TransformationGeom(XElement, string, IProgress) Initializes a new instance of the TransformationGeom class from XML data. public TransformationGeom(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML element containing the transformation data. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. Remarks This constructor deserializes both the transformer and geometry data from the provided XML. If either element is missing or invalid, the corresponding property will be null. Properties Geom Gets or sets the target geometry that will be transformed. public IGetStl Geom { get; set; } Property Value IGetStl Remarks This property represents the base geometry object that will have the transformation applied to it. If null, operations involving this geometry will return null results. Transformer Gets or sets the transformer that defines the geometric transformation. The transformation is applied from left (first element) to right (last element), with the target geometry being on the left side. public ITransformer Transformer { get; set; } Property Value ITransformer Remarks The transformer can be null, in which case no transformation is applied to the geometry. XName Gets the XML element name used for serialization. public static string XName { get; } Property Value string The string “TransformationGeom”. Methods Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object Remarks The duplication process creates new instances of both the transformer and geometry objects if they implement the appropriate cloning interfaces. ExpandToBox3d(Box3d) Expands the given box to include the bounds of the transformed geometry. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The box to expand. Remarks This method updates the provided box to encompass the transformed geometry. If the geometry or its STL representation is null, no expansion occurs. GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d resolution) Parameters resolution IPolarResolution2d Polar resolution Returns Stl A newly created STL. GetStl() Gets the transformed STL representation of the geometry. public Stl GetStl() Returns Stl The transformed STL if both geometry and transformer are valid; the original STL if transformer is null; null if geometry is null or produces null STL. Remarks If the transformer is null, the method returns the untransformed geometry. If the geometry is null or produces a null STL, the method returns null. 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. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.Geom.Tri3d.html": { "href": "api/Hi.Geom.Tri3d.html", @@ -1732,7 +1747,7 @@ "api/Hi.Geom.html": { "href": "api/Hi.Geom.html", "title": "Namespace Hi.Geom | HiAPI-C# 2025", - "summary": "Namespace Hi.Geom Classes ArrayUtil Utility class for array operations. AxisAngle4d Axis(3d) and angle(1d) Box2d Lightweight 2d box. An orthogonal box which the edges are all parallel with Cartesian Coordinate. The data contains in a Box2d is Min and Max. Box2d.NoInit Flag for calling Box2d(NoInit). Box3d Lightweight 3d box. An orthogonal box which the edges are all parallel with Cartesian Coordinate. The data contains in a Box3d is Min and Max. Box3d.NoInit Flag for calling Box3d(NoInit). Cylindroid 3d Geometry of Cylindroid. DVec3d Dual Vec3d with p(Vec3d) and n(Vec3d). ExtendedCylinder An extensible cylinder geometry that generates a corresponding Cylindroid by the start section and the total length. Flat3d Represents a 3D plane defined by a unit normal vector and its signed distance from the origin. The plane equation is: Ax + By + Cz + d = 0, where (A,B,C) is the normal vector and d is the distance to origin. GeomCombination A class that manages multiple STL sources as a single source. GeomUtil Utility of Geometry. Mat4d 4x4 Matrix. MathNetUtil Utility class for MathNet.Numerics operations. MathUtil Math Utility. NativeFraction Native wrapper for C++ fraction_t<0> (unlimited precision fraction). A fraction consists of a numerator and denominator using unlimited precision integers. NativeStl Native Stl. For purpose of efficient swept volume. NativeTopoStld Native TopoStl with element type double. NativeTopoStlfr Native TopoStl with element type fraction. PairZr Value pair of Z and R. PairZrUtil Utility class for working with PairZr objects Polar3d Represents a point in 3D space using polar coordinates Segment3d Represents a 3D line segment defined by two endpoints. Stl STL (stereolithography). Composed by Triangles. Provide Stl File R/W. StlFile Represents an STL file with loading and saving capabilities StlFuncHost A class that hosts a function to generate STL geometry. StlUtil Utility for Stl. TransformationGeom Represents a geometric transformation that can be applied to a geometry object. This class combines a transformer with a target geometry to produce transformed geometric results. Tri3d Basic 3D Triangle. Tri3dUtil Utility of Tri3d. Include generator of triangles from points. Vec2d Basic 2D point (or vector). Vec2i Basic 2D point (or vector). Vec3d Basic 3D point (or vector). Structs Fraction Pure C# unlimited precision fraction. Interfaces IExpandToBox2d Object that can be expanded to a Box2d. IExpandToBox3d Object that can be expanded to a Box3d. IFlat3d Interface for a 3D plane that provides an anchor point and a normal vector. IGenStl Interface for generating STL geometry with a resolution. IGeomProperty Interface for objects that have a geometry property. IGetStl Interface for retrieving STL geometry data. IGetZrContour Interface for retrieving Z-R contour data for rotational geometries. IGetZrList Interface for getting a list of Z-R pairs. IStlSource Stl provider with xml support. ITri3d Interface for 3D triangles. IVec Interface for vector types with generic element type. IZrListSourceProperty Provides a source for obtaining an IGetZrList. Enums Dir Enumeration of coordinate axis directions in 3D space. FractionStatus Status flags for Fraction and NativeFraction. Corresponds to IS_PACKED_MASK and IS_EVALUATED_MASK in C++ fraction_base_t. Mat4d.IndexFlag Specifies the indexing method for matrix construction from vectors. Stl.StlType Stl file format." + "summary": "Namespace Hi.Geom Classes ArrayUtil Utility class for array operations. AxisAngle4d Axis(3d) and angle(1d) Box2d Lightweight 2d box. An orthogonal box which the edges are all parallel with Cartesian Coordinate. The data contains in a Box2d is Min and Max. Box2d.NoInit Flag for calling Box2d(NoInit). Box3d Lightweight 3d box. An orthogonal box which the edges are all parallel with Cartesian Coordinate. The data contains in a Box3d is Min and Max. Box3d.NoInit Flag for calling Box3d(NoInit). Cylindroid 3d Geometry of Cylindroid. DVec3d Dual Vec3d with p(Vec3d) and n(Vec3d). ExtendedCylinder An extensible cylinder geometry that generates a corresponding Cylindroid by the start section and the total length. Flat3d Represents a 3D plane defined by a unit normal vector and its signed distance from the origin. The plane equation is: Ax + By + Cz + d = 0, where (A,B,C) is the normal vector and d is the distance to origin. GeomCombination A class that manages multiple STL sources as a single source. GeomUtil Utility of Geometry. Mat4d 4x4 Matrix. MathNetUtil Utility class for MathNet.Numerics operations. MathUtil Math Utility. NativeFraction Native wrapper for C++ fraction_t<0> (unlimited precision fraction). A fraction consists of a numerator and denominator using unlimited precision integers. NativeStl Native Stl. For purpose of efficient swept volume. NativeTopoStld Native TopoStl with element type double. NativeTopoStlfr Native TopoStl with element type fraction. ObjUtil Wavefront OBJ writer for RGB-coloured triangle buffers. PairZr Value pair of Z and R. PairZrUtil Utility class for working with PairZr objects PlyUtil Stanford PLY writer for RGB-coloured triangle buffers. Polar3d Represents a point in 3D space using polar coordinates Segment3d Represents a 3D line segment defined by two endpoints. Stl STL (stereolithography). Composed by Triangles. Provide Stl File R/W. StlFile Represents an STL file with loading and saving capabilities StlFuncHost A class that hosts a function to generate STL geometry. StlUtil Utility for Stl. TransformationGeom Represents a geometric transformation that can be applied to a geometry object. This class combines a transformer with a target geometry to produce transformed geometric results. Tri3d Basic 3D Triangle. Tri3dUtil Utility of Tri3d. Include generator of triangles from points. Vec2d Basic 2D point (or vector). Vec2i Basic 2D point (or vector). Vec3d Basic 3D point (or vector). Structs Fraction Pure C# unlimited precision fraction. Interfaces IExpandToBox2d Object that can be expanded to a Box2d. IExpandToBox3d Object that can be expanded to a Box3d. IFlat3d Interface for a 3D plane that provides an anchor point and a normal vector. IGenStl Interface for generating STL geometry with a resolution. IGeomProperty Interface for objects that have a geometry property. IGetStl Interface for retrieving STL geometry data. IGetZrContour Interface for retrieving Z-R contour data for rotational geometries. IGetZrList Interface for getting a list of Z-R pairs. IStlSource Stl provider with xml support. ITri3d Interface for 3D triangles. IVec Interface for vector types with generic element type. IZrListSourceProperty Provides a source for obtaining an IGetZrList. Enums Dir Enumeration of coordinate axis directions in 3D space. FractionStatus Status flags for Fraction and NativeFraction. Corresponds to IS_PACKED_MASK and IS_EVALUATED_MASK in C++ fraction_base_t. Mat4d.IndexFlag Specifies the indexing method for matrix construction from vectors. Stl.StlType Stl file format." }, "api/Hi.Grpcs.ClStripService.ClStripServiceBase.html": { "href": "api/Hi.Grpcs.ClStripService.ClStripServiceBase.html", @@ -1872,7 +1887,7 @@ "api/Hi.Machining.FreeformRemover.html": { "href": "api/Hi.Machining.FreeformRemover.html", "title": "Class FreeformRemover | HiAPI-C# 2025", - "summary": "Class FreeformRemover Namespace Hi.Machining Assembly HiMech.dll Represents a freeform cutting tool that can be used in machining operations. This cutter type supports complex geometries for both the noble (upper) part and the shaper (cutting) part. public class FreeformRemover : ICutter, IGetSweptable, IVolumeRemover, IAnchoredDisplayee, IDisplayee, ITopo, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchoredDisplayeeList, IGetFletchBuckle, IMakeXmlSource, IAbstractNote, IAnchoredCollidableStem, IAnchoredCollidableNode, IAnchoredCollidableBased, IExpandToBox3d, IDuplicate, IDisposable, IClearCache, INameNote Inheritance object FreeformRemover Implements ICutter IGetSweptable IVolumeRemover IAnchoredDisplayee IDisplayee ITopo IGetAsmb IGetAnchor IGetTopoIndex IGetAnchoredDisplayeeList IGetFletchBuckle IMakeXmlSource IAbstractNote IAnchoredCollidableStem IAnchoredCollidableNode IAnchoredCollidableBased IExpandToBox3d IDuplicate IDisposable IClearCache INameNote Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) CutterUtil.GetCutterBodyCoolingArea_mm2(ICutter) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The FreeformRemover class provides functionality for: Managing complex cutting tool geometries Supporting both spinning and non-spinning cutting operations Handling collision detection and display Managing tool assembly and anchoring Supporting XML serialization and deserialization Constructors FreeformRemover() Initializes a new instance. public FreeformRemover() Remarks This constructor initializes the cutter with default settings and creates the necessary anchors and topology bricks for both the noble and shaper parts. FreeformRemover(XElement, string, string, IProgress, object[]) Initializes a new instance from XML data. public FreeformRemover(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement The XML element containing the cutter data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path for resolving references. progress IProgress res object[] Additional resources for initialization. Properties AbstractNote Gets a brief description of the cutter, including its height. public string AbstractNote { get; } Property Value string Remarks The abstract note includes the cutter type and its height dimension, formatted as \"Freeform-H{this.GetBox3d().Dim.Z}\". CollidableName Gets the name used for collision detection purposes. public string CollidableName { get; } Property Value string CutterTip Gets the cutter tip anchor point. On the same location of GeomAnchor. public Anchor CutterTip { get; } Property Value Anchor Remarks The cutter tip represents the reference point for the cutting edge or surface. This point is used for positioning and orientation calculations during machining operations. GeomAnchor StrutGeom and ShaperGeom locate on this anchor. On the same location of CutterTip. public Anchor GeomAnchor { get; } Property Value Anchor GeomToHolderBranch Gets the branch that transforms from GeomAnchor to Hi.Machining.FreeformRemover.HolderBuckle. public Branch GeomToHolderBranch { get; } Property Value Branch GeomToHolderTransformer Gets or sets the transformer from GeomAnchor to Hi.Machining.FreeformRemover.HolderBuckle. public ITransformer GeomToHolderTransformer { get; set; } Property Value ITransformer IsSpinningCutter Gets or sets a value indicating whether this is a spinning cutting tool. public bool IsSpinningCutter { get; set; } Property Value bool Remarks This property affects how the cutter interacts with the workpiece during machining operations. Spinning cutters typically perform rotary cutting operations, while non-spinning cutters may be used for other types of machining. KeepHolderBuckleOnTop When true, automatically translates the holder buckle to be above the highest geometry point. public bool KeepHolderBuckleOnTop { get; set; } Property Value bool Name Name. public string Name { get; set; } Property Value string Note Note. public string Note { get; set; } Property Value string ShaperGeom Gets or sets the shaper (cutting) part geometry of the cutter. public IGetStl ShaperGeom { get; set; } Property Value IGetStl Remarks The shaper geometry represents the cutting portion of the tool that directly interacts with the workpiece during machining operations. ShaperTopoBrick Gets the topology brick representing the shaper (cutting) part of the cutter. public ITopoBrick ShaperTopoBrick { get; } Property Value ITopoBrick StrutGeom Gets or sets the strut (upper) part geometry of the cutter. public IGetStl StrutGeom { get; set; } Property Value IGetStl Remarks The noble geometry represents the non-cutting portion of the tool, typically including the tool holder and shank. This geometry is important for collision checking and visualization. StrutTopoBrick Gets the topology brick representing the upper (noble) part of the cutter. public ITopoBrick StrutTopoBrick { get; } Property Value ITopoBrick XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears all cached data associated with the cutter. public void ClearCache() Remarks This includes clearing the cached sweptable and solid representations of both the noble and shaper parts of the cutter. Display(Bind) Displays the cutter using the provided binding context. public void Display(Bind bind) Parameters bind Bind The binding context for display operations. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) Releases the unmanaged resources and optionally releases the managed resources. protected virtual void Dispose(bool disposing) Parameters disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources. Duplicate(params object[]) Creates a deep copy of the current instance. public object Duplicate(params object[] res) Parameters res object[] Additional resources for duplication. Returns object A new instance with copied geometry data. ExpandToBox3d(Box3d) Expands the given bounding box to include the cutter's geometry. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand. GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredCollidables() Gets the list of anchored collidable nodes contained by this stem. public List GetAnchoredCollidables() Returns List A list of anchored collidable nodes. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetShaperDisplayee() Gets the shaper displayee for visualization purposes. public IAnchoredDisplayee GetShaperDisplayee() Returns IAnchoredDisplayee An IAnchoredDisplayee representing the shaper (cutting) part of the cutter. Remarks This method creates a display representation of the shaper geometry, which can be either the raw geometry if it implements IDisplayee, or the topology brick representation. GetStrutAnchoredDisplayee() Gets the noble (upper) part displayee for visualization purposes. public AnchoredDisplayee GetStrutAnchoredDisplayee() Returns AnchoredDisplayee An AnchoredDisplayee representing the noble part of the cutter with modified display properties. Remarks This method creates a display representation of the noble geometry with slightly darker coloring to distinguish it from the shaper part during visualization. GetSweptable(double) Gets the sweptable representation of the cutter for swept volume calculations. public Sweptable GetSweptable(double fractionTolerance) Parameters fractionTolerance double The tolerance value for swept volume calculations. Returns Sweptable A Sweptable object representing the cutter's swept volume, or null if the shaper geometry is not available. Remarks The sweptable representation is cached for performance. Use ClearCache to reset the cached data. 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." + "summary": "Class FreeformRemover Namespace Hi.Machining Assembly HiMech.dll Represents a freeform cutting tool that can be used in machining operations. This cutter type supports complex geometries for both the noble (upper) part and the shaper (cutting) part. public class FreeformRemover : ICutter, IGetSweptable, IVolumeRemover, IAnchoredDisplayee, IDisplayee, ITopo, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchoredDisplayeeList, IGetFletchBuckle, IMakeXmlSource, IAbstractNote, IAnchoredCollidableStem, IAnchoredCollidableNode, IAnchoredCollidableBased, IExpandToBox3d, IDuplicate, IDisposable, IClearCache, INameNote Inheritance object FreeformRemover Implements ICutter IGetSweptable IVolumeRemover IAnchoredDisplayee IDisplayee ITopo IGetAsmb IGetAnchor IGetTopoIndex IGetAnchoredDisplayeeList IGetFletchBuckle IMakeXmlSource IAbstractNote IAnchoredCollidableStem IAnchoredCollidableNode IAnchoredCollidableBased IExpandToBox3d IDuplicate IDisposable IClearCache INameNote Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) CutterUtil.GetCutterBodyCoolingArea_mm2(ICutter) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The FreeformRemover class provides functionality for: Managing complex cutting tool geometries Supporting both spinning and non-spinning cutting operations Handling collision detection and display Managing tool assembly and anchoring Supporting XML serialization and deserialization Constructors FreeformRemover() Initializes a new instance. public FreeformRemover() Remarks This constructor initializes the cutter with default settings and creates the necessary anchors and topology bricks for both the noble and shaper parts. FreeformRemover(XElement, string, string, IProgress, object[]) Initializes a new instance from XML data. public FreeformRemover(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement The XML element containing the cutter data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path for resolving references. progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional resources for initialization. Properties AbstractNote Gets a brief description of the cutter, including its height. public string AbstractNote { get; } Property Value string Remarks The abstract note includes the cutter type and its height dimension, formatted as \"Freeform-H{this.GetBox3d().Dim.Z}\". CollidableName Gets the name used for collision detection purposes. public string CollidableName { get; } Property Value string CutterTip Gets the cutter tip anchor point. On the same location of GeomAnchor. public Anchor CutterTip { get; } Property Value Anchor Remarks The cutter tip represents the reference point for the cutting edge or surface. This point is used for positioning and orientation calculations during machining operations. GeomAnchor StrutGeom and ShaperGeom locate on this anchor. On the same location of CutterTip. public Anchor GeomAnchor { get; } Property Value Anchor GeomToHolderBranch Gets the branch that transforms from GeomAnchor to Hi.Machining.FreeformRemover.HolderBuckle. public Branch GeomToHolderBranch { get; } Property Value Branch GeomToHolderTransformer Gets or sets the transformer from GeomAnchor to Hi.Machining.FreeformRemover.HolderBuckle. public ITransformer GeomToHolderTransformer { get; set; } Property Value ITransformer IsSpinningCutter Gets or sets a value indicating whether this is a spinning cutting tool. public bool IsSpinningCutter { get; set; } Property Value bool Remarks This property affects how the cutter interacts with the workpiece during machining operations. Spinning cutters typically perform rotary cutting operations, while non-spinning cutters may be used for other types of machining. KeepHolderBuckleOnTop When true, automatically translates the holder buckle to be above the highest geometry point. public bool KeepHolderBuckleOnTop { get; set; } Property Value bool Name Name. public string Name { get; set; } Property Value string Note Note. public string Note { get; set; } Property Value string ShaperGeom Gets or sets the shaper (cutting) part geometry of the cutter. public IGetStl ShaperGeom { get; set; } Property Value IGetStl Remarks The shaper geometry represents the cutting portion of the tool that directly interacts with the workpiece during machining operations. ShaperTopoBrick Gets the topology brick representing the shaper (cutting) part of the cutter. public ITopoBrick ShaperTopoBrick { get; } Property Value ITopoBrick StrutGeom Gets or sets the strut (upper) part geometry of the cutter. public IGetStl StrutGeom { get; set; } Property Value IGetStl Remarks The noble geometry represents the non-cutting portion of the tool, typically including the tool holder and shank. This geometry is important for collision checking and visualization. StrutTopoBrick Gets the topology brick representing the upper (noble) part of the cutter. public ITopoBrick StrutTopoBrick { get; } Property Value ITopoBrick XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears all cached data associated with the cutter. public void ClearCache() Remarks This includes clearing the cached sweptable and solid representations of both the noble and shaper parts of the cutter. Display(Bind) Displays the cutter using the provided binding context. public void Display(Bind bind) Parameters bind Bind The binding context for display operations. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) Releases the unmanaged resources and optionally releases the managed resources. protected virtual void Dispose(bool disposing) Parameters disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources. Duplicate(params object[]) Creates a deep copy of the current instance. public object Duplicate(params object[] res) Parameters res object[] Additional resources for duplication. Returns object A new instance with copied geometry data. ExpandToBox3d(Box3d) Expands the given bounding box to include the cutter's geometry. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand. GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredCollidables() Gets the list of anchored collidable nodes contained by this stem. public List GetAnchoredCollidables() Returns List A list of anchored collidable nodes. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetShaperDisplayee() Gets the shaper displayee for visualization purposes. public IAnchoredDisplayee GetShaperDisplayee() Returns IAnchoredDisplayee An IAnchoredDisplayee representing the shaper (cutting) part of the cutter. Remarks This method creates a display representation of the shaper geometry, which can be either the raw geometry if it implements IDisplayee, or the topology brick representation. GetStrutAnchoredDisplayee() Gets the noble (upper) part displayee for visualization purposes. public AnchoredDisplayee GetStrutAnchoredDisplayee() Returns AnchoredDisplayee An AnchoredDisplayee representing the noble part of the cutter with modified display properties. Remarks This method creates a display representation of the noble geometry with slightly darker coloring to distinguish it from the shaper part during visualization. GetSweptable(double) Gets the sweptable representation of the cutter for swept volume calculations. public Sweptable GetSweptable(double fractionTolerance) Parameters fractionTolerance double The tolerance value for swept volume calculations. Returns Sweptable A Sweptable object representing the cutter's swept volume, or null if the shaper geometry is not available. Remarks The sweptable representation is cached for performance. Use ClearCache to reset the cached data. 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." }, "api/Hi.Machining.ICutter.html": { "href": "api/Hi.Machining.ICutter.html", @@ -1917,7 +1932,7 @@ "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html": { "href": "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html", "title": "Class MachiningEquipment | HiAPI-C# 2025", - "summary": "Class MachiningEquipment Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Machining Equipment. Include the machining chain, workpiece, tool and fixture, etc.. public class MachiningEquipment : IMachiningEquipment, IDisplayee, IExpandToBox3d, IMakeXmlSource, IGetAnchoredDisplayeeList, IGetProgramCl, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetMachiningChain, IGetMachiningEquipment Inheritance object MachiningEquipment Implements IMachiningEquipment IDisplayee IExpandToBox3d IMakeXmlSource IGetAnchoredDisplayeeList IGetProgramCl IGetAsmb IGetAnchor IGetTopoIndex IGetMachiningChain IGetMachiningEquipment Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) MachiningEquipmentUtil.GetIsoCoordinatePosition(IMachiningEquipment, Vec3d) MachiningEquipmentUtil.GetMachinePositionAtProgramZero(IMachiningEquipment) MachiningEquipmentUtil.GetMachinePositionAtTableBuckleZero(IMachiningEquipment) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningEquipment() Ctor. public MachiningEquipment() MachiningEquipment(XElement, string, string, IProgress) Initializes a new instance of the MachiningEquipment class from XML data. public MachiningEquipment(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing the equipment configuration. baseDirectory string The base directory for resolving relative file paths. relFile string The relative file path for XML serialization. progress IProgress Properties Asmb Asmb of the entire equipment. public Asmb Asmb { get; } Property Value Asmb BackgroundTemperature_C Gets or sets the background temperature in Celsius. This is a convenience property that converts between Celsius and Kelvin. public double BackgroundTemperature_C { get; set; } Property Value double BackgroundTemperature_K Gets or sets the background temperature in Kelvin. This represents the ambient temperature of the machining environment. public double BackgroundTemperature_K { get; set; } Property Value double CoolantHeatCondition Gets or sets the coolant heat condition settings. This includes coolant temperature and heat transfer coefficients. public CoolantHeatCondition CoolantHeatCondition { get; set; } Property Value CoolantHeatCondition Fixture Fixture. public Fixture Fixture { get; set; } Property Value Fixture MachiningChain Body of the equipment. public IMachiningChain MachiningChain { get; set; } Property Value IMachiningChain MachiningChainFile Gets or sets the file path of the solid machining chain. This is used for XML serialization and file management. public string MachiningChainFile { get; set; } Property Value string MachiningTool Milling tool. public IMachiningTool MachiningTool { get; set; } Property Value IMachiningTool SpindleCapability Gets or sets the spindle capability configuration. This defines the operational capabilities and limits of the spindle. public SpindleCapability SpindleCapability { get; set; } Property Value SpindleCapability SpindleCapabilityFile Gets or sets the file path of the spindle capability configuration. This is used for XML serialization and file management. public string SpindleCapabilityFile { get; set; } Property Value string TableToComp Transformer of the branch from table buckle to workpiece side buckle. Note that the workpiece side buckle links to Fixture if fixture exist; otherwise, it links to Workpiece if workpiece exist. If Workpiece either Fixture do not exist, this property makes no effect. public ITransformer TableToComp { get; set; } Property Value ITransformer Workpiece Workpiece. public Workpiece Workpiece { get; set; } Property Value Workpiece WorkpieceDisplayee Displayee for workpiece rendering. Set by the runtime service layer. public IDisplayee WorkpieceDisplayee { get; set; } Property Value IDisplayee XName Name for XML IO. public static string XName { get; } Property Value string Methods Detect(bool) Performs collision detection. public MechCollisionResult Detect(bool addFluteAndWorkpieceDetection) Parameters addFluteAndWorkpieceDetection bool Whether to include flute and workpiece in detection. Returns MechCollisionResult Significant collision result. Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetMachiningChain() Gets the machining chain instance. public IMachiningChain GetMachiningChain() Returns IMachiningChain The machining chain instance. GetMillingEquipment() Get MachiningEquipment. public MachiningEquipment GetMillingEquipment() Returns MachiningEquipment MachiningEquipment GetProgramCl() Get CL (Cutter Location). Where Point is tool tip position; Normal is tool orientation. public DVec3d GetProgramCl() Returns DVec3d CL GetToolTipXyzOnProgramZero() Get tool tip xyz from workpiece geom anchor. public Vec3d GetToolTipXyzOnProgramZero() Returns Vec3d if no MachiningTool or no Workpiece equiping, return null; otherwise, return the XYZ from workpiece geomanchor to tool tip. GetTransformFromRootToProgramZero() Gets the transform matrix from the root coordinate system to the program zero coordinate system. public Mat4d GetTransformFromRootToProgramZero() Returns Mat4d A 4x4 transformation matrix representing the coordinate system transformation. 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. PrepareCollidableItems() Prepares all collidable items for collision detection. This method should be called before performing collision detection. public void PrepareCollidableItems() ResetCollisionFlags() Resets all collision flags to their default states. This should be called after collision detection is complete. public void ResetCollisionFlags() Tooling(int, MachiningToolHouse) Set MachiningTool by toolId and toolHouse. public bool Tooling(int toolId, MachiningToolHouse toolHouse) Parameters toolId int tool ID toolHouse MachiningToolHouse tool house Returns bool true if tool changed; otherwise, false. Exceptions ToolNotFoundException Throw If toolId does not exist on toolHouse." + "summary": "Class MachiningEquipment Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Machining Equipment. Include the machining chain, workpiece, tool and fixture, etc.. public class MachiningEquipment : IMachiningEquipment, IDisplayee, IExpandToBox3d, IMakeXmlSource, IGetAnchoredDisplayeeList, IGetProgramCl, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetMachiningChain, IGetMachiningEquipment Inheritance object MachiningEquipment Implements IMachiningEquipment IDisplayee IExpandToBox3d IMakeXmlSource IGetAnchoredDisplayeeList IGetProgramCl IGetAsmb IGetAnchor IGetTopoIndex IGetMachiningChain IGetMachiningEquipment Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) MachiningEquipmentUtil.GetIsoCoordinatePosition(IMachiningEquipment, Vec3d) MachiningEquipmentUtil.GetMachinePositionAtProgramZero(IMachiningEquipment) MachiningEquipmentUtil.GetMachinePositionAtTableBuckleZero(IMachiningEquipment) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningEquipment() Ctor. public MachiningEquipment() MachiningEquipment(XElement, string, string, IProgress) Initializes a new instance of the MachiningEquipment class from XML data. public MachiningEquipment(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing the equipment configuration. baseDirectory string The base directory for resolving relative file paths. relFile string The relative file path for XML serialization. progress IProgress Progress reporter for diagnostic messages emitted during construction. Properties Asmb Asmb of the entire equipment. public Asmb Asmb { get; } Property Value Asmb BackgroundTemperature_C Gets or sets the background temperature in Celsius. This is a convenience property that converts between Celsius and Kelvin. public double BackgroundTemperature_C { get; set; } Property Value double BackgroundTemperature_K Gets or sets the background temperature in Kelvin. This represents the ambient temperature of the machining environment. public double BackgroundTemperature_K { get; set; } Property Value double CoolantHeatCondition Gets or sets the coolant heat condition settings. This includes coolant temperature and heat transfer coefficients. public CoolantHeatCondition CoolantHeatCondition { get; set; } Property Value CoolantHeatCondition Fixture Fixture. public Fixture Fixture { get; set; } Property Value Fixture MachiningChain Body of the equipment. public IMachiningChain MachiningChain { get; set; } Property Value IMachiningChain MachiningChainFile Gets or sets the file path of the solid machining chain. This is used for XML serialization and file management. public string MachiningChainFile { get; set; } Property Value string MachiningTool Milling tool. public IMachiningTool MachiningTool { get; set; } Property Value IMachiningTool SpindleCapability Gets or sets the spindle capability configuration. This defines the operational capabilities and limits of the spindle. public SpindleCapability SpindleCapability { get; set; } Property Value SpindleCapability SpindleCapabilityFile Gets or sets the file path of the spindle capability configuration. This is used for XML serialization and file management. public string SpindleCapabilityFile { get; set; } Property Value string TableToComp Transformer of the branch from table buckle to workpiece side buckle. Note that the workpiece side buckle links to Fixture if fixture exist; otherwise, it links to Workpiece if workpiece exist. If Workpiece either Fixture do not exist, this property makes no effect. public ITransformer TableToComp { get; set; } Property Value ITransformer Workpiece Workpiece. public Workpiece Workpiece { get; set; } Property Value Workpiece WorkpieceDisplayee Displayee for workpiece rendering. Set by the runtime service layer. public IDisplayee WorkpieceDisplayee { get; set; } Property Value IDisplayee XName Name for XML IO. public static string XName { get; } Property Value string Methods Detect(bool) Performs collision detection. public MechCollisionResult Detect(bool addFluteAndWorkpieceDetection) Parameters addFluteAndWorkpieceDetection bool Whether to include flute and workpiece in detection. Returns MechCollisionResult Significant collision result. Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetMachiningChain() Gets the machining chain instance. public IMachiningChain GetMachiningChain() Returns IMachiningChain The machining chain instance. GetMillingEquipment() Get MachiningEquipment. public MachiningEquipment GetMillingEquipment() Returns MachiningEquipment MachiningEquipment GetProgramCl() Get CL (Cutter Location). Where Point is tool tip position; Normal is tool orientation. public DVec3d GetProgramCl() Returns DVec3d CL GetToolTipXyzOnProgramZero() Get tool tip xyz from workpiece geom anchor. public Vec3d GetToolTipXyzOnProgramZero() Returns Vec3d if no MachiningTool or no Workpiece equiping, return null; otherwise, return the XYZ from workpiece geomanchor to tool tip. GetTransformFromRootToProgramZero() Gets the transform matrix from the root coordinate system to the program zero coordinate system. public Mat4d GetTransformFromRootToProgramZero() Returns Mat4d A 4x4 transformation matrix representing the coordinate system transformation. 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. PrepareCollidableItems() Prepares all collidable items for collision detection. This method should be called before performing collision detection. public void PrepareCollidableItems() ResetCollisionFlags() Resets all collision flags to their default states. This should be called after collision detection is complete. public void ResetCollisionFlags() Tooling(int, MachiningToolHouse) Set MachiningTool by toolId and toolHouse. public bool Tooling(int toolId, MachiningToolHouse toolHouse) Parameters toolId int tool ID toolHouse MachiningToolHouse tool house Returns bool true if tool changed; otherwise, false. Exceptions ToolNotFoundException Throw If toolId does not exist on toolHouse." }, "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html": { "href": "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html", @@ -1932,7 +1947,7 @@ "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html": { "href": "api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html", "title": "Class MachiningEquipmentUtil | HiAPI-C# 2025", - "summary": "Class MachiningEquipmentUtil Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Utility methods for working with machining equipment. public static class MachiningEquipmentUtil Inheritance object MachiningEquipmentUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetIsoCoordinatePosition(IMachiningEquipment, Vec3d) Get ISO coordinate position from the root. public static Vec3d GetIsoCoordinatePosition(this IMachiningEquipment equipment, Vec3d g54seriesOffset) Parameters equipment IMachiningEquipment g54seriesOffset Vec3d Returns Vec3d GetMachinePositionAtProgramZero(IMachiningEquipment) Gets the machine coordinate when the attacher is at program zero. The machine coordinate are all assumed to be zero. public static Vec3d GetMachinePositionAtProgramZero(this IMachiningEquipment equipment) Parameters equipment IMachiningEquipment The machining equipment. Returns Vec3d The machine coordinate vector. GetMachinePositionAtTableBuckleZero(IMachiningEquipment) Gets the machine coordinate when the attacher is at table buckle zero. public static Vec3d GetMachinePositionAtTableBuckleZero(this IMachiningEquipment equipment) Parameters equipment IMachiningEquipment The machining equipment. Returns Vec3d The machine coordinate vector." + "summary": "Class MachiningEquipmentUtil Namespace Hi.Machining.MachiningEquipmentUtils Assembly HiMech.dll Utility methods for working with machining equipment. public static class MachiningEquipmentUtil Inheritance object MachiningEquipmentUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods GetIsoCoordinatePosition(IMachiningEquipment, Vec3d) Get ISO coordinate position from the g54seriesOffset. public static Vec3d GetIsoCoordinatePosition(this IMachiningEquipment equipment, Vec3d g54seriesOffset) Parameters equipment IMachiningEquipment g54seriesOffset Vec3d Returns Vec3d GetMachinePositionAtProgramZero(IMachiningEquipment) Gets the machine coordinate when the attacher is at program zero. The machine coordinate are all assumed to be zero. public static Vec3d GetMachinePositionAtProgramZero(this IMachiningEquipment equipment) Parameters equipment IMachiningEquipment The machining equipment. Returns Vec3d The machine coordinate vector. GetMachinePositionAtTableBuckleZero(IMachiningEquipment) Gets the machine coordinate when the attacher is at table buckle zero. public static Vec3d GetMachinePositionAtTableBuckleZero(this IMachiningEquipment equipment) Parameters equipment IMachiningEquipment The machining equipment. Returns Vec3d The machine coordinate vector." }, "api/Hi.Machining.MachiningEquipmentUtils.html": { "href": "api/Hi.Machining.MachiningEquipmentUtils.html", @@ -1947,12 +1962,12 @@ "api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html": { "href": "api/Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html", "title": "Class MachiningVolumeRemovalProc.StepMotionSnapshot | HiAPI-C# 2025", - "summary": "Class MachiningVolumeRemovalProc.StepMotionSnapshot Namespace Hi.Machining Assembly HiMech.dll Represents a snapshot of the machining motion state. public record MachiningVolumeRemovalProc.StepMotionSnapshot : IEquatable Inheritance object MachiningVolumeRemovalProc.StepMotionSnapshot Implements IEquatable 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors StepMotionSnapshot(DVec3d, DVec3d, SeqPair, Dictionary, double[], bool, IMachiningTool, WorkpieceService, double, CoolantHeatCondition, SortedList) Represents a snapshot of the machining motion state. public StepMotionSnapshot(DVec3d GeomCl, DVec3d ProgramCl, SeqPair Seq, Dictionary AnchorTransformDictionary, double[] McValues, bool EnableSweeping, IMachiningTool MachiningTool, WorkpieceService WorkpieceService, double BackgroundTemperature_K, CoolantHeatCondition CoolantHeatCondition, SortedList FluteZToDzList) Parameters GeomCl DVec3d The geometric CL point. ProgramCl DVec3d The program CL point. Seq SeqPair The sequence pair of transformation matrices. AnchorTransformDictionary Dictionary Dictionary mapping anchors to their transformation matrices. McValues double[] Array of machine values. EnableSweeping bool Whether sweeping is enabled. MachiningTool IMachiningTool The machining tool being used. WorkpieceService WorkpieceService BackgroundTemperature_K double Background temperature in Kelvin. CoolantHeatCondition CoolantHeatCondition The coolant heat condition. FluteZToDzList SortedList Sorted list mapping flute Z positions to their deltas. Properties AnchorTransformDictionary Dictionary mapping anchors to their transformation matrices. public Dictionary AnchorTransformDictionary { get; init; } Property Value Dictionary BackgroundTemperature_K Background temperature in Kelvin. public double BackgroundTemperature_K { get; init; } Property Value double CoolantHeatCondition The coolant heat condition. public CoolantHeatCondition CoolantHeatCondition { get; init; } Property Value CoolantHeatCondition EnableSweeping Whether sweeping is enabled. public bool EnableSweeping { get; init; } Property Value bool FluteZToDzList Sorted list mapping flute Z positions to their deltas. public SortedList FluteZToDzList { get; init; } Property Value SortedList GeomCl The geometric CL point. public DVec3d GeomCl { get; init; } Property Value DVec3d MachiningTool The machining tool being used. public IMachiningTool MachiningTool { get; init; } Property Value IMachiningTool McValues Array of machine values. public double[] McValues { get; init; } Property Value double[] ProgramCl The program CL point. public DVec3d ProgramCl { get; init; } Property Value DVec3d Seq The sequence pair of transformation matrices. public SeqPair Seq { get; init; } Property Value SeqPair Workpiece The workpiece data model. public Workpiece Workpiece { get; } Property Value Workpiece WorkpieceService public WorkpieceService WorkpieceService { get; init; } Property Value WorkpieceService" + "summary": "Class MachiningVolumeRemovalProc.StepMotionSnapshot Namespace Hi.Machining Assembly HiMech.dll Represents a snapshot of the machining motion state. public record MachiningVolumeRemovalProc.StepMotionSnapshot : IEquatable Inheritance object MachiningVolumeRemovalProc.StepMotionSnapshot Implements IEquatable 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors StepMotionSnapshot(DVec3d, DVec3d, SeqPair, Dictionary, double[], bool, IMachiningTool, WorkpieceService, double, CoolantHeatCondition, SortedList) Represents a snapshot of the machining motion state. public StepMotionSnapshot(DVec3d GeomCl, DVec3d ProgramCl, SeqPair Seq, Dictionary AnchorTransformDictionary, double[] McValues, bool EnableSweeping, IMachiningTool MachiningTool, WorkpieceService WorkpieceService, double BackgroundTemperature_K, CoolantHeatCondition CoolantHeatCondition, SortedList FluteZToDzList) Parameters GeomCl DVec3d The geometric CL point. ProgramCl DVec3d The program CL point. Seq SeqPair The sequence pair of transformation matrices. AnchorTransformDictionary Dictionary Dictionary mapping anchors to their transformation matrices. McValues double[] Array of machine values. EnableSweeping bool Whether sweeping is enabled. MachiningTool IMachiningTool The machining tool being used. WorkpieceService WorkpieceService Service that owns the workpiece being machined. BackgroundTemperature_K double Background temperature in Kelvin. CoolantHeatCondition CoolantHeatCondition The coolant heat condition. FluteZToDzList SortedList Sorted list mapping flute Z positions to their deltas. Properties AnchorTransformDictionary Dictionary mapping anchors to their transformation matrices. public Dictionary AnchorTransformDictionary { get; init; } Property Value Dictionary BackgroundTemperature_K Background temperature in Kelvin. public double BackgroundTemperature_K { get; init; } Property Value double CoolantHeatCondition The coolant heat condition. public CoolantHeatCondition CoolantHeatCondition { get; init; } Property Value CoolantHeatCondition EnableSweeping Whether sweeping is enabled. public bool EnableSweeping { get; init; } Property Value bool FluteZToDzList Sorted list mapping flute Z positions to their deltas. public SortedList FluteZToDzList { get; init; } Property Value SortedList GeomCl The geometric CL point. public DVec3d GeomCl { get; init; } Property Value DVec3d MachiningTool The machining tool being used. public IMachiningTool MachiningTool { get; init; } Property Value IMachiningTool McValues Array of machine values. public double[] McValues { get; init; } Property Value double[] ProgramCl The program CL point. public DVec3d ProgramCl { get; init; } Property Value DVec3d Seq The sequence pair of transformation matrices. public SeqPair Seq { get; init; } Property Value SeqPair Workpiece The workpiece data model. public Workpiece Workpiece { get; } Property Value Workpiece WorkpieceService Service that owns the workpiece being machined. public WorkpieceService WorkpieceService { get; init; } Property Value WorkpieceService" }, "api/Hi.Machining.MachiningVolumeRemovalProc.html": { "href": "api/Hi.Machining.MachiningVolumeRemovalProc.html", "title": "Class MachiningVolumeRemovalProc | HiAPI-C# 2025", - "summary": "Class MachiningVolumeRemovalProc Namespace Hi.Machining Assembly HiMech.dll Handles the machining volume removal process and related operations. public class MachiningVolumeRemovalProc Inheritance object MachiningVolumeRemovalProc 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningVolumeRemovalProc(Func, Func) Initializes a new instance of the MachiningVolumeRemovalProc class. public MachiningVolumeRemovalProc(Func machiningEquipmentGetter, Func workpieceServiceGetter) Parameters machiningEquipmentGetter Func workpieceServiceGetter Func Properties ClMachiningValve Gets the CL machining valve used to control the machining process. public ClMachiningValve ClMachiningValve { get; } Property Value ClMachiningValve Methods ClearCache() Clears the internal cache, including the CL machining valve state and step-related caches. public void ClearCache() StepAssignDummyAttach(WorkpieceService, ClStrip, DVec3d) Creates a dummy attachment point in the CL strip. public static ClStripPos StepAssignDummyAttach(WorkpieceService workpieceService, ClStrip clStrip, DVec3d programCl) Parameters workpieceService WorkpieceService clStrip ClStrip The CL strip to add the attachment to. programCl DVec3d The program CL point for the attachment. Returns ClStripPos The created CL strip position. StepGetGeomBoolCache(ICutter, double, SeqPair, bool, bool?) Gets a geometric boolean cache for the current step based on cutter and motion parameters. public static GeomBoolCache StepGetGeomBoolCache(ICutter cutter, double stepPreferredCubeWidth, SeqPair seq, bool enableSweeping, bool? isFluteTouchingWorkpiece) Parameters cutter ICutter The cutter to use for the operation. stepPreferredCubeWidth double The preferred cube width for discretization. seq SeqPair The sequence pair of transformation matrices. enableSweeping bool Whether to enable sweeping operation. isFluteTouchingWorkpiece bool? Optional flag indicating if the flute is touching the workpiece. Returns GeomBoolCache A geometric boolean cache containing the operation data. Remarks Note that it is hard to know if flute is touching the workpiece by sweeping without making sweeping volume. Checking by non-sweeping geometry may miss the touching part of the sweeping volume. Hence isFluteTouchingWorkpiece should be kept null and be considered obsolete. There is no performance gain from that parameter. Events CutterChanged Event that is triggered when the cutter is changed, providing the previous and current cutter. public event Action> CutterChanged Event Type Action>" + "summary": "Class MachiningVolumeRemovalProc Namespace Hi.Machining Assembly HiMech.dll Handles the machining volume removal process and related operations. public class MachiningVolumeRemovalProc Inheritance object MachiningVolumeRemovalProc 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningVolumeRemovalProc(Func, Func) Initializes a new instance of the MachiningVolumeRemovalProc class. public MachiningVolumeRemovalProc(Func machiningEquipmentGetter, Func workpieceServiceGetter) Parameters machiningEquipmentGetter Func workpieceServiceGetter Func Properties ClMachiningValve Gets the CL machining valve used to control the machining process. public ClMachiningValve ClMachiningValve { get; } Property Value ClMachiningValve Methods ClearCache() Clears the internal cache, including the CL machining valve state and step-related caches. public void ClearCache() StepAssignDummyAttach(WorkpieceService, ClStrip, DVec3d) Creates a dummy attachment point in the CL strip. public static ClStripPos StepAssignDummyAttach(WorkpieceService workpieceService, ClStrip clStrip, DVec3d programCl) Parameters workpieceService WorkpieceService Service that owns the workpiece to attach to. clStrip ClStrip The CL strip to add the attachment to. programCl DVec3d The program CL point for the attachment. Returns ClStripPos The created CL strip position. StepGetGeomBoolCache(ICutter, double, SeqPair, bool, bool?) Gets a geometric boolean cache for the current step based on cutter and motion parameters. public static GeomBoolCache StepGetGeomBoolCache(ICutter cutter, double stepPreferredCubeWidth, SeqPair seq, bool enableSweeping, bool? isFluteTouchingWorkpiece) Parameters cutter ICutter The cutter to use for the operation. stepPreferredCubeWidth double The preferred cube width for discretization. seq SeqPair The sequence pair of transformation matrices. enableSweeping bool Whether to enable sweeping operation. isFluteTouchingWorkpiece bool? Optional flag indicating if the flute is touching the workpiece. Returns GeomBoolCache A geometric boolean cache containing the operation data. Remarks Note that it is hard to know if flute is touching the workpiece by sweeping without making sweeping volume. Checking by non-sweeping geometry may miss the touching part of the sweeping volume. Hence isFluteTouchingWorkpiece should be kept null and be considered obsolete. There is no performance gain from that parameter. Events CutterChanged Event that is triggered when the cutter is changed, providing the previous and current cutter. public event Action> CutterChanged Event Type Action>" }, "api/Hi.Machining.MatInterpolationKit.html": { "href": "api/Hi.Machining.MatInterpolationKit.html", @@ -2022,12 +2037,12 @@ "api/Hi.MachiningProcs.MachiningActRunner.html": { "href": "api/Hi.MachiningProcs.MachiningActRunner.html", "title": "Class MachiningActRunner | HiAPI-C# 2025", - "summary": "Class MachiningActRunner Namespace Hi.MachiningProcs Assembly HiMech.dll Represents a runner for machining actions that manages milling steps, tool paths, and collision detection. public class MachiningActRunner : IDisposable Inheritance object MachiningActRunner Implements 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningActRunner(SessionProgress, Action>, Func, Func, Func, Action, ICsScriptApi) Initializes a new instance. public MachiningActRunner(SessionProgress sessionProgress, Action> stepStorageWriter, Func machiningToolHouseGetter, Func machiningEquipmentGetter, Func workpieceServiceGetter, Action resetMillingStepLuggageDbAction, ICsScriptApi shellApi) Parameters sessionProgress SessionProgress The milling message host. stepStorageWriter Action> The action to write milling step luggages to storage. machiningToolHouseGetter Func The getter function for the machining tool house. machiningEquipmentGetter Func The getter function for the machining equipment. workpieceServiceGetter Func The getter function for the workpiece runtime service. resetMillingStepLuggageDbAction Action Action to reset the milling step luggage database. shellApi ICsScriptApi The C# script API for the milling session. Fields InternalMachiningStepBuilt Internal callback fired when a step is built (same timing as MachiningStepBuilt); used by host services before UI subscribers. public MachiningActRunner.MachiningStepBuiltDelegate InternalMachiningStepBuilt Field Value MachiningActRunner.MachiningStepBuiltDelegate Properties ClStrip Gets the cutter location strip. public ClStrip ClStrip { get; } Property Value ClStrip Config Gets or sets the runner configuration. public MachiningActRunnerConfig Config { get; set; } Property Value MachiningActRunnerConfig EnableMotionDependentMachiningResolution EnableMotionDependentMachiningResolution. It works on feed per cycle and feed per tooth motion resolution. MachiningResolution_mm changed by the LinearResolution_mm. public bool EnableMotionDependentMachiningResolution { get; set; } Property Value bool EnableSweeping Gets whether sweeping is enabled based on the motion resolution type. public bool EnableSweeping { get; } Property Value bool GrpcPostStepAction Gets or sets the action to be performed after each step for GRPC service. This is for internal use only. public static Action GrpcPostStepAction { get; set; } Property Value Action MachiningMotionResolution Gets or sets the machining motion resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution_mm Gets or sets the preferred cube width for steps. public double MachiningResolution_mm { get; set; } Property Value double MachiningToolHouse Gets or sets the machining tool house. public MachiningToolHouse MachiningToolHouse { get; } Property Value MachiningToolHouse MachiningVolumeRemovalProc Gets the machining volume removal processor. public MachiningVolumeRemovalProc MachiningVolumeRemovalProc { get; } Property Value MachiningVolumeRemovalProc SessionProgress Gets or sets the milling message host. public SessionProgress SessionProgress { get; set; } Property Value SessionProgress StateActRunner Gets the state act runner. This property is provided as a member value getter and should not be modified. public StateActRunner StateActRunner { get; } Property Value StateActRunner XyzabcChain Gets the XYZABC kinematic chain if the current machining chain supports it; otherwise null. public IXyzabcChain XyzabcChain { get; } Property Value IXyzabcChain Methods AdjustAptCutterStlResolutionByNcResolutionAndWorkpieceResolution() Adjusts the APT cutter STL resolution based on NC resolution and workpiece resolution. public void AdjustAptCutterStlResolutionByNcResolutionAndWorkpieceResolution() Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToActMcStep(IAct) Expands an act into machine control steps. public IEnumerable ExpandToActMcStep(IAct act) Parameters act IAct The act to expand. Returns IEnumerable A sequence of machine control steps. GetMillingActRunner() Gets the current milling act runner instance. public MachiningActRunner GetMillingActRunner() Returns MachiningActRunner The current milling act runner instance. ProcAct(IAct, MachiningSession, IMachiningStepHost, IGetSentence, CancellationToken) Processes an act with the given parameters. public IEnumerable ProcAct(IAct act, MachiningSession machiningSession, IMachiningStepHost host, IGetSentence sourceCommand, CancellationToken cancellationToken) Parameters act IAct The act to process. machiningSession MachiningSession The milling session. host IMachiningStepHost The milling step host. sourceCommand IGetSentence The source command. cancellationToken CancellationToken The cancellation token. Returns IEnumerable A sequence of processed objects. ResetMillingStepLuggageDb() Resets the milling step luggage database. public void ResetMillingStepLuggageDb() ResetStateAndClStrip() Resets the state and cutter location strip. public void ResetStateAndClStrip() UpdateByMachiningChain() Update By MachiningChain. Internal Use Only. public void UpdateByMachiningChain() UpdateByMachiningEquipment() Update By Hi.MachiningProcs.MachiningActRunner.MachiningEquipment. Internal Use Only. public void UpdateByMachiningEquipment() WaitAll() Waits for all pending operations to complete. public void WaitAll() Events MachiningStepBuilt event to configure steps. The first parameter is the previous step; the second parameter is the current step. The previous step is null if no previous step exists. public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate UiPostStepAction Event raised after each step for UI updates. This is for internal use only. public event Action UiPostStepAction Event Type Action" + "summary": "Class MachiningActRunner Namespace Hi.MachiningProcs Assembly HiMech.dll Represents a runner for machining actions that manages milling steps, tool paths, and collision detection. public class MachiningActRunner : IDisposable Inheritance object MachiningActRunner Implements 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningActRunner(SessionProgress, Action>, Func, Func, Func, Action, ICsScriptApi) Initializes a new instance. public MachiningActRunner(SessionProgress sessionProgress, Action> stepStorageWriter, Func machiningToolHouseGetter, Func machiningEquipmentGetter, Func workpieceServiceGetter, Action resetMillingStepLuggageDbAction, ICsScriptApi shellApi) Parameters sessionProgress SessionProgress The milling message host. stepStorageWriter Action> The action to write milling step luggages to storage. machiningToolHouseGetter Func The getter function for the machining tool house. machiningEquipmentGetter Func The getter function for the machining equipment. workpieceServiceGetter Func The getter function for the workpiece runtime service. resetMillingStepLuggageDbAction Action Action to reset the milling step luggage database. shellApi ICsScriptApi The C# script API for the milling session. Fields InternalMachiningStepBuilt Internal callback fired when a step is built (same timing as MachiningStepBuilt); used by host services before UI subscribers. public MachiningActRunner.MachiningStepBuiltDelegate InternalMachiningStepBuilt Field Value MachiningActRunner.MachiningStepBuiltDelegate Properties ClStrip Gets the cutter location strip. public ClStrip ClStrip { get; } Property Value ClStrip Config Gets or sets the runner configuration. public MachiningActRunnerConfig Config { get; set; } Property Value MachiningActRunnerConfig EnableMotionDependentMachiningResolution EnableMotionDependentMachiningResolution. It works on feed per cycle and feed per tooth motion resolution. MachiningResolution_mm changed by the LinearResolution_mm. public bool EnableMotionDependentMachiningResolution { get; set; } Property Value bool EnableSweeping Gets whether sweeping is enabled based on the motion resolution type. public bool EnableSweeping { get; } Property Value bool GrpcPostStepAction Gets or sets the action to be performed after each step for GRPC service. This is for internal use only. public static Action GrpcPostStepAction { get; set; } Property Value Action MachiningMotionResolution Gets or sets the machining motion resolution. public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution_mm Gets or sets the preferred cube width for steps. public double MachiningResolution_mm { get; set; } Property Value double MachiningToolHouse Gets or sets the machining tool house. public MachiningToolHouse MachiningToolHouse { get; } Property Value MachiningToolHouse MachiningVolumeRemovalProc Gets the machining volume removal processor. public MachiningVolumeRemovalProc MachiningVolumeRemovalProc { get; } Property Value MachiningVolumeRemovalProc SessionProgress Gets or sets the milling message host. public SessionProgress SessionProgress { get; set; } Property Value SessionProgress StateActRunner Gets the state act runner. This property is provided as a member value getter and should not be modified. public StateActRunner StateActRunner { get; } Property Value StateActRunner XyzabcChain Gets the XYZABC kinematic chain if the current machining chain supports it; otherwise null. public IXyzabcChain XyzabcChain { get; } Property Value IXyzabcChain Methods AdjustAptCutterStlResolutionByNcResolutionAndWorkpieceResolution() Adjusts the APT cutter STL resolution based on NC resolution and workpiece resolution. public void AdjustAptCutterStlResolutionByNcResolutionAndWorkpieceResolution() Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToActMcStep(IAct) Expands an act into machine control steps. public IEnumerable ExpandToActMcStep(IAct act) Parameters act IAct The act to expand. Returns IEnumerable A sequence of machine control steps. GetMillingActRunner() Gets the current milling act runner instance. public MachiningActRunner GetMillingActRunner() Returns MachiningActRunner The current milling act runner instance. ProcAct(IAct, MachiningSession, IMachiningStepHost, IGetSentence, CancellationToken) Processes an act with the given parameters. public IEnumerable ProcAct(IAct act, MachiningSession machiningSession, IMachiningStepHost host, IGetSentence sourceCommand, CancellationToken cancellationToken) Parameters act IAct The act to process. machiningSession MachiningSession The milling session. host IMachiningStepHost The milling step host. sourceCommand IGetSentence The source command. cancellationToken CancellationToken The cancellation token. Returns IEnumerable A sequence of processed objects. ResetMillingStepLuggageDb() Resets the milling step luggage database. public void ResetMillingStepLuggageDb() ResetStateAndClStrip() Resets the state and cutter location strip. public void ResetStateAndClStrip() UpdateByMachiningChain() Update By MachiningChain. Internal Use Only. public void UpdateByMachiningChain() UpdateByMachiningEquipment() Update By Hi.MachiningProcs.MachiningActRunner.MachiningEquipment. Internal Use Only. public void UpdateByMachiningEquipment() WaitAll() Waits for all pending operations to complete. public void WaitAll() WarnIfCurrentToolFluteMaterialMissing(MachiningSession, int?) Emit a one-shot session warning if the currently equipped Hi.MachiningProcs.MachiningActRunner.MachiningEquipment.MachiningTool is a MillingCutter without a FluteMaterial. Gated by EnablePhysics; deduped per tool reference via WarnedFluteMaterialMissingTools so each offending tool is mentioned at most once per session. Pass toolId when known (e.g. from an IActTooling) and the warning will name the ID; omit it (the BeginSession path) and the warning falls back to “the currently equipped tool” — the equipped tool may have been set externally and not appear in MachiningToolHouse, so reverse-looking up an ID is unreliable and reference equality is the right unit of dedup anyway. public void WarnIfCurrentToolFluteMaterialMissing(MachiningSession machiningSession, int? toolId = null) Parameters machiningSession MachiningSession toolId int? Events MachiningStepBuilt event to configure steps. The first parameter is the previous step; the second parameter is the current step. The previous step is null if no previous step exists. public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate UiPostStepAction Event raised after each step for UI updates. This is for internal use only. public event Action UiPostStepAction Event Type Action" }, "api/Hi.MachiningProcs.MachiningActRunnerConfig.html": { "href": "api/Hi.MachiningProcs.MachiningActRunnerConfig.html", "title": "Class MachiningActRunnerConfig | HiAPI-C# 2025", - "summary": "Class MachiningActRunnerConfig Namespace Hi.MachiningProcs Assembly HiMech.dll Represents the configuration for a milling act runner. Provides settings for physics simulation, evaluation, and temperature control. public class MachiningActRunnerConfig : IMakeXmlSource Inheritance object MachiningActRunnerConfig Implements IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningActRunnerConfig() Initializes a new instance. public MachiningActRunnerConfig() MachiningActRunnerConfig(XElement, string, IProgress) Initializes a new instance of the MachiningActRunnerConfig class from XML. public MachiningActRunnerConfig(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The source XML element. baseDirectory string The base directory for resolving relative paths. progress IProgress Properties EnableCollisionDetection Gets or sets whether collision detection is enabled. public bool EnableCollisionDetection { get; set; } Property Value bool EnableDeflectionTransformation Gets or sets whether deflection transformation is enabled. Note: This feature is pending testing. public bool EnableDeflectionTransformation { get; set; } Property Value bool EnablePauseOnFailure Enable Pause On Failure Detected. Only take effect if the EnableStrokeLimitCheck or EnableCollisionDetection is enabled. public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether milling force evaluation is enabled. public bool EnablePhysics { get; set; } Property Value bool EnableStrokeLimitCheck Gets or sets whether stroke limit checking is enabled. public bool EnableStrokeLimitCheck { get; set; } Property Value bool EnableWearEffect Gets or sets whether to enable coating wear effects. Note: This function is not fully prepared yet. Only affects further wear by the wear coefficient of inner material. public bool EnableWearEffect { get; set; } Property Value bool InitSpindleTemperature_C Gets or sets the initial spindle temperature in Celsius. public double InitSpindleTemperature_C { get; set; } Property Value double InitSpindleTemperature_K Gets or sets the initial spindle temperature in Kelvin. The temperature is initialized when a working session is restarted or a new session is started. public double InitSpindleTemperature_K { get; set; } Property Value double IsIdealOffsetDependentOnToolHouse Gets or sets whether the ideal tool offset is automatically populated from the tool house geometry before simulation. public bool IsIdealOffsetDependentOnToolHouse { get; set; } Property Value bool XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods 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." + "summary": "Class MachiningActRunnerConfig Namespace Hi.MachiningProcs Assembly HiMech.dll Represents the configuration for a milling act runner. Provides settings for physics simulation, evaluation, and temperature control. public class MachiningActRunnerConfig : IMakeXmlSource Inheritance object MachiningActRunnerConfig Implements IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors MachiningActRunnerConfig() Initializes a new instance. public MachiningActRunnerConfig() MachiningActRunnerConfig(XElement, string, IProgress) Initializes a new instance of the MachiningActRunnerConfig class from XML. public MachiningActRunnerConfig(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The source XML element. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. Properties EnableCollisionDetection Gets or sets whether collision detection is enabled. public bool EnableCollisionDetection { get; set; } Property Value bool EnableDeflectionTransformation Gets or sets whether deflection transformation is enabled. Note: This feature is pending testing. public bool EnableDeflectionTransformation { get; set; } Property Value bool EnablePauseOnFailure Enable Pause On Failure Detected. Only take effect if the EnableStrokeLimitCheck or EnableCollisionDetection is enabled. public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether milling force evaluation is enabled. public bool EnablePhysics { get; set; } Property Value bool EnableStrokeLimitCheck Gets or sets whether stroke limit checking is enabled. public bool EnableStrokeLimitCheck { get; set; } Property Value bool EnableWearEffect Gets or sets whether to enable coating wear effects. Note: This function is not fully prepared yet. Only affects further wear by the wear coefficient of inner material. public bool EnableWearEffect { get; set; } Property Value bool InitSpindleTemperature_C Gets or sets the initial spindle temperature in Celsius. public double InitSpindleTemperature_C { get; set; } Property Value double InitSpindleTemperature_K Gets or sets the initial spindle temperature in Kelvin. The temperature is initialized when a working session is restarted or a new session is started. public double InitSpindleTemperature_K { get; set; } Property Value double IsIdealOffsetDependentOnToolHouse Gets or sets whether the ideal tool offset is automatically populated from the tool house geometry before simulation. public bool IsIdealOffsetDependentOnToolHouse { get; set; } Property Value bool XName Gets the XML element name for serialization. public static string XName { get; } Property Value string Methods 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." }, "api/Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html": { "href": "api/Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html", @@ -2057,7 +2072,7 @@ "api/Hi.MachiningProcs.MachiningSession.html": { "href": "api/Hi.MachiningProcs.MachiningSession.html", "title": "Class MachiningSession | HiAPI-C# 2025", - "summary": "Class MachiningSession Namespace Hi.MachiningProcs Assembly HiMech.dll Represents a machining session that manages the execution and optimization of machining operations. Provides functionality for controlling the machining process, handling optimization options, and managing session state. Implements IDisposable to clean up SessionWriters on session end. public class MachiningSession : IDisposable Inheritance object MachiningSession Implements 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties CurrentSourceCommand Gets or sets the current source command being processed. public IIndexedFileLine CurrentSourceCommand { get; set; } Property Value IIndexedFileLine Data Gets or sets the data dictionary for the player session. public Dictionary Data { get; set; } Property Value Dictionary FileIndexOnRunCommand File index counter, auto-incremented per RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) call within this session. Replaces the previous per-runner counter so that file indices are scoped to a session and reset naturally when a new session begins. public int FileIndexOnRunCommand { get; set; } Property Value int IsNcOptOptionListUpdatedByStep Internal Use Only. public bool IsNcOptOptionListUpdatedByStep { get; set; } Property Value bool NcOptOption Gets or sets the NC optimization options for UI operations. public NcOptOption NcOptOption { get; set; } Property Value NcOptOption NcRunnerSessionState Per-session NC pipeline state shared across RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls. Holds lazy-initialized NcDiagnosticProgress and the per-layer LazyLinkedList chain used for cross-file modal continuity. public NcRunnerSessionState NcRunnerSessionState { get; } Property Value NcRunnerSessionState PacePlayee Internal set only. public PacePlayee PacePlayee { get; set; } Property Value PacePlayee PostBlockScripts Per-line scripts injected externally (without modifying NC files). Key: FileLineIndex of the NC block. Value: C# script text to execute after the NC block. Consumed by CsScriptEndSemantic. public Dictionary PostBlockScripts { get; } Property Value Dictionary PreBlockScripts Per-line scripts injected externally (without modifying NC files). Key: FileLineIndex of the NC block. Value: C# script text to execute before the NC block. Consumed by CsScriptBeginSemantic. public Dictionary PreBlockScripts { get; } Property Value Dictionary SessionWriters StreamWriters registered during the session (e.g. by diagnostic output methods). Key: relative output file path. Disposed automatically when the session ends. public Dictionary SessionWriters { get; } Property Value Dictionary StepIndexToNcOptOptionSortedList Gets or sets the mapping of step indices to NC optimization options. For internal use only. Takes effect during internal optimization process. public SortedList StepIndexToNcOptOptionSortedList { get; set; } Property Value SortedList StepTaskBundle Gets or sets the current step task bundle. public MachiningParallelProc.StepTaskBundle StepTaskBundle { get; set; } Property Value MachiningParallelProc.StepTaskBundle Methods BeginPreserve() Begins a preserve section in the optimization process. public void BeginPreserve() Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() EndPreserve() Ends a preserve section in the optimization process. public void EndPreserve() Preserve() Preserves one line of NC code in the optimization process. public void Preserve() RunMachiningStepBuilt(MachiningStep, MachiningStep) Internal use only. Invokes MachiningStepBuilt. public void RunMachiningStepBuilt(MachiningStep preStep, MachiningStep curStep) Parameters preStep MachiningStep curStep MachiningStep RunMachiningStepSelected(MachiningStep) Internal use only. Invokes MachiningStepSelected. public void RunMachiningStepSelected(MachiningStep machiningStep) Parameters machiningStep MachiningStep RunSourcedActEntry(SourcedActEntry) Internal use only. Invokes SourcedActEntry. public void RunSourcedActEntry(SourcedActEntry entry) Parameters entry SourcedActEntry RunSyntaxPieceRan(SyntaxPiece) Internal use only. Invokes SyntaxPieceRan. public void RunSyntaxPieceRan(SyntaxPiece syntaxPiece) Parameters syntaxPiece SyntaxPiece UpdateNcOptOptionMapIfNeeded(int) Updates the NC optimization option map if needed. Internal use only. public bool UpdateNcOptOptionMapIfNeeded(int stepIndex) Parameters stepIndex int The index of the step to update. Returns bool True if the map was updated; otherwise, false. Events MachiningStepBuilt Event triggered when a machining step is built. public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate MachiningStepSelected Event triggered when a machining step is selected. public event Action MachiningStepSelected Event Type Action OnCurrentLineEnd Event raised when the current line ends. The event buffer is cleared on every line change. public event Action OnCurrentLineEnd Event Type Action SourcedActEntry Event triggered for each SourcedActEntry produced during NC/CSV execution. public event Action SourcedActEntry Event Type Action SyntaxPieceRan Event triggered when a syntax piece has been executed. public event Action SyntaxPieceRan Event Type Action" + "summary": "Class MachiningSession Namespace Hi.MachiningProcs Assembly HiMech.dll Represents a machining session that manages the execution and optimization of machining operations. Provides functionality for controlling the machining process, handling optimization options, and managing session state. Implements IDisposable to clean up SessionWriters on session end. public class MachiningSession : IDisposable Inheritance object MachiningSession Implements 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties CurrentSourceCommand Gets or sets the current source command being processed. public IIndexedFileLine CurrentSourceCommand { get; set; } Property Value IIndexedFileLine Data Gets or sets the data dictionary for the player session. public Dictionary Data { get; set; } Property Value Dictionary FileIndexOnRunCommand File index counter, auto-incremented per RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) call within this session. Replaces the previous per-runner counter so that file indices are scoped to a session and reset naturally when a new session begins. public int FileIndexOnRunCommand { get; set; } Property Value int IsNcOptOptionListUpdatedByStep Internal Use Only. public bool IsNcOptOptionListUpdatedByStep { get; set; } Property Value bool NcOptOption Gets or sets the NC optimization options for UI operations. public NcOptOption NcOptOption { get; set; } Property Value NcOptOption NcRunnerSessionState Per-session NC pipeline state shared across RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls. Holds lazy-initialized NcDiagnosticProgress and the per-layer LazyLinkedList chain used for cross-file modal continuity. public NcRunnerSessionState NcRunnerSessionState { get; } Property Value NcRunnerSessionState PacePlayee Internal set only. public PacePlayee PacePlayee { get; set; } Property Value PacePlayee PostBlockScripts Per-line scripts injected externally (without modifying NC files). Key: FileLineIndex of the NC block. Value: C# script text to execute after the NC block. Consumed by CsScriptEndSemantic. public Dictionary PostBlockScripts { get; } Property Value Dictionary PreBlockScripts Per-line scripts injected externally (without modifying NC files). Key: FileLineIndex of the NC block. Value: C# script text to execute before the NC block. Consumed by CsScriptBeginSemantic. public Dictionary PreBlockScripts { get; } Property Value Dictionary SessionWriters StreamWriters registered during the session (e.g. by diagnostic output methods). Key: relative output file path. Disposed automatically when the session ends. public Dictionary SessionWriters { get; } Property Value Dictionary StepIndexToNcOptOptionSortedList Gets or sets the mapping of step indices to NC optimization options. For internal use only. Takes effect during internal optimization process. public SortedList StepIndexToNcOptOptionSortedList { get; set; } Property Value SortedList StepTaskBundle Gets or sets the current step task bundle. public MachiningParallelProc.StepTaskBundle StepTaskBundle { get; set; } Property Value MachiningParallelProc.StepTaskBundle WarnedFluteMaterialMissingTools Tools already surfaced via “MillingCutter.FluteMaterial not set” warning. Keyed by IMachiningTool reference so the dedup is stable across the two emission points: ProcAct(IAct, MachiningSession, IMachiningStepHost, IGetSentence, CancellationToken) at each IActTooling, and BeginSession for the tool that may already be equipped before the session begins (which has no tool ID to dedup with). Reference equality is more precise than tool ID — the same tool object equipped twice should warn once, regardless of how it was reached. public HashSet WarnedFluteMaterialMissingTools { get; } Property Value HashSet Methods BeginPreserve() Begins a preserve section in the optimization process. public void BeginPreserve() Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() EndPreserve() Ends a preserve section in the optimization process. public void EndPreserve() Preserve() Preserves one line of NC code in the optimization process. public void Preserve() RunMachiningStepBuilt(MachiningStep, MachiningStep) Internal use only. Invokes MachiningStepBuilt. public void RunMachiningStepBuilt(MachiningStep preStep, MachiningStep curStep) Parameters preStep MachiningStep curStep MachiningStep RunMachiningStepSelected(MachiningStep) Internal use only. Invokes MachiningStepSelected. public void RunMachiningStepSelected(MachiningStep machiningStep) Parameters machiningStep MachiningStep RunSourcedActEntry(SourcedActEntry) Internal use only. Invokes SourcedActEntry. public void RunSourcedActEntry(SourcedActEntry entry) Parameters entry SourcedActEntry RunSyntaxPieceRan(SyntaxPiece) Internal use only. Invokes SyntaxPieceRan. public void RunSyntaxPieceRan(SyntaxPiece syntaxPiece) Parameters syntaxPiece SyntaxPiece UpdateNcOptOptionMapIfNeeded(int) Updates the NC optimization option map if needed. Internal use only. public bool UpdateNcOptOptionMapIfNeeded(int stepIndex) Parameters stepIndex int The index of the step to update. Returns bool True if the map was updated; otherwise, false. Events MachiningStepBuilt Event triggered when a machining step is built. public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate MachiningStepSelected Event triggered when a machining step is selected. public event Action MachiningStepSelected Event Type Action OnCurrentLineEnd Event raised when the current line ends. The event buffer is cleared on every line change. public event Action OnCurrentLineEnd Event Type Action SourcedActEntry Event triggered for each SourcedActEntry produced during NC/CSV execution. public event Action SourcedActEntry Event Type Action SyntaxPieceRan Event triggered when a syntax piece has been executed. public event Action SyntaxPieceRan Event Type Action" }, "api/Hi.MachiningProcs.MillingUtil.html": { "href": "api/Hi.MachiningProcs.MillingUtil.html", @@ -2082,7 +2097,7 @@ "api/Hi.MachiningProcs.RuntimeApi.html": { "href": "api/Hi.MachiningProcs.RuntimeApi.html", "title": "Class RuntimeApi | HiAPI-C# 2025", - "summary": "Class RuntimeApi Namespace Hi.MachiningProcs Assembly HiNc.dll Runtime API for machining operations. public class RuntimeApi : ICsScriptApi Inheritance object RuntimeApi Implements ICsScriptApi 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DefaultParaTemplateDimension Gets or sets the parameter template dimension (2D or 3D). [JsAce] public int DefaultParaTemplateDimension { get; set; } Property Value int DiffVisualRadius_mm Gets or sets the visual radius in millimeters for difference visualization. Controls the radius used for highlighting differences between workpiece states. [JsAce] public double DiffVisualRadius_mm { get; set; } Property Value double DispCacheMb Gets or sets the display cache size in megabytes. [Obsolete] public long DispCacheMb { get; set; } Property Value long DispCache_Mb Gets or sets the display cache size in megabytes. [JsAce] public long DispCache_Mb { get; set; } Property Value long EmbeddedLogMode Gets or sets the embedded log mode for NC optimization. [JsAce] public static NcOptimizationEmbeddedLogMode EmbeddedLogMode { get; set; } Property Value NcOptimizationEmbeddedLogMode EnableCollisionDetection Gets or sets whether collision detection is enabled. [JsAce(DocContentHtml = \"Enable Collision Detection.\")] public bool EnableCollisionDetection { get; set; } Property Value bool EnableIndividualStepAdjustmentLog Gets or sets whether to enable individual step adjustment logging. [JsAce] public static bool EnableIndividualStepAdjustmentLog { get; set; } Property Value bool EnableMapOnSelectionEnd Gets or sets whether to automatically map selections when they end. [JsAce] public bool EnableMapOnSelectionEnd { get; set; } Property Value bool EnableMotionDependentMachiningResolution Gets or sets whether motion-dependent machining resolution is enabled. [JsAce] public bool EnableMotionDependentMachiningResolution { get; set; } Property Value bool EnableMzLeverWeightingOnTraining Gets or sets whether Mz lever weighting is enabled on training. [Obsolete] public bool EnableMzLeverWeightingOnTraining { get; set; } Property Value bool EnablePauseOnCollision Gets or sets whether to pause execution when a collision is detected. This property only has an effect if collision detection is enabled. [Obsolete] public bool EnablePauseOnCollision { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure during execution. [JsAce(DocContentHtml = \"Enable Pause On Failure.\")] public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether milling force evaluation is enabled. [JsAce(DocContentHtml = \"Enable milling force evaluation.\")] public bool EnablePhysics { get; set; } Property Value bool EnableSampleNormalization [Obsolete] public bool EnableSampleNormalization { get; set; } Property Value bool Remarks The input normalization deminish the quantity effect. The R-value decrease from 99% to 70% in moment training case from NKUST\\nkust2024-milling-para-training-plan\\workingx.hincproj Don't apply this option. EnableSoftNcRunner Workaround flag to use SoftNcRunner instead of HardNcRunner. Will be removed when HardNcRunner is fully replaced. [JsAce(DocContentHtml = \"Enable SoftNcRunner instead of legacy HardNcRunner.\")] public bool EnableSoftNcRunner { get; set; } Property Value bool EnableWearEffect Gets or sets whether tool wear effects are enabled in simulation. [JsAce] public bool EnableWearEffect { get; set; } Property Value bool FeedPerCycle Gets a new feed per cycle machining motion resolution instance. [JsAce] public FeedPerCycleMachiningMotionResolution FeedPerCycle { get; } Property Value FeedPerCycleMachiningMotionResolution FeedPerTooth Gets a new feed per tooth machining motion resolution instance. [JsAce] public FeedPerToothMachiningMotionResolution FeedPerTooth { get; } Property Value FeedPerToothMachiningMotionResolution Fixture Gets or sets the fixture. [JsAce] public Fixture Fixture { get; set; } Property Value Fixture Global Global variables. [JsAce(\"Global[$1key]\")] public Dictionary Global { get; } Property Value Dictionary InitSpindleTemperature_C Gets or sets the initial spindle temperature in degrees Celsius. [JsAce(DocContentHtml = \"Spindle Temperature on initialization.\")] public double InitSpindleTemperature_C { get; set; } Property Value double JsAceCompletionProfileJsonArray Internal used. public static JsonArray JsAceCompletionProfileJsonArray { get; } Property Value JsonArray MachiningMotionResolution Gets or sets the machining motion resolution. [JsAce] public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution Gets or sets the machining resolution in millimeters. [JsAce] [Obsolete(\"Use MachiningResolution_mm instead.\")] public double MachiningResolution { get; set; } Property Value double MachiningResolution_mm Gets or sets the machining resolution in millimeters. [JsAce] public double MachiningResolution_mm { get; set; } Property Value double MachiningSession public MachiningSession MachiningSession { get; } Property Value MachiningSession MapTask Task tracking the status of mapping operations. public Task MapTask { get; set; } Property Value Task MillingCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce] public static int MillingCycleDivisionNum { get; set; } Property Value int MillingForceCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce(DocContentHtml = \"Obsoleted. Use MillingCycleDivisionNum instead.\")] [Obsolete(\"Use MillingCycleDivisionNum instead.\")] public static int MillingForceCycleDivisionNum { get; set; } Property Value int NcOptOption Gets or sets the NC optimization options. [JsAce] public NcOptOption NcOptOption { get; set; } Property Value NcOptOption OptEnableDepthCompensation Enables or disables depth compensation during optimization. [JsAce] public bool OptEnableDepthCompensation { get; set; } Property Value bool OptEnableFeedrate Gets or sets whether to enable feed rate optimization in NC optimization. [JsAce] public bool OptEnableFeedrate { get; set; } Property Value bool OptEnableForwardCompensation Enables or disables forward compensation during optimization. [JsAce] public bool OptEnableForwardCompensation { get; set; } Property Value bool OptEnableInterpolation Enables or disables reinterpolation for optimization. [JsAce] public bool OptEnableInterpolation { get; set; } Property Value bool OptEnableSideCompensation Enables or disables side compensation during optimization. [JsAce] public bool OptEnableSideCompensation { get; set; } Property Value bool OptExtendedPostDistance_mm Gets or sets the extended post-distance in millimeters for NC optimization. This is the distance after the current segment that will be considered for optimization. [JsAce] public double OptExtendedPostDistance_mm { get; set; } Property Value double OptExtendedPreDistance_mm Gets or sets the extended pre-distance in millimeters for NC optimization. This is the distance before the current segment that will be considered for optimization. [JsAce] public double OptExtendedPreDistance_mm { get; set; } Property Value double OptFeedrateAssignmentRatio Gets or sets the feedrate assignment ratio for optimization. If the feedrate change exceeds this ratio, the feedrate in the NC line will be updated. [JsAce] public double OptFeedrateAssignmentRatio { get; set; } Property Value double OptMaxAcceleration_mmds2 Maximum acceleration in mm/s² during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxAcceleration_mmds2 { get; set; } Property Value double OptMaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters for optimization. [JsAce] public double OptMaxFeedPerTooth_mm { get; set; } Property Value double OptMaxFeedrate_mmdmin Maximum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMaxFeedrate_mmdmin { get; set; } Property Value double OptMaxJerk_mmds3 Maximum jerk in mm/s³ during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxJerk_mmds3 { get; set; } Property Value double OptMinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters for optimization. [JsAce] public double OptMinFeedPerTooth_mm { get; set; } Property Value double OptMinFeedrate_mmdmin Minimum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMinFeedrate_mmdmin { get; set; } Property Value double OptPreferedForce_N Preferred force in N for optimization. [JsAce] public double OptPreferedForce_N { get; set; } Property Value double OptRapidFeed_mmdmin Rapid feed rate in mm/min for non-cutting movements during optimization. [JsAce] public double OptRapidFeed_mmdmin { get; set; } Property Value double OptSpindlePowerSafetyFactor Safety factor for MAX spindle power during optimization. [JsAce] public double OptSpindlePowerSafetyFactor { get; set; } Property Value double OptSpindlePowerUtilizationFactor Utilization factor for MAX spindle power during optimization. It is the reciprocal of the spindle power safety factor. [JsAce] public double OptSpindlePowerUtilizationFactor { get; set; } Property Value double OptSpindleTorqueSafetyFactor Gets or sets the MAX spindle torque safety factor for NC optimization. [JsAce] public double OptSpindleTorqueSafetyFactor { get; set; } Property Value double OptSpindleTorqueUtilizationFactor Utilization factor for MAX spindle torque during optimization. It is the reciprocal of the spindle torque safety factor. [JsAce] public double OptSpindleTorqueUtilizationFactor { get; set; } Property Value double OptThermalYieldSafetyFactor Safety factor for spindle torque during optimization. [JsAce] public double OptThermalYieldSafetyFactor { get; set; } Property Value double OptThermalYieldUtilizationFactor Utilization factor for thermal yield during optimization. It is the reciprocal of the thermal yield safety factor. [JsAce] public double OptThermalYieldUtilizationFactor { get; set; } Property Value double OptYieldingSafetyFactor Safety factor for yielding during optimization. [JsAce] public double OptYieldingSafetyFactor { get; set; } Property Value double OptYieldingUtilizationFactor Utilization factor for yielding during optimization. It is the reciprocal of the yielding safety factor. [JsAce] public double OptYieldingUtilizationFactor { get; set; } Property Value double ScriptOptions ScriptOptions. public ScriptOptions ScriptOptions { get; set; } Property Value ScriptOptions SessionMessageHost Obsolete alias for SessionProgress (session-scoped progress and messages). [JsAce] [Obsolete(\"Use SessionProgress instead.\")] public SessionProgress SessionMessageHost { get; } Property Value SessionProgress SessionProgress Gets the session message host for displaying messages. [JsAce] public SessionProgress SessionProgress { get; } Property Value SessionProgress StepCount Gets the total number of milling steps. [JsAce] public int StepCount { get; } Property Value int Workpiece Gets or sets the workpiece. [JsAce] public Workpiece Workpiece { get; set; } Property Value Workpiece Methods AddTimeDataByFile(string, string, double, double) Adds time-based data from a file to the time mapping dictionary with specified time bounds in seconds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, double beginTime, double endTime) Parameters key string Key to identify the data relFile string Relative path to the data file beginTime double Beginning time in seconds endTime double Ending time in seconds Returns bool True if the data was successfully added, false otherwise AddTimeDataByFile(string, string, string, string) Adds time-based data from a file to the time mapping dictionary with specified time bounds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, string beginTimeText, string endTimeText) Parameters key string Key to identify the data relFile string Relative path to the data file beginTimeText string Beginning time as text (seconds or TimeSpan format) endTimeText string Ending time as text (seconds or TimeSpan format) Returns bool True if the data was successfully added, false otherwise AdjustedFeedPerCycle(double, double) Gets a new feed per cycle machining motion resolution instance with adjusted scale and minimum linear resolution. [JsAce(\"AdjustedFeedPerCycle($1scale,$2minLinearResolution_mm)\")] public FeedPerCycleMachiningMotionResolution AdjustedFeedPerCycle(double scale, double minLinearResolution_mm = 0) Parameters scale double The scale factor for the resolution. minLinearResolution_mm double The minimum linear resolution in millimeters. Default is 0. Returns FeedPerCycleMachiningMotionResolution A new FeedPerCycleMachiningMotionResolution instance with the specified parameters. AppendMessagesToFile(string, params string[]) Appends messages to a file, optionally filtered by tags. [JsAce(\"AppendMessagesToFile(\\\"dstRelFile\\\",flags)\")] public void AppendMessagesToFile(string dstRelFile, params string[] flags) Parameters dstRelFile string Destination relative file path flags string[] Optional flags to filter messages by tags BeginPreserve() Begin Preserve section in optimzation process. [JsAce(\"BeginPreserve()\")] public void BeginPreserve() BeginSelection(string, AnchorMode, IStepShift) Begin mark on current line. milling step() has not triggered yet. public void BeginSelection(string key, AnchorMode anchorMode = AnchorMode.LineBegin, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the beginning of selection shift IStepShift Step shift to apply BeginSession() Begins a new machining session. Not for end user. public void BeginSession() ClearDefectDisplayee() Clears the defect displayee from the workpiece. [JsAce] public void ClearDefectDisplayee() ClearTimeMappingData() Clears all time mapping data. [JsAce] public void ClearTimeMappingData() Diff(double) Performs a difference analysis on the workpiece geometry to detect variations. [JsAce(\"Diff($1detectionRadius_mm)\")] public void Diff(double detectionRadius_mm) Parameters detectionRadius_mm double Radius for detecting differences EndPreserve() End Preserve section in optimzation process. [JsAce(\"EndPreserve()\")] public void EndPreserve() EndSelection(string, AnchorMode, IStepShift) End mark on current line for selection. public void EndSelection(string key, AnchorMode anchorMode = AnchorMode.LineEnd, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the end of selection shift IStepShift Step shift to apply EndSession() Ends the current machining session. Not for end user. public void EndSession() ErrorMessage(string) Displays an error message in the message host. [JsAce(\"ErrorMessage($1message)\")] public void ErrorMessage(string message) Parameters message string The error message to display FixedPace(double, double) Creates a fixed machining motion resolution with specified parameters. [JsAce(\"FixedPace($1linearResolution_mm, $2rotaryResolution_deg)\")] public FixedMachiningMotionResolution FixedPace(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters rotaryResolution_deg double Rotary resolution in degrees Returns FixedMachiningMotionResolution A new fixed machining motion resolution instance GetMillingStep(int) Retrieves a milling step at the specified index. [JsAce(Snippet = \"GetMillingStep($1\\\"stepIndex\\\")\")] public MachiningStep GetMillingStep(int stepIndex) Parameters stepIndex int Index of the milling step to retrieve Returns MachiningStep The milling step at the specified index GetStickMachiningToolObservationHeight_mm(int) Gets the observation height in millimeters for the specified stick machining tool. [JsAce(\"GetStickMachiningToolObservationHeight_mm($1toolId)\")] public double GetStickMachiningToolObservationHeight_mm(int toolId) Parameters toolId int The ID of the tool Returns double The observation height in millimeters GetUniformContourTrayShiftAngle_deg(int) Gets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"GetUniformContourTrayShiftAngle_deg($1toolId)\")] public double GetUniformContourTrayShiftAngle_deg(int toolId) Parameters toolId int The ID of the tool Returns double The shift angle in degrees LineSelection(string, AnchorMode, IStepShift, AnchorMode, IStepShift) Create a line selection from begin to end mark. public void LineSelection(string key, AnchorMode beginAnchorMode = AnchorMode.LineBegin, IStepShift beginShift = null, AnchorMode endAnchorMode = AnchorMode.LineEnd, IStepShift endShift = null) Parameters key string Identifier key for the selection beginAnchorMode AnchorMode Mode for anchoring the beginning of selection beginShift IStepShift Step shift to apply at beginning endAnchorMode AnchorMode Mode for anchoring the end of selection endShift IStepShift Step shift to apply at end LoadCuttingParaByFile(string) Loads cutting parameters from a file. [JsAce(\"LoadCuttingParaByFile($1\\\"relFile\\\")\")] public void LoadCuttingParaByFile(string relFile) Parameters relFile string File path relative to BaseDirectory. Map(string, FileTimeSection, CycleSamplingMode?) Maps selection data to time section. public Task Map(string key, FileTimeSection fileTimeSection = null, StepTimeShotUtil.CycleSamplingMode? cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters key string Identifier key for the selection fileTimeSection FileTimeSection File time section, or null to use the one associated with the key cycleSamplingMode StepTimeShotUtil.CycleSamplingMode? Cycle sampling mode Returns Task Task representing the asynchronous mapping operation MapByActualTime(string, CycleSamplingMode) Maps machining steps by actual time from a time shot file. [Obsolete] public void MapByActualTime(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string Relative path to the time shot file. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. MapSeriesByCsvFile(string, CycleSamplingMode) Maps machining steps by actual time from a time shot csv file. [JsAce(\"MapSeriesByCsvFile($1timeShotRelFile)\")] public void MapSeriesByCsvFile(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string Relative path to the time shot file. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. MapSingleByCsvFile(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. It is one (step) - one (embedded-data) mapping. [JsAce(Snippet = \"MapSingleByCsvFile($1\\\"csvFile\\\")\")] public void MapSingleByCsvFile(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory Message(string) Displays a message in the message host. [JsAce(\"Message($1message)\")] public void Message(string message) Parameters message string The message to display OptCallPreferFuncIndexDictionary() Gets the dictionary of preferred function index for NC optimization. [JsAce(\"OptCallPreferFuncIndexDictionary()\")] public Dictionary, double> OptCallPreferFuncIndexDictionary() Returns Dictionary, double> Dictionary mapping functions to their preference indexes. OptimizeToFiles(string) Optimizes NC files and saves results using the specified file template. [JsAce(Snippet = \"OptimizeToFiles(\\\"Output/Opt-[NcName]\\\")\", DocContentHtml = \"Optimize To Files by substitude template keywoard \\\"[NcName]\\\"\")] public void OptimizeToFiles(string relFileTemplate = \"Output/Opt-[NcName]\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Pace() A pausable mark for the playing process. The function enables Pause() to take effect. [JsAce(\"Pace();\")] public void Pace() Remarks Waits for the player to signal the next pace. Pause() Pause Player [JsAce(DocContentHtml = \"Pause Player\")] public void Pause() PlayAct(IAct, IGetSentence, CancellationToken?) Plays an act with pacing control. [JsAce] public void PlayAct(IAct act, IGetSentence sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to play. sourceCommand IGetSentence The source command. cancellationToken CancellationToken? Cancellation token. PlayClTeleport(double, double, double, double, double, double) Plays a CL (cutter location) teleport operation. [JsAce] public void PlayClTeleport(double x, double y, double z, double i, double j, double k) Parameters x double X coordinate. y double Y coordinate. z double Z coordinate. i double I vector component. j double J vector component. k double K vector component. PlayCsvFile(string) Plays an Csv file with the specified relative path. [JsAce(\"PlayCsvFile($1\\\"csvFile\\\");\")] public void PlayCsvFile(string relFilePath) Parameters relFilePath string Relative path to the CSV file PlayNc(string, string) Plays NC code directly from a string, executing each action and pacing between them. [JsAce(Snippet = \"PlayNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Play NC. second parameter is the file name alternative shows in the log.\")] public void PlayNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs PlayNcFile(string) Plays an NC file with the specified relative path. [JsAce(\"PlayNcFile($1\\\"ncFile\\\");\")] public void PlayNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file PlayToolingTeleport(int) Plays a tooling teleport operation. [JsAce] public void PlayToolingTeleport(int toolId) Parameters toolId int The tool ID to teleport. PowerReset() Performs a controller power reset: every IPowerResettable dependency in the active NcDependencyList clears its volatile subset (e.g. Fanuc common volatile macro variables #100-#499). Persistent state is left intact. [JsAce(\"PowerReset();\")] public void PowerReset() Preserve() Preserve one line NC code in optimzation process. [JsAce(\"Preserve()\")] public void Preserve() ProgressMessage(string) Displays a progress message in the message host. [JsAce(\"ProgressMessage($1message)\")] public void ProgressMessage(string message) Parameters message string The progress message to display ReTrainMillingPara(SampleFlag, string, double) Re-trains milling parameters using the specified sample flag. [JsAce(\"ReTrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void ReTrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 0.1) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering ReadCsvByTimeInterpolation(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. It is one (step) - one (embedded-data) mapping. [Obsolete] public void ReadCsvByTimeInterpolation(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory ReadRuntimeGeom(string) Reads runtime geometry from a file. [JsAce(\"ReadRuntimeGeom($1\\\"srcFile\\\")\")] public void ReadRuntimeGeom(string relFile) Parameters relFile string Relative path to the input file RegisterStepVariable(string, string, string, string, Func) Registers a step variable for tracking during execution. [JsAce(Snippet = \"RegisterStepVariable(\\\"$1key\\\",\\\"$2name\\\",\\\"$3unit\\\",\\\"$4formatString\\\",\\\"$5variableFunc\\\")\", DocContentHtml = \"

    Register Step Variable.

    \\\"unit\\\" is nullable

    \\\"formatString\\\" is nullable

    \")] public void RegisterStepVariable(string key, string name, string unit, string formatString, Func variableFunc = null) Parameters key string Unique key to identify the variable name string Human-readable name of the variable unit string Physical unit of the variable (can be null) formatString string Format string for displaying the variable (can be null) variableFunc Func Function to compute the variable value from a milling step (can be null) RegisterWriteSyntaxPieces(string) Registers a text writer so each executed SyntaxPiece is appended to relOutputFile under the machining project base directory for debugging. [JsAce(Snippet = \"RegisterWriteSyntaxPieces($1\\\"Cache/syntax-pieces-output.txt\\\")\")] public void RegisterWriteSyntaxPieces(string relOutputFile) Parameters relOutputFile string Relative path for the output log file. RegisterWriteSyntaxPiecesWithActs(string) Registers a writer that outputs each SyntaxPiece once, followed by its associated IAct entries (one-to-many). [JsAce(Snippet = \"RegisterWriteSyntaxPiecesWithActs($1\\\"Cache/syntax-pieces-acts-output.txt\\\")\")] public void RegisterWriteSyntaxPiecesWithActs(string relOutputFile) Parameters relOutputFile string Output file path relative to BaseDirectory. RemoveFlyPiece() Removes any disconnected or “flying” pieces from the workpiece geometry. [JsAce] public void RemoveFlyPiece() Reset() Reset Player [JsAce(DocContentHtml = \"Reset Player\")] public void Reset() ResetRuntime() Clears internal buffers. [JsAce] public void ResetRuntime() RunNc(string, string) Runs NC code directly from a string. Not for end user. [JsAce(Snippet = \"RunNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Run NC. second parameter is the file name alternative shows in the log.\")] public IEnumerable RunNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs Returns IEnumerable Enumerable sequence of actions to be executed RunNcFile(string) Runs an NC file with the specified relative path. Not for end user. [JsAce(\"RunNcFile($1\\\"ncFile\\\");\")] public IEnumerable RunNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file Returns IEnumerable Enumerable sequence of actions to be executed ScaledFeedPerCycle(double) Gets a new feed per cycle machining motion resolution instance with the specified scale. [JsAce(\"ScaledFeedPerCycle($1scale)\")] public FeedPerCycleMachiningMotionResolution ScaledFeedPerCycle(double scale) Parameters scale double The scale factor for the resolution. Returns FeedPerCycleMachiningMotionResolution A new FeedPerCycleMachiningMotionResolution instance with the specified scale. ScanRuntimeGeomInfDefect() Scans the runtime geometry for defects. After scanning, the scanned defects will render in the workpiece. [JsAce] public bool? ScanRuntimeGeomInfDefect() Returns bool? True if defects are found, false otherwise, or null if the operation cannot be performed. SetAllSnapshotSyntaxEnabled(bool) Sets IsEnabled on every SnapshotSyntax reachable from the active SoftNcRunner's NcSyntaxList (top-level slots and inside BundleSyntax). No-op when SoftNcRunner is not the active runner. [JsAce(DocContentHtml = \"Enable or disable every SnapshotSyntax in the active SoftNcRunner pipeline at once.\")] public void SetAllSnapshotSyntaxEnabled(bool isEnabled) Parameters isEnabled bool SetNcResolutionFeedPerCycle() Sets NC resolution to feed per cycle mode. public void SetNcResolutionFeedPerCycle() SetNcResolutionFeedPerTooth() Sets NC resolution to feed per tooth mode. public void SetNcResolutionFeedPerTooth() SetNcResolutionFixed(double, double) Sets NC resolution to fixed mode with specified resolution values. public void SetNcResolutionFixed(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters. rotaryResolution_deg double Rotary resolution in degrees. SetStickMachiningToolObservationHeight_mm(int, double) Sets the observation height in millimeters for the specified stick machining tool. [JsAce(\"SetStickMachiningToolObservationHeight_mm($1toolId,$2height_mm)\")] public void SetStickMachiningToolObservationHeight_mm(int toolId, double height) Parameters toolId int The ID of the tool height double The observation height in millimeters to set SetUniformContourTrayShiftAngle_deg(int, double) Sets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"SetUniformContourTrayShiftAngle_deg($1toolId,$2angle_deg)\")] public void SetUniformContourTrayShiftAngle_deg(int toolId, double angle_deg) Parameters toolId int The ID of the tool angle_deg double The shift angle in degrees to set ShiftDistance_mm(double) Creates a distance shift object representing the specified distance in millimeters. public DistanceShift ShiftDistance_mm(double distanceShift_mm) Parameters distanceShift_mm double Distance shift in millimeters Returns DistanceShift Distance shift object ShiftTime_s(double) Creates a time shift object representing the specified time in seconds. public TimeShift ShiftTime_s(double seconds) Parameters seconds double Time in seconds Returns TimeShift Time shift object TrainMillingPara(SampleFlag, string, double, ICuttingPara) Trains milling parameters using the specified sample flag. [JsAce(\"TrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void TrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 0.1, ICuttingPara paraTemplate = null) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering paraTemplate ICuttingPara Optional parameter template for cutting operations. WarningMessage(string) Displays a warning message in the message host. [JsAce(\"WarningMessage($1message)\")] public void WarningMessage(string message) Parameters message string The warning message to display WriteRuntimeGeom(string) Writes the current runtime geometry to a file. [JsAce(\"WriteRuntimeGeom($1\\\"dstFile\\\")\")] public void WriteRuntimeGeom(string relFile) Parameters relFile string Relative path to the output file WriteRuntimeGeomToStl(string, double) Writes the current runtime geometry to an STL file. [JsAce(\"WriteRuntimeGeomToStl($1\\\"dstFile\\\",$2resolution_mm)\")] public void WriteRuntimeGeomToStl(string relFile, double resolution_mm = 0) Parameters relFile string Relative path to the output STL file resolution_mm double Resolution in millimeters (0 for default) WriteShotFiles(double, string) Writes time-series data to shot files with the specified resolution period (alternative parameter order). public void WriteShotFiles(double resolutionPeroid_ms, string relFileTemplate) Parameters resolutionPeroid_ms double Resolution period in milliseconds relFileTemplate string Template for output file path, can include [NcName] placeholder WriteShotFiles(string, double) Writes time-series data to shot files with the specified resolution period. [JsAce(Snippet = \"WriteShotFiles(\\\"Output/[NcName].shot.csv\\\",resolutionPeroid_ms)\", DocContentHtml = \"Write time series data by resolutionPeroid_ms\")] public void WriteShotFiles(string relFileTemplate = \"Output/[NcName].shot.csv\", double resolutionPeroid_ms = 1) Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder resolutionPeroid_ms double Resolution period in milliseconds WriteStepFiles(string) Writes step-series data to files with the specified file template. [JsAce(Snippet = \"WriteStepFiles(\\\"Output/[NcName].step.csv\\\")\", DocContentHtml = \"Write step series data.\")] public void WriteStepFiles(string relFileTemplate = \"Output/[NcName].step.csv\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Events MachiningStepBuilt Session-scoped event triggered when a machining step is built. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). For app-lifetime event, use MachiningStepBuilt instead. [Obsolete(\"Use SessionStepBuilt instead.\")] public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate MachiningStepSelected Session-scoped event triggered when a machining step is selected. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [Obsolete(\"Use SessionStepSelected instead.\")] public event Action MachiningStepSelected Event Type Action SessionSourcedActEntry Session-scoped event triggered for each SourcedActEntry produced during NC/CSV execution. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [JsAce(Snippet = \"SessionSourcedActEntry+=($1entry)=>{$2Command};\", DocContentHtml = \"Session-scoped event triggered for each SourcedActEntry. entry.SentenceSource is the source sentence; entry.Act is the associated act (may be null).\")] public event Action SessionSourcedActEntry Event Type Action SessionStepBuilt Session-scoped event triggered when a machining step is built. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). For app-lifetime event, use MachiningStepBuilt instead. [JsAce(Snippet = \"SessionStepBuilt+=($1preStep,$2curStep)=>{$3Command};\", DocContentHtml = \"Session-scoped step built event. preStep is the Previous Milling Step; curStep is the Current Milling Step. preStep is null if no previous step existed.\")] public event MachiningActRunner.MachiningStepBuiltDelegate SessionStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate SessionStepSelected Session-scoped event triggered when a machining step is selected. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [JsAce(Snippet = \"SessionStepSelected+=($1millingStep)=>{$2Command};\")] public event Action SessionStepSelected Event Type Action SessionSyntaxPieceRan Session-scoped event triggered when a syntax piece has been executed. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [JsAce(Snippet = \"SessionSyntaxPieceRan+=($1syntaxPiece)=>{$2Command};\", DocContentHtml = \"Session-scoped event triggered after each SyntaxPiece is executed. syntaxPiece may be null if the source command is not a SyntaxPiece.\")] public event Action SessionSyntaxPieceRan Event Type Action SyntaxPieceRan Session-scoped event triggered when a syntax piece has been executed. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [Obsolete(\"Use SessionSyntaxPieceRan instead.\")] public event Action SyntaxPieceRan Event Type Action" + "summary": "Class RuntimeApi Namespace Hi.MachiningProcs Assembly HiNc.dll Runtime API for machining operations. public class RuntimeApi : ICsScriptApi Inheritance object RuntimeApi Implements ICsScriptApi 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DefaultParaTemplateDimension Gets or sets the parameter template dimension (2D or 3D). [JsAce] public int DefaultParaTemplateDimension { get; set; } Property Value int DiffVisualRadius_mm Gets or sets the visual radius in millimeters for difference visualization. Controls the radius used for highlighting differences between workpiece states. [JsAce] public double DiffVisualRadius_mm { get; set; } Property Value double DispCacheMb Gets or sets the display cache size in megabytes. [Obsolete] public long DispCacheMb { get; set; } Property Value long DispCache_Mb Gets or sets the display cache size in megabytes. [JsAce] public long DispCache_Mb { get; set; } Property Value long EmbeddedLogMode Gets or sets the embedded log mode for NC optimization. [JsAce] public static NcOptimizationEmbeddedLogMode EmbeddedLogMode { get; set; } Property Value NcOptimizationEmbeddedLogMode EnableCollisionDetection Gets or sets whether collision detection is enabled. [JsAce(DocContentHtml = \"Enable Collision Detection.\")] public bool EnableCollisionDetection { get; set; } Property Value bool EnableIndividualStepAdjustmentLog Gets or sets whether to enable individual step adjustment logging. [JsAce] public static bool EnableIndividualStepAdjustmentLog { get; set; } Property Value bool EnableMapOnSelectionEnd Gets or sets whether to automatically map selections when they end. [JsAce] public bool EnableMapOnSelectionEnd { get; set; } Property Value bool EnableMotionDependentMachiningResolution Gets or sets whether motion-dependent machining resolution is enabled. [JsAce] public bool EnableMotionDependentMachiningResolution { get; set; } Property Value bool EnableMzLeverWeightingOnTraining Gets or sets whether Mz lever weighting is enabled on training. [Obsolete] public bool EnableMzLeverWeightingOnTraining { get; set; } Property Value bool EnablePauseOnCollision Gets or sets whether to pause execution when a collision is detected. This property only has an effect if collision detection is enabled. [Obsolete] public bool EnablePauseOnCollision { get; set; } Property Value bool EnablePauseOnFailure Gets or sets whether to pause on failure during execution. [JsAce(DocContentHtml = \"Enable Pause On Failure.\")] public bool EnablePauseOnFailure { get; set; } Property Value bool EnablePhysics Gets or sets whether milling force evaluation is enabled. [JsAce(DocContentHtml = \"Enable milling force evaluation.\")] public bool EnablePhysics { get; set; } Property Value bool EnableSampleNormalization [Obsolete] public bool EnableSampleNormalization { get; set; } Property Value bool Remarks The input normalization deminish the quantity effect. The R-value decrease from 99% to 70% in moment training case from NKUST\\nkust2024-milling-para-training-plan\\workingx.hincproj Don't apply this option. EnableSoftNcRunner Workaround flag to use SoftNcRunner instead of HardNcRunner. Will be removed when HardNcRunner is fully replaced. [JsAce(DocContentHtml = \"Enable SoftNcRunner instead of legacy HardNcRunner.\")] public bool EnableSoftNcRunner { get; set; } Property Value bool EnableWearEffect Gets or sets whether tool wear effects are enabled in simulation. [JsAce] public bool EnableWearEffect { get; set; } Property Value bool FeedPerCycle Gets a new feed per cycle machining motion resolution instance. [JsAce] public FeedPerCycleMachiningMotionResolution FeedPerCycle { get; } Property Value FeedPerCycleMachiningMotionResolution FeedPerTooth Gets a new feed per tooth machining motion resolution instance. [JsAce] public FeedPerToothMachiningMotionResolution FeedPerTooth { get; } Property Value FeedPerToothMachiningMotionResolution Fixture Gets or sets the fixture. [JsAce] public Fixture Fixture { get; set; } Property Value Fixture Global Global variables. [JsAce(\"Global[$1key]\")] public Dictionary Global { get; } Property Value Dictionary InitSpindleTemperature_C Gets or sets the initial spindle temperature in degrees Celsius. [JsAce(DocContentHtml = \"Spindle Temperature on initialization.\")] public double InitSpindleTemperature_C { get; set; } Property Value double JsAceCompletionProfileJsonArray Internal used. public static JsonArray JsAceCompletionProfileJsonArray { get; } Property Value JsonArray MachiningMotionResolution Gets or sets the machining motion resolution. [JsAce] public IMachiningMotionResolution MachiningMotionResolution { get; set; } Property Value IMachiningMotionResolution MachiningResolution Gets or sets the machining resolution in millimeters. [JsAce] [Obsolete(\"Use MachiningResolution_mm instead.\")] public double MachiningResolution { get; set; } Property Value double MachiningResolution_mm Gets or sets the machining resolution in millimeters. [JsAce] public double MachiningResolution_mm { get; set; } Property Value double MachiningSession public MachiningSession MachiningSession { get; } Property Value MachiningSession MapTask Task tracking the status of mapping operations. public Task MapTask { get; set; } Property Value Task MillingCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce] public static int MillingCycleDivisionNum { get; set; } Property Value int MillingForceCycleDivisionNum Gets or sets the number of divisions per cycle for milling force calculation. This property should be set before milling force evaluation if TrainMillingPara(SampleFlag, string, double, ICuttingPara) is intended to be used. [JsAce(DocContentHtml = \"Obsoleted. Use MillingCycleDivisionNum instead.\")] [Obsolete(\"Use MillingCycleDivisionNum instead.\")] public static int MillingForceCycleDivisionNum { get; set; } Property Value int NcOptOption Gets or sets the NC optimization options. [JsAce] public NcOptOption NcOptOption { get; set; } Property Value NcOptOption OptEnableDepthCompensation Enables or disables depth compensation during optimization. [JsAce] public bool OptEnableDepthCompensation { get; set; } Property Value bool OptEnableFeedrate Gets or sets whether to enable feed rate optimization in NC optimization. [JsAce] public bool OptEnableFeedrate { get; set; } Property Value bool OptEnableForwardCompensation Enables or disables forward compensation during optimization. [JsAce] public bool OptEnableForwardCompensation { get; set; } Property Value bool OptEnableInterpolation Enables or disables reinterpolation for optimization. [JsAce] public bool OptEnableInterpolation { get; set; } Property Value bool OptEnableSideCompensation Enables or disables side compensation during optimization. [JsAce] public bool OptEnableSideCompensation { get; set; } Property Value bool OptExtendedPostDistance_mm Gets or sets the extended post-distance in millimeters for NC optimization. This is the distance after the current segment that will be considered for optimization. [JsAce] public double OptExtendedPostDistance_mm { get; set; } Property Value double OptExtendedPreDistance_mm Gets or sets the extended pre-distance in millimeters for NC optimization. This is the distance before the current segment that will be considered for optimization. [JsAce] public double OptExtendedPreDistance_mm { get; set; } Property Value double OptFeedrateAssignmentRatio Gets or sets the feedrate assignment ratio for optimization. If the feedrate change exceeds this ratio, the feedrate in the NC line will be updated. [JsAce] public double OptFeedrateAssignmentRatio { get; set; } Property Value double OptMaxAcceleration_mmds2 Maximum acceleration in mm/s² during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxAcceleration_mmds2 { get; set; } Property Value double OptMaxFeedPerTooth_mm Gets or sets the maximum feed per tooth in millimeters for optimization. [JsAce] public double OptMaxFeedPerTooth_mm { get; set; } Property Value double OptMaxFeedrate_mmdmin Maximum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMaxFeedrate_mmdmin { get; set; } Property Value double OptMaxJerk_mmds3 Maximum jerk in mm/s³ during optimization. Only takes effect on reinterpolated section. [JsAce(DocContentHtml = \"Only take effect on reinterpolated section.\")] public double OptMaxJerk_mmds3 { get; set; } Property Value double OptMinFeedPerTooth_mm Gets or sets the minimum feed per tooth in millimeters for optimization. [JsAce] public double OptMinFeedPerTooth_mm { get; set; } Property Value double OptMinFeedrate_mmdmin Minimum feed rate in mm/min for cutting movements during optimization. [JsAce] public double OptMinFeedrate_mmdmin { get; set; } Property Value double OptPreferedForce_N Preferred force in N for optimization. [JsAce] public double OptPreferedForce_N { get; set; } Property Value double OptRapidFeed_mmdmin Rapid feed rate in mm/min for non-cutting movements during optimization. [JsAce] public double OptRapidFeed_mmdmin { get; set; } Property Value double OptSpindlePowerSafetyFactor Safety factor for MAX spindle power during optimization. [JsAce] public double OptSpindlePowerSafetyFactor { get; set; } Property Value double OptSpindlePowerUtilizationFactor Utilization factor for MAX spindle power during optimization. It is the reciprocal of the spindle power safety factor. [JsAce] public double OptSpindlePowerUtilizationFactor { get; set; } Property Value double OptSpindleTorqueSafetyFactor Gets or sets the MAX spindle torque safety factor for NC optimization. [JsAce] public double OptSpindleTorqueSafetyFactor { get; set; } Property Value double OptSpindleTorqueUtilizationFactor Utilization factor for MAX spindle torque during optimization. It is the reciprocal of the spindle torque safety factor. [JsAce] public double OptSpindleTorqueUtilizationFactor { get; set; } Property Value double OptThermalYieldSafetyFactor Safety factor for spindle torque during optimization. [JsAce] public double OptThermalYieldSafetyFactor { get; set; } Property Value double OptThermalYieldUtilizationFactor Utilization factor for thermal yield during optimization. It is the reciprocal of the thermal yield safety factor. [JsAce] public double OptThermalYieldUtilizationFactor { get; set; } Property Value double OptYieldingSafetyFactor Safety factor for yielding during optimization. [JsAce] public double OptYieldingSafetyFactor { get; set; } Property Value double OptYieldingUtilizationFactor Utilization factor for yielding during optimization. It is the reciprocal of the yielding safety factor. [JsAce] public double OptYieldingUtilizationFactor { get; set; } Property Value double ScriptOptions ScriptOptions. public ScriptOptions ScriptOptions { get; set; } Property Value ScriptOptions SessionMessageHost Obsolete alias for SessionProgress (session-scoped progress and messages). [JsAce] [Obsolete(\"Use SessionProgress instead.\")] public SessionProgress SessionMessageHost { get; } Property Value SessionProgress SessionProgress Gets the session message host for displaying messages. [JsAce] public SessionProgress SessionProgress { get; } Property Value SessionProgress StepCount Gets the total number of milling steps. [JsAce] public int StepCount { get; } Property Value int Workpiece Gets or sets the workpiece. [JsAce] public Workpiece Workpiece { get; set; } Property Value Workpiece Methods AddTimeDataByFile(string, string, double, double) Adds time-based data from a file to the time mapping dictionary with specified time bounds in seconds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, double beginTime, double endTime) Parameters key string Key to identify the data relFile string Relative path to the data file beginTime double Beginning time in seconds endTime double Ending time in seconds Returns bool True if the data was successfully added, false otherwise AddTimeDataByFile(string, string, string, string) Adds time-based data from a file to the time mapping dictionary with specified time bounds. [JsAce(\"AddTimeDataByFile($1key, $2relFile, $3beginTime, $4endTime)\")] public bool AddTimeDataByFile(string key, string relFile, string beginTimeText, string endTimeText) Parameters key string Key to identify the data relFile string Relative path to the data file beginTimeText string Beginning time as text (seconds or TimeSpan format) endTimeText string Ending time as text (seconds or TimeSpan format) Returns bool True if the data was successfully added, false otherwise AdjustedFeedPerCycle(double, double) Gets a new feed per cycle machining motion resolution instance with adjusted scale and minimum linear resolution. [JsAce(\"AdjustedFeedPerCycle($1scale,$2minLinearResolution_mm)\")] public FeedPerCycleMachiningMotionResolution AdjustedFeedPerCycle(double scale, double minLinearResolution_mm = 0) Parameters scale double The scale factor for the resolution. minLinearResolution_mm double The minimum linear resolution in millimeters. Default is 0. Returns FeedPerCycleMachiningMotionResolution A new FeedPerCycleMachiningMotionResolution instance with the specified parameters. AppendMessagesToFile(string, params string[]) Appends messages to a file, optionally filtered by tags. [JsAce(\"AppendMessagesToFile(\\\"dstRelFile\\\",flags)\")] public void AppendMessagesToFile(string dstRelFile, params string[] flags) Parameters dstRelFile string Destination relative file path flags string[] Optional flags to filter messages by tags BeginPreserve() Begin Preserve section in optimzation process. [JsAce(\"BeginPreserve()\")] public void BeginPreserve() BeginSelection(string, AnchorMode, IStepShift) Begin mark on current line. milling step() has not triggered yet. public void BeginSelection(string key, AnchorMode anchorMode = AnchorMode.LineBegin, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the beginning of selection shift IStepShift Step shift to apply BeginSession() Begins a new machining session. Not for end user. public void BeginSession() ClearDefectDisplayee() Clears the defect displayee from the workpiece. [JsAce] public void ClearDefectDisplayee() ClearTimeMappingData() Clears all time mapping data. [JsAce] public void ClearTimeMappingData() Diff(double) Performs a difference analysis on the workpiece geometry to detect variations. [JsAce(\"Diff($1detectionRadius_mm)\")] public void Diff(double detectionRadius_mm) Parameters detectionRadius_mm double Radius for detecting differences EndPreserve() End Preserve section in optimzation process. [JsAce(\"EndPreserve()\")] public void EndPreserve() EndSelection(string, AnchorMode, IStepShift) End mark on current line for selection. public void EndSelection(string key, AnchorMode anchorMode = AnchorMode.LineEnd, IStepShift shift = null) Parameters key string Identifier key for the selection anchorMode AnchorMode Mode for anchoring the end of selection shift IStepShift Step shift to apply EndSession() Ends the current machining session. Not for end user. public void EndSession() ErrorMessage(string) Displays an error message in the message host. [JsAce(\"ErrorMessage($1message)\")] public void ErrorMessage(string message) Parameters message string The error message to display FixedPace(double, double) Creates a fixed machining motion resolution with specified parameters. [JsAce(\"FixedPace($1linearResolution_mm, $2rotaryResolution_deg)\")] public FixedMachiningMotionResolution FixedPace(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters rotaryResolution_deg double Rotary resolution in degrees Returns FixedMachiningMotionResolution A new fixed machining motion resolution instance GetMillingStep(int) Retrieves a milling step at the specified index. [JsAce(Snippet = \"GetMillingStep($1\\\"stepIndex\\\")\")] public MachiningStep GetMillingStep(int stepIndex) Parameters stepIndex int Index of the milling step to retrieve Returns MachiningStep The milling step at the specified index GetStickMachiningToolObservationHeight_mm(int) Gets the observation height in millimeters for the specified stick machining tool. [JsAce(\"GetStickMachiningToolObservationHeight_mm($1toolId)\")] public double GetStickMachiningToolObservationHeight_mm(int toolId) Parameters toolId int The ID of the tool Returns double The observation height in millimeters GetUniformContourTrayShiftAngle_deg(int) Gets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"GetUniformContourTrayShiftAngle_deg($1toolId)\")] public double GetUniformContourTrayShiftAngle_deg(int toolId) Parameters toolId int The ID of the tool Returns double The shift angle in degrees LineSelection(string, AnchorMode, IStepShift, AnchorMode, IStepShift) Create a line selection from begin to end mark. public void LineSelection(string key, AnchorMode beginAnchorMode = AnchorMode.LineBegin, IStepShift beginShift = null, AnchorMode endAnchorMode = AnchorMode.LineEnd, IStepShift endShift = null) Parameters key string Identifier key for the selection beginAnchorMode AnchorMode Mode for anchoring the beginning of selection beginShift IStepShift Step shift to apply at beginning endAnchorMode AnchorMode Mode for anchoring the end of selection endShift IStepShift Step shift to apply at end LoadCuttingParaByFile(string) Loads cutting parameters from a file. [JsAce(\"LoadCuttingParaByFile($1\\\"relFile\\\")\")] public void LoadCuttingParaByFile(string relFile) Parameters relFile string File path relative to BaseDirectory. Map(string, FileTimeSection, CycleSamplingMode?) Maps selection data to time section. public Task Map(string key, FileTimeSection fileTimeSection = null, StepTimeShotUtil.CycleSamplingMode? cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters key string Identifier key for the selection fileTimeSection FileTimeSection File time section, or null to use the one associated with the key cycleSamplingMode StepTimeShotUtil.CycleSamplingMode? Cycle sampling mode Returns Task Task representing the asynchronous mapping operation MapByActualTime(string, CycleSamplingMode) Maps machining steps by actual time from a time shot file. [Obsolete] public void MapByActualTime(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string Relative path to the time shot file. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. MapSeriesByCsvFile(string, CycleSamplingMode) Maps machining steps by actual time from a time shot csv file. [JsAce(\"MapSeriesByCsvFile($1timeShotRelFile)\")] public void MapSeriesByCsvFile(string timeShotRelFile, StepTimeShotUtil.CycleSamplingMode cycleSamplingMode = CycleSamplingMode.SpindleCycle) Parameters timeShotRelFile string Relative path to the time shot file. cycleSamplingMode StepTimeShotUtil.CycleSamplingMode The cycle sampling mode. MapSingleByCsvFile(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. It is one (step) - one (embedded-data) mapping. [JsAce(Snippet = \"MapSingleByCsvFile($1\\\"csvFile\\\")\")] public void MapSingleByCsvFile(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory Message(string) Displays a message in the message host. [JsAce(\"Message($1message)\")] public void Message(string message) Parameters message string The message to display OptCallPreferFuncIndexDictionary() Gets the dictionary of preferred function index for NC optimization. [JsAce(\"OptCallPreferFuncIndexDictionary()\")] public Dictionary, double> OptCallPreferFuncIndexDictionary() Returns Dictionary, double> Dictionary mapping functions to their preference indexes. OptimizeToFiles(string) Optimizes NC files and saves results using the specified file template. [JsAce(Snippet = \"OptimizeToFiles(\\\"Output/Opt-[NcName]\\\")\", DocContentHtml = \"Optimize To Files by substitude template keywoard \\\"[NcName]\\\"\")] public void OptimizeToFiles(string relFileTemplate = \"Output/Opt-[NcName]\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Pace() A pausable mark for the playing process. The function enables Pause() to take effect. [JsAce(\"Pace();\")] public void Pace() Remarks Waits for the player to signal the next pace. Pause() Pause Player [JsAce(DocContentHtml = \"Pause Player\")] public void Pause() PlayAct(IAct, IGetSentence, CancellationToken?) Plays an act with pacing control. [JsAce] public void PlayAct(IAct act, IGetSentence sourceCommand = null, CancellationToken? cancellationToken = null) Parameters act IAct The act to play. sourceCommand IGetSentence The source command. cancellationToken CancellationToken? Cancellation token. PlayClTeleport(double, double, double, double, double, double) Plays a CL (cutter location) teleport operation. [JsAce] public void PlayClTeleport(double x, double y, double z, double i, double j, double k) Parameters x double X coordinate. y double Y coordinate. z double Z coordinate. i double I vector component. j double J vector component. k double K vector component. PlayCsvFile(string) Plays an Csv file with the specified relative path. [JsAce(\"PlayCsvFile($1\\\"csvFile\\\");\")] public void PlayCsvFile(string relFilePath) Parameters relFilePath string Relative path to the CSV file PlayNc(string, string) Plays NC code directly from a string, executing each action and pacing between them. [JsAce(Snippet = \"PlayNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Play NC. second parameter is the file name alternative shows in the log.\")] public void PlayNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs PlayNcFile(string) Plays an NC file with the specified relative path. [JsAce(\"PlayNcFile($1\\\"ncFile\\\");\")] public void PlayNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file PlayToolingTeleport(int) Plays a tooling teleport operation. [JsAce] public void PlayToolingTeleport(int toolId) Parameters toolId int The tool ID to teleport. PowerReset() Performs a controller power reset: every IPowerResettable dependency in the active NcDependencyList clears its volatile subset (e.g. Fanuc common volatile macro variables #100-#499). Persistent state is left intact. [JsAce(\"PowerReset();\")] public void PowerReset() Preserve() Preserve one line NC code in optimzation process. [JsAce(\"Preserve()\")] public void Preserve() ProgressMessage(string) Displays a progress message in the message host. [JsAce(\"ProgressMessage($1message)\")] public void ProgressMessage(string message) Parameters message string The progress message to display ReTrainMillingPara(SampleFlag, string, double) Re-trains milling parameters using the specified sample flag. [JsAce(\"ReTrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void ReTrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 0.1) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering ReadCsvByTimeInterpolation(string) Reads a CSV file and performs time-based interpolation to map data to milling steps. It is one (step) - one (embedded-data) mapping. [Obsolete] public void ReadCsvByTimeInterpolation(string csvFile) Parameters csvFile string Path to the CSV file relative to the base directory ReadRuntimeGeom(string) Reads runtime geometry from a file. [JsAce(\"ReadRuntimeGeom($1\\\"srcFile\\\")\")] public void ReadRuntimeGeom(string relFile) Parameters relFile string Relative path to the input file RegisterStepVariable(string, string, string, string, Func) Registers a step variable for tracking during execution. [JsAce(Snippet = \"RegisterStepVariable(\\\"$1key\\\",\\\"$2name\\\",\\\"$3unit\\\",\\\"$4formatString\\\",\\\"$5variableFunc\\\")\", DocContentHtml = \"

    Register Step Variable.

    \\\"unit\\\" is nullable

    \\\"formatString\\\" is nullable

    \")] public void RegisterStepVariable(string key, string name, string unit, string formatString, Func variableFunc = null) Parameters key string Unique key to identify the variable name string Human-readable name of the variable unit string Physical unit of the variable (can be null) formatString string Format string for displaying the variable (can be null) variableFunc Func Function to compute the variable value from a milling step (can be null) RegisterWriteSyntaxPieces(string) Registers a text writer so each executed SyntaxPiece is appended to relOutputFile under the machining project base directory for debugging. [JsAce(Snippet = \"RegisterWriteSyntaxPieces($1\\\"Cache/syntax-pieces-output.txt\\\")\")] public void RegisterWriteSyntaxPieces(string relOutputFile) Parameters relOutputFile string Relative path for the output log file. RegisterWriteSyntaxPiecesWithActs(string) Registers a writer that outputs each SyntaxPiece once, followed by its associated IAct entries (one-to-many). [JsAce(Snippet = \"RegisterWriteSyntaxPiecesWithActs($1\\\"Cache/syntax-pieces-acts-output.txt\\\")\")] public void RegisterWriteSyntaxPiecesWithActs(string relOutputFile) Parameters relOutputFile string Output file path relative to BaseDirectory. RemoveFlyPiece() Removes any disconnected or “flying” pieces from the workpiece geometry. [JsAce] public void RemoveFlyPiece() Reset() Reset Player [JsAce(DocContentHtml = \"Reset Player\")] public void Reset() ResetRuntime() Clears internal buffers. [JsAce] public void ResetRuntime() RunNc(string, string) Runs NC code directly from a string. Not for end user. [JsAce(Snippet = \"RunNc($1\\\"ncCommand\\\",$2\\\"\\\"(Direct Command)\\\"\\\");\", DocContentHtml = \"Run NC. second parameter is the file name alternative shows in the log.\")] public IEnumerable RunNc(string ncText, string fileNameAlternative = \"--\") Parameters ncText string NC code as a string fileNameAlternative string Alternative name to display in logs Returns IEnumerable Enumerable sequence of actions to be executed RunNcFile(string) Runs an NC file with the specified relative path. Not for end user. [JsAce(\"RunNcFile($1\\\"ncFile\\\");\")] public IEnumerable RunNcFile(string relNcFilePath) Parameters relNcFilePath string Relative path to the NC file Returns IEnumerable Enumerable sequence of actions to be executed ScaledFeedPerCycle(double) Gets a new feed per cycle machining motion resolution instance with the specified scale. [JsAce(\"ScaledFeedPerCycle($1scale)\")] public FeedPerCycleMachiningMotionResolution ScaledFeedPerCycle(double scale) Parameters scale double The scale factor for the resolution. Returns FeedPerCycleMachiningMotionResolution A new FeedPerCycleMachiningMotionResolution instance with the specified scale. ScanRuntimeGeomInfDefect() Scans the runtime geometry for defects. After scanning, the scanned defects will render in the workpiece. [JsAce] public bool? ScanRuntimeGeomInfDefect() Returns bool? True if defects are found, false otherwise, or null if the operation cannot be performed. SetAllSnapshotSyntaxEnabled(bool) Sets IsEnabled on every SnapshotSyntax reachable from the active SoftNcRunner's NcSyntaxList (top-level slots and inside BundleSyntax). No-op when SoftNcRunner is not the active runner. [JsAce(DocContentHtml = \"Enable or disable every SnapshotSyntax in the active SoftNcRunner pipeline at once.\")] public void SetAllSnapshotSyntaxEnabled(bool isEnabled) Parameters isEnabled bool SetNcResolutionFeedPerCycle() Sets NC resolution to feed per cycle mode. public void SetNcResolutionFeedPerCycle() SetNcResolutionFeedPerTooth() Sets NC resolution to feed per tooth mode. public void SetNcResolutionFeedPerTooth() SetNcResolutionFixed(double, double) Sets NC resolution to fixed mode with specified resolution values. public void SetNcResolutionFixed(double linearResolution_mm, double rotaryResolution_deg) Parameters linearResolution_mm double Linear resolution in millimeters. rotaryResolution_deg double Rotary resolution in degrees. SetStickMachiningToolObservationHeight_mm(int, double) Sets the observation height in millimeters for the specified stick machining tool. [JsAce(\"SetStickMachiningToolObservationHeight_mm($1toolId,$2height_mm)\")] public void SetStickMachiningToolObservationHeight_mm(int toolId, double height) Parameters toolId int The ID of the tool height double The observation height in millimeters to set SetUniformContourTrayShiftAngle_deg(int, double) Sets the shift angle in degrees for the uniform contour tray of the specified tool. [JsAce(\"SetUniformContourTrayShiftAngle_deg($1toolId,$2angle_deg)\")] public void SetUniformContourTrayShiftAngle_deg(int toolId, double angle_deg) Parameters toolId int The ID of the tool angle_deg double The shift angle in degrees to set ShiftDistance_mm(double) Creates a distance shift object representing the specified distance in millimeters. public DistanceShift ShiftDistance_mm(double distanceShift_mm) Parameters distanceShift_mm double Distance shift in millimeters Returns DistanceShift Distance shift object ShiftTime_s(double) Creates a time shift object representing the specified time in seconds. public TimeShift ShiftTime_s(double seconds) Parameters seconds double Time in seconds Returns TimeShift Time shift object TrainMillingPara(SampleFlag, string, double, ICuttingPara) Trains milling parameters using the specified sample flag. [JsAce(\"TrainMillingPara(Fx|Fy|Fz, $1dstFile)\")] public void TrainMillingPara(SampleFlag sampleFlag, string dstRelFile, double outlierRatio = 0.1, ICuttingPara paraTemplate = null) Parameters sampleFlag SampleFlag Sample flag indicating which components to train dstRelFile string Destination relative file path outlierRatio double Outlier ratio for data filtering paraTemplate ICuttingPara Optional parameter template for cutting operations. WarningMessage(string) Displays a warning message in the message host. [JsAce(\"WarningMessage($1message)\")] public void WarningMessage(string message) Parameters message string The warning message to display WriteRuntimeGeom(string) Writes the current runtime geometry to a file. [JsAce(\"WriteRuntimeGeom($1\\\"dstFile\\\")\")] public void WriteRuntimeGeom(string relFile) Parameters relFile string Relative path to the output file WriteRuntimeGeomToObj(string, double) Writes the current runtime geometry to a Wavefront OBJ file with per-vertex RGB. [JsAce(\"WriteRuntimeGeomToObj($1\\\"dstFile\\\",$2resolution_mm)\")] public void WriteRuntimeGeomToObj(string relFile, double resolution_mm = 0) Parameters relFile string Relative path to the output OBJ file resolution_mm double Resolution in millimeters (0 for default) WriteRuntimeGeomToPly(string, double) Writes the current runtime geometry to a binary PLY file with per-vertex RGB. [JsAce(\"WriteRuntimeGeomToPly($1\\\"dstFile\\\",$2resolution_mm)\")] public void WriteRuntimeGeomToPly(string relFile, double resolution_mm = 0) Parameters relFile string Relative path to the output PLY file resolution_mm double Resolution in millimeters (0 for default) WriteRuntimeGeomToStl(string, double) Writes the current runtime geometry to an STL file. [JsAce(\"WriteRuntimeGeomToStl($1\\\"dstFile\\\",$2resolution_mm)\")] public void WriteRuntimeGeomToStl(string relFile, double resolution_mm = 0) Parameters relFile string Relative path to the output STL file resolution_mm double Resolution in millimeters (0 for default) WriteShotFiles(double, string) Writes time-series data to shot files with the specified resolution period (alternative parameter order). public void WriteShotFiles(double resolutionPeroid_ms, string relFileTemplate) Parameters resolutionPeroid_ms double Resolution period in milliseconds relFileTemplate string Template for output file path, can include [NcName] placeholder WriteShotFiles(string, double) Writes time-series data to shot files with the specified resolution period. [JsAce(Snippet = \"WriteShotFiles(\\\"Output/[NcName].shot.csv\\\",resolutionPeroid_ms)\", DocContentHtml = \"Write time series data by resolutionPeroid_ms\")] public void WriteShotFiles(string relFileTemplate = \"Output/[NcName].shot.csv\", double resolutionPeroid_ms = 1) Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder resolutionPeroid_ms double Resolution period in milliseconds WriteStepFiles(string) Writes step-series data to files with the specified file template. [JsAce(Snippet = \"WriteStepFiles(\\\"Output/[NcName].step.csv\\\")\", DocContentHtml = \"Write step series data.\")] public void WriteStepFiles(string relFileTemplate = \"Output/[NcName].step.csv\") Parameters relFileTemplate string Template for output file path, can include [NcName] placeholder Events MachiningStepBuilt Session-scoped event triggered when a machining step is built. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). For app-lifetime event, use MachiningStepBuilt instead. [Obsolete(\"Use SessionStepBuilt instead.\")] public event MachiningActRunner.MachiningStepBuiltDelegate MachiningStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate MachiningStepSelected Session-scoped event triggered when a machining step is selected. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [Obsolete(\"Use SessionStepSelected instead.\")] public event Action MachiningStepSelected Event Type Action SessionSourcedActEntry Session-scoped event triggered for each SourcedActEntry produced during NC/CSV execution. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [JsAce(Snippet = \"SessionSourcedActEntry+=($1entry)=>{$2Command};\", DocContentHtml = \"Session-scoped event triggered for each SourcedActEntry. entry.SentenceSource is the source sentence; entry.Act is the associated act (may be null).\")] public event Action SessionSourcedActEntry Event Type Action SessionStepBuilt Session-scoped event triggered when a machining step is built. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). For app-lifetime event, use MachiningStepBuilt instead. [JsAce(Snippet = \"SessionStepBuilt+=($1preStep,$2curStep)=>{$3Command};\", DocContentHtml = \"Session-scoped step built event. preStep is the Previous Milling Step; curStep is the Current Milling Step. preStep is null if no previous step existed.\")] public event MachiningActRunner.MachiningStepBuiltDelegate SessionStepBuilt Event Type MachiningActRunner.MachiningStepBuiltDelegate SessionStepSelected Session-scoped event triggered when a machining step is selected. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [JsAce(Snippet = \"SessionStepSelected+=($1millingStep)=>{$2Command};\")] public event Action SessionStepSelected Event Type Action SessionSyntaxPieceRan Session-scoped event triggered when a syntax piece has been executed. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [JsAce(Snippet = \"SessionSyntaxPieceRan+=($1syntaxPiece)=>{$2Command};\", DocContentHtml = \"Session-scoped event triggered after each SyntaxPiece is executed. syntaxPiece may be null if the source command is not a SyntaxPiece.\")] public event Action SessionSyntaxPieceRan Event Type Action SyntaxPieceRan Session-scoped event triggered when a syntax piece has been executed. Lifetime is bound to MachiningSession: created by BeginSession(), released by EndSession(). [Obsolete(\"Use SessionSyntaxPieceRan instead.\")] public event Action SyntaxPieceRan Event Type Action" }, "api/Hi.MachiningProcs.RuntimeController.html": { "href": "api/Hi.MachiningProcs.RuntimeController.html", @@ -2252,7 +2267,7 @@ "api/Hi.Mech.GeneralMechanism.html": { "href": "api/Hi.Mech.GeneralMechanism.html", "title": "Class GeneralMechanism | HiAPI-C# 2025", - "summary": "Class GeneralMechanism Namespace Hi.Mech Assembly HiMech.dll General Mechanism. public class GeneralMechanism : IMakeXmlSource, ITopo, IGetAsmb, IGetAnchoredDisplayeeList, IGetAnchorToSolidDictionary, IAnchoredDisplayee, IGetAnchor, IGetTopoIndex, IDisplayee, IExpandToBox3d Inheritance object GeneralMechanism Implements IMakeXmlSource ITopo IGetAsmb IGetAnchoredDisplayeeList IGetAnchorToSolidDictionary IAnchoredDisplayee IGetAnchor IGetTopoIndex IDisplayee IExpandToBox3d Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The XML IO is according to self-contained principle. Constructors GeneralMechanism() Initializes a new instance of the GeneralMechanism class. public GeneralMechanism() GeneralMechanism(XElement, string, IProgress) Initializes a new instance of the GeneralMechanism class from XML. public GeneralMechanism(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML element containing the mechanism data. baseDirectory string The base directory for resolving relative file paths. progress IProgress Properties AnchorToSolid Gets the dictionary mapping anchors to their corresponding solids. public Dictionary AnchorToSolid { get; } Property Value Dictionary Asmb Gets the assembly containing the mechanism components. public Asmb Asmb { get; } Property Value Asmb Root Gets the root anchor of the mechanism. public Anchor Root { get; } Property Value Anchor XName Name for XML IO. public static string XName { get; } Property Value string Methods Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchorToSolidDictionary() Gets a dictionary that maps Anchor objects to their corresponding Solid objects. public Dictionary GetAnchorToSolidDictionary() Returns Dictionary A dictionary where keys are anchors and values are their associated solids. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. 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." + "summary": "Class GeneralMechanism Namespace Hi.Mech Assembly HiMech.dll General Mechanism. public class GeneralMechanism : IMakeXmlSource, ITopo, IGetAsmb, IGetAnchoredDisplayeeList, IGetAnchorToSolidDictionary, IAnchoredDisplayee, IGetAnchor, IGetTopoIndex, IDisplayee, IExpandToBox3d Inheritance object GeneralMechanism Implements IMakeXmlSource ITopo IGetAsmb IGetAnchoredDisplayeeList IGetAnchorToSolidDictionary IAnchoredDisplayee IGetAnchor IGetTopoIndex IDisplayee IExpandToBox3d Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The XML IO is according to self-contained principle. Constructors GeneralMechanism() Initializes a new instance of the GeneralMechanism class. public GeneralMechanism() GeneralMechanism(XElement, string, IProgress) Initializes a new instance of the GeneralMechanism class from XML. public GeneralMechanism(XElement src, string baseDirectory, IProgress progress) Parameters src XElement The XML element containing the mechanism data. baseDirectory string The base directory for resolving relative file paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. Properties AnchorToSolid Gets the dictionary mapping anchors to their corresponding solids. public Dictionary AnchorToSolid { get; } Property Value Dictionary Asmb Gets the assembly containing the mechanism components. public Asmb Asmb { get; } Property Value Asmb Root Gets the root anchor of the mechanism. public Anchor Root { get; } Property Value Anchor XName Name for XML IO. public static string XName { get; } Property Value string Methods Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchorToSolidDictionary() Gets a dictionary that maps Anchor objects to their corresponding Solid objects. public Dictionary GetAnchorToSolidDictionary() Returns Dictionary A dictionary where keys are anchors and values are their associated solids. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. 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." }, "api/Hi.Mech.IGetAnchorToSolidDictionary.html": { "href": "api/Hi.Mech.IGetAnchorToSolidDictionary.html", @@ -2302,7 +2317,7 @@ "api/Hi.Mech.Topo.Asmb.html": { "href": "api/Hi.Mech.Topo.Asmb.html", "title": "Class Asmb | HiAPI-C# 2025", - "summary": "Class Asmb Namespace Hi.Mech.Topo Assembly HiMech.dll Collection of Anchor and Asmb. public class Asmb : IGetAsmb, IGetTopoIndex, IDisposable Inheritance object Asmb Implements IGetAsmb IGetTopoIndex IDisposable 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 Asmb() Ctor. public Asmb() Asmb(Asmb) Ctor. public Asmb(Asmb parent) Parameters parent Asmb parent Asmb(Asmb, string) Ctor. public Asmb(Asmb parent, string name) Parameters parent Asmb parent name string Name Asmb(string) Ctor. public Asmb(string name) Parameters name string Name Properties ChildAncs Gets the collection of child anchors in this assembly. public ThreadSafeSet ChildAncs { get; } Property Value ThreadSafeSet ChildAsmbs Gets the collection of child assemblies in this assembly. public ThreadSafeSet ChildAsmbs { get; } Property Value ThreadSafeSet Guid GUID. public Guid Guid { get; } Property Value Guid Name Name. public string Name { get; set; } Property Value string XName Gets the XML name for the assembly. public static string XName { get; } Property Value string Methods AllEnterReadLock() Enters read locks for all thread-safe collections in the assembly. public void AllEnterReadLock() AllExitReadLock() Exits read locks for all thread-safe collections in the assembly. public void AllExitReadLock() CallAsmb(XElement, string, Dictionary, Dictionary, Dictionary, IProgress) Get asmb by the asmbXml. If the members of the target asmb do not exist on asmbs or ancs, the members will be generated; otherwise, the existed members are applied. public static Asmb CallAsmb(XElement asmbXml, string baseDirectory, Dictionary asmbs = null, Dictionary ancs = null, Dictionary brns = null, IProgress progress = null) Parameters asmbXml XElement xml of asmb baseDirectory string Base directory path for resolving relative paths asmbs Dictionary existed asmb map ancs Dictionary existed anc map brns Dictionary existed branch map progress IProgress Returns Asmb asmb Display(Bind, Anchor, params IGetAnchor[]) Display displayees according to the GetAnchor(). The fixed anchor is root. If the element of displayees is not IDisplayee or null Anchor, the element will be ignored. public void Display(Bind bind, Anchor root, params IGetAnchor[] displayees) Parameters bind Bind bind root Anchor fixed anchor displayees IGetAnchor[] element to be rendered Display(Bind, Dictionary, params IGetAnchor[]) Display the displayees according to map. If displayees is null, do nothing. public static void Display(Bind bind, Dictionary map, params IGetAnchor[] displayees) Parameters bind Bind bind map Dictionary anchor to transformation map displayees IGetAnchor[] displayees Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToBox3d(Box3d, Anchor, params IGetAnchor[]) Expands a bounding box to include the assembly. public void ExpandToBox3d(Box3d dst, Anchor root, params IGetAnchor[] displayees) Parameters dst Box3d The bounding box to expand. root Anchor The root anchor for the calculation. displayees IGetAnchor[] The displayable objects to include in the calculation. GetAnchorByGuid(string, bool) Finds an anchor in the assembly hierarchy by its GUID. public Anchor GetAnchorByGuid(string guid, bool enableThreadSafe = true) Parameters guid string The GUID of the anchor to find. enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns Anchor The anchor with the specified GUID, or null if not found. GetAnchorChain(Anchor, Anchor) Gets a chain of anchors from the head to the tail. public List GetAnchorChain(Anchor head, Anchor tail) Parameters head Anchor The starting anchor of the chain. tail Anchor The ending anchor of the chain. Returns List A list of anchors representing the chain, or an empty list if no chain exists. GetAnchoredDisplayeeList(Dictionary) Gets a list of anchored displayable objects based on the provided anchor-to-solid mapping. public List GetAnchoredDisplayeeList(Dictionary anchorToSolidDictionary) Parameters anchorToSolidDictionary Dictionary Dictionary mapping anchors to their corresponding solids. Returns List A list of anchored displayable objects. GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetAsmbDraw(Anchor) Gets an assembly drawing for visualization. public AsmbDraw GetAsmbDraw(Anchor root) Parameters root Anchor The root anchor for the drawing. Returns AsmbDraw An assembly drawing object. GetBox3d(Anchor, params IGetAnchor[]) Gets a bounding box for the assembly. public Box3d GetBox3d(Anchor root, params IGetAnchor[] displayees) Parameters root Anchor The root anchor for the calculation. displayees IGetAnchor[] The displayable objects to include in the calculation. Returns Box3d A 3D bounding box containing the assembly. GetBranchByGuid(string, bool) Finds a branch in the assembly hierarchy by its GUID. public Branch GetBranchByGuid(string guid, bool enableThreadSafe = true) Parameters guid string The GUID of the branch to find. enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns Branch The branch with the specified GUID, or null if not found. GetBranchChain(IGetAnchor, IGetAnchor) Gets a chain of branches with their directions from the head anchor to the tail anchor. public List GetBranchChain(IGetAnchor head, IGetAnchor tail) Parameters head IGetAnchor The starting anchor of the chain. tail IGetAnchor The ending anchor of the chain. Returns List A list of direction-branch pairs representing the chain, or an empty list if no chain exists. GetBranchsXml(IGetAnchor, string) Gets the XML representation of all branches in the assembly starting from the specified root. public XElement GetBranchsXml(IGetAnchor root, string baseDirectory) Parameters root IGetAnchor The root anchor to start from. If null, uses the first descendant anchor. baseDirectory string The base directory for file references. Returns XElement An XML element containing all branches in the assembly. GetDescendantAnchorSet(bool) Generate an anchor set from all descendant anchors. public HashSet GetDescendantAnchorSet(bool enableThreadSafe = true) Parameters enableThreadSafe bool Returns HashSet descendant anchor set GetDescendantAnchors(bool) Gets a list of all descendant anchors in the assembly hierarchy. public List GetDescendantAnchors(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns List A list of all descendant anchors. GetDescendantAsmbSet(bool) Gets a set of all descendant assemblies in the assembly hierarchy. public HashSet GetDescendantAsmbSet(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns HashSet A set of all descendant assemblies. GetDescendantAsmbs(bool) Gets a list of all descendant assemblies in the assembly hierarchy. public List GetDescendantAsmbs(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns List A list of all descendant assemblies. GetDescendingName(Anchor) Gets the descending name path for an anchor, combining assembly names with dashes. public string GetDescendingName(Anchor anc) Parameters anc Anchor The anchor to get the descending name for. Returns string The full descending name path, or null if the anchor is not found in the assembly hierarchy. GetDescendingName(Asmb) Gets the descending name path for a child assembly, combining assembly names with dashes. public string GetDescendingName(Asmb asmb) Parameters asmb Asmb The assembly to get the descending name for. Returns string The full descending name path, or null if the assembly is not found in the hierarchy. GetHierarchyString() Gets a string representation of the assembly hierarchy. public string GetHierarchyString() Returns string A string describing the assembly hierarchy. GetInnerBranchSet(bool) Gets a set of branches that are internal to this assembly. A branch is considered internal if both its endpoints are anchors within this assembly. public HashSet GetInnerBranchSet(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns HashSet A set of internal branches. GetMat4d(IGetAnchor, IGetAnchor) Gets the transformation matrix between two anchors in the assembly. public Mat4d GetMat4d(IGetAnchor root, IGetAnchor tail) Parameters root IGetAnchor The source anchor for the transformation. tail IGetAnchor The target anchor for the transformation. Returns Mat4d The 4x4 transformation matrix from root to tail. GetMat4dMap(IGetAnchor) Gets a mapping of anchors to their transformation matrices relative to the root anchor. public Dictionary GetMat4dMap(IGetAnchor root) Parameters root IGetAnchor The root anchor to calculate transformations from. Returns Dictionary A dictionary mapping anchors to their transformation matrices. GetMat4dMapWithBlocks(IGetAnchor, params Anchor[]) Gets a mapping of anchors to their transformation matrices relative to the root anchor, excluding specified blocked anchors. public Dictionary GetMat4dMapWithBlocks(IGetAnchor root, params Anchor[] blockeds) Parameters root IGetAnchor The root anchor to calculate transformations from. blockeds Anchor[] Array of anchors to exclude from the calculation. Returns Dictionary A dictionary mapping anchors to their transformation matrices. ShowMat4dMap(Dictionary) Show mat map in text on console. public static void ShowMat4dMap(Dictionary map) Parameters map Dictionary ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToXElement(IGetAnchor, string) Converts the assembly to an XML element. public XElement ToXElement(IGetAnchor root, string baseDirectory) Parameters root IGetAnchor The root anchor for the conversion. baseDirectory string The base directory for file references. Returns XElement An XML element representing the assembly. ToXElement(string) Converts the assembly to an XML element. public XElement ToXElement(string baseDirectory) Parameters baseDirectory string The base directory for file references. Returns XElement An XML element representing the assembly." + "summary": "Class Asmb Namespace Hi.Mech.Topo Assembly HiMech.dll Collection of Anchor and Asmb. public class Asmb : IGetAsmb, IGetTopoIndex, IDisposable Inheritance object Asmb Implements IGetAsmb IGetTopoIndex IDisposable 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 Asmb() Ctor. public Asmb() Asmb(Asmb) Ctor. public Asmb(Asmb parent) Parameters parent Asmb parent Asmb(Asmb, string) Ctor. public Asmb(Asmb parent, string name) Parameters parent Asmb parent name string Name Asmb(string) Ctor. public Asmb(string name) Parameters name string Name Properties ChildAncs Gets the collection of child anchors in this assembly. public ThreadSafeSet ChildAncs { get; } Property Value ThreadSafeSet ChildAsmbs Gets the collection of child assemblies in this assembly. public ThreadSafeSet ChildAsmbs { get; } Property Value ThreadSafeSet Guid GUID. public Guid Guid { get; } Property Value Guid Name Name. public string Name { get; set; } Property Value string XName Gets the XML name for the assembly. public static string XName { get; } Property Value string Methods AllEnterReadLock() Enters read locks for all thread-safe collections in the assembly. public void AllEnterReadLock() AllExitReadLock() Exits read locks for all thread-safe collections in the assembly. public void AllExitReadLock() CallAsmb(XElement, string, Dictionary, Dictionary, Dictionary, IProgress) Get asmb by the asmbXml. If the members of the target asmb do not exist on asmbs or ancs, the members will be generated; otherwise, the existed members are applied. public static Asmb CallAsmb(XElement asmbXml, string baseDirectory, Dictionary asmbs = null, Dictionary ancs = null, Dictionary brns = null, IProgress progress = null) Parameters asmbXml XElement xml of asmb baseDirectory string Base directory path for resolving relative paths asmbs Dictionary existed asmb map ancs Dictionary existed anc map brns Dictionary existed branch map progress IProgress Progress reporter for diagnostic messages emitted during construction. Returns Asmb asmb Display(Bind, Anchor, params IGetAnchor[]) Display displayees according to the GetAnchor(). The fixed anchor is root. If the element of displayees is not IDisplayee or null Anchor, the element will be ignored. public void Display(Bind bind, Anchor root, params IGetAnchor[] displayees) Parameters bind Bind bind root Anchor fixed anchor displayees IGetAnchor[] element to be rendered Display(Bind, Dictionary, params IGetAnchor[]) Display the displayees according to map. If displayees is null, do nothing. public static void Display(Bind bind, Dictionary map, params IGetAnchor[] displayees) Parameters bind Bind bind map Dictionary anchor to transformation map displayees IGetAnchor[] displayees Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToBox3d(Box3d, Anchor, params IGetAnchor[]) Expands a bounding box to include the assembly. public void ExpandToBox3d(Box3d dst, Anchor root, params IGetAnchor[] displayees) Parameters dst Box3d The bounding box to expand. root Anchor The root anchor for the calculation. displayees IGetAnchor[] The displayable objects to include in the calculation. GetAnchorByGuid(string, bool) Finds an anchor in the assembly hierarchy by its GUID. public Anchor GetAnchorByGuid(string guid, bool enableThreadSafe = true) Parameters guid string The GUID of the anchor to find. enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns Anchor The anchor with the specified GUID, or null if not found. GetAnchorChain(Anchor, Anchor) Gets a chain of anchors from the head to the tail. public List GetAnchorChain(Anchor head, Anchor tail) Parameters head Anchor The starting anchor of the chain. tail Anchor The ending anchor of the chain. Returns List A list of anchors representing the chain, or an empty list if no chain exists. GetAnchoredDisplayeeList(Dictionary) Gets a list of anchored displayable objects based on the provided anchor-to-solid mapping. public List GetAnchoredDisplayeeList(Dictionary anchorToSolidDictionary) Parameters anchorToSolidDictionary Dictionary Dictionary mapping anchors to their corresponding solids. Returns List A list of anchored displayable objects. GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetAsmbDraw(Anchor) Gets an assembly drawing for visualization. public AsmbDraw GetAsmbDraw(Anchor root) Parameters root Anchor The root anchor for the drawing. Returns AsmbDraw An assembly drawing object. GetBox3d(Anchor, params IGetAnchor[]) Gets a bounding box for the assembly. public Box3d GetBox3d(Anchor root, params IGetAnchor[] displayees) Parameters root Anchor The root anchor for the calculation. displayees IGetAnchor[] The displayable objects to include in the calculation. Returns Box3d A 3D bounding box containing the assembly. GetBranchByGuid(string, bool) Finds a branch in the assembly hierarchy by its GUID. public Branch GetBranchByGuid(string guid, bool enableThreadSafe = true) Parameters guid string The GUID of the branch to find. enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns Branch The branch with the specified GUID, or null if not found. GetBranchChain(IGetAnchor, IGetAnchor) Gets a chain of branches with their directions from the head anchor to the tail anchor. public List GetBranchChain(IGetAnchor head, IGetAnchor tail) Parameters head IGetAnchor The starting anchor of the chain. tail IGetAnchor The ending anchor of the chain. Returns List A list of direction-branch pairs representing the chain, or an empty list if no chain exists. GetBranchsXml(IGetAnchor, string) Gets the XML representation of all branches in the assembly starting from the specified root. public XElement GetBranchsXml(IGetAnchor root, string baseDirectory) Parameters root IGetAnchor The root anchor to start from. If null, uses the first descendant anchor. baseDirectory string The base directory for file references. Returns XElement An XML element containing all branches in the assembly. GetDescendantAnchorSet(bool) Generate an anchor set from all descendant anchors. public HashSet GetDescendantAnchorSet(bool enableThreadSafe = true) Parameters enableThreadSafe bool Returns HashSet descendant anchor set GetDescendantAnchors(bool) Gets a list of all descendant anchors in the assembly hierarchy. public List GetDescendantAnchors(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns List A list of all descendant anchors. GetDescendantAsmbSet(bool) Gets a set of all descendant assemblies in the assembly hierarchy. public HashSet GetDescendantAsmbSet(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns HashSet A set of all descendant assemblies. GetDescendantAsmbs(bool) Gets a list of all descendant assemblies in the assembly hierarchy. public List GetDescendantAsmbs(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns List A list of all descendant assemblies. GetDescendingName(Anchor) Gets the descending name path for an anchor, combining assembly names with dashes. public string GetDescendingName(Anchor anc) Parameters anc Anchor The anchor to get the descending name for. Returns string The full descending name path, or null if the anchor is not found in the assembly hierarchy. GetDescendingName(Asmb) Gets the descending name path for a child assembly, combining assembly names with dashes. public string GetDescendingName(Asmb asmb) Parameters asmb Asmb The assembly to get the descending name for. Returns string The full descending name path, or null if the assembly is not found in the hierarchy. GetHierarchyString() Gets a string representation of the assembly hierarchy. public string GetHierarchyString() Returns string A string describing the assembly hierarchy. GetInnerBranchSet(bool) Gets a set of branches that are internal to this assembly. A branch is considered internal if both its endpoints are anchors within this assembly. public HashSet GetInnerBranchSet(bool enableThreadSafe = true) Parameters enableThreadSafe bool If true, uses thread-safe operations for accessing collections. Returns HashSet A set of internal branches. GetMat4d(IGetAnchor, IGetAnchor) Gets the transformation matrix between two anchors in the assembly. public Mat4d GetMat4d(IGetAnchor root, IGetAnchor tail) Parameters root IGetAnchor The source anchor for the transformation. tail IGetAnchor The target anchor for the transformation. Returns Mat4d The 4x4 transformation matrix from root to tail. GetMat4dMap(IGetAnchor) Gets a mapping of anchors to their transformation matrices relative to the root anchor. public Dictionary GetMat4dMap(IGetAnchor root) Parameters root IGetAnchor The root anchor to calculate transformations from. Returns Dictionary A dictionary mapping anchors to their transformation matrices. GetMat4dMapWithBlocks(IGetAnchor, params Anchor[]) Gets a mapping of anchors to their transformation matrices relative to the root anchor, excluding specified blocked anchors. public Dictionary GetMat4dMapWithBlocks(IGetAnchor root, params Anchor[] blockeds) Parameters root IGetAnchor The root anchor to calculate transformations from. blockeds Anchor[] Array of anchors to exclude from the calculation. Returns Dictionary A dictionary mapping anchors to their transformation matrices. ShowMat4dMap(Dictionary) Show mat map in text on console. public static void ShowMat4dMap(Dictionary map) Parameters map Dictionary ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object. ToXElement(IGetAnchor, string) Converts the assembly to an XML element. public XElement ToXElement(IGetAnchor root, string baseDirectory) Parameters root IGetAnchor The root anchor for the conversion. baseDirectory string The base directory for file references. Returns XElement An XML element representing the assembly. ToXElement(string) Converts the assembly to an XML element. public XElement ToXElement(string baseDirectory) Parameters baseDirectory string The base directory for file references. Returns XElement An XML element representing the assembly." }, "api/Hi.Mech.Topo.AsmbDraw.html": { "href": "api/Hi.Mech.Topo.AsmbDraw.html", @@ -2572,7 +2587,7 @@ "api/Hi.Milling.Cutters.AptProfile.html": { "href": "api/Hi.Milling.Cutters.AptProfile.html", "title": "Class AptProfile | HiAPI-C# 2025", - "summary": "Class AptProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents an APT (Automatically Programmed Tool) based profile for a milling cutter. This profile uses APT definitions to describe the cutter geometry. public class AptProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGenStl, IGetStl, IDuplicate, IGetSelectionName, IGetInitStickConvex, IVolumeRemover, IDisposable, IUpdateByContent, IClearCache, IPolarResolution2dSourceProperty Inheritance object AptProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGenStl IGetStl IDuplicate IGetSelectionName IGetInitStickConvex IVolumeRemover IDisposable IUpdateByContent IClearCache IPolarResolution2dSourceProperty Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods StlUtil.ToFaceDrawing(IGetStl) StlUtil.ToLineDrawing(IGetStl) StlUtil.ToSparkleLineDrawing(IGetStl) 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 AptProfile() Initializes a new instance of the AptProfile class. public AptProfile() AptProfile(IAptBased) Initializes a new instance of the AptProfile class. public AptProfile(IAptBased apt) Parameters apt IAptBased The APT-based object. AptProfile(XElement, string, IProgress) Initializes a new instance of the AptProfile class. public AptProfile(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element containing the profile configuration. baseDirectory string The base directory for resolving relative paths. progress IProgress Properties AbstractNote Gets the abstract note from the APT definition. public string AbstractNote { get; } Property Value string Apt Gets or sets the APT-based definition for the profile. public IAptBased Apt { get; set; } Property Value IAptBased DefaultAngleResolution_rad Gets or sets the default angle resolution in radians. public static double DefaultAngleResolution_rad { get; set; } Property Value double DefaultLinearResolution_mm Gets or sets the default linear resolution in millimeters. public static double DefaultLinearResolution_mm { get; set; } Property Value double PolarResolution2dSource The provider of IPolarResolution2d. public Func PolarResolution2dSource { get; set; } Property Value Func XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears all cached data. public void ClearCache() Dispose() Disposes of all resources. public void Dispose() Dispose(bool) Disposes of unmanaged resources. protected virtual void Dispose(bool disposing) Parameters disposing bool True if disposing, false if finalizing Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d resolution) Parameters resolution IPolarResolution2d Polar resolution Returns Stl A newly created STL. GetInitStickConvex() Gets the initial stick convex representation of the profile. public InitStickConvex GetInitStickConvex() Returns InitStickConvex The initial stick convex representation GetSelectionName() Gets the display name for selection. public string GetSelectionName() Returns string The display name GetStl() Gets the STL mesh representation of the profile. public Stl GetStl() Returns Stl The STL mesh GetZrList() Gets the ZR contour list for the profile. public List GetZrList() Returns List The list of ZR pairs 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. UpdateByContent() Updates the profile based on content changes. public void UpdateByContent()" + "summary": "Class AptProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents an APT (Automatically Programmed Tool) based profile for a milling cutter. This profile uses APT definitions to describe the cutter geometry. public class AptProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGenStl, IGetStl, IDuplicate, IGetSelectionName, IGetInitStickConvex, IVolumeRemover, IDisposable, IUpdateByContent, IClearCache, IPolarResolution2dSourceProperty Inheritance object AptProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGenStl IGetStl IDuplicate IGetSelectionName IGetInitStickConvex IVolumeRemover IDisposable IUpdateByContent IClearCache IPolarResolution2dSourceProperty Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods StlUtil.ToFaceDrawing(IGetStl) StlUtil.ToLineDrawing(IGetStl) StlUtil.ToSparkleLineDrawing(IGetStl) 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 AptProfile() Initializes a new instance of the AptProfile class. public AptProfile() AptProfile(IAptBased) Initializes a new instance of the AptProfile class. public AptProfile(IAptBased apt) Parameters apt IAptBased The APT-based object. AptProfile(XElement, string, IProgress) Initializes a new instance of the AptProfile class. public AptProfile(XElement src, string baseDirectory, IProgress progress) Parameters src XElement XML element containing the profile configuration. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. Properties AbstractNote Gets the abstract note from the APT definition. public string AbstractNote { get; } Property Value string Apt Gets or sets the APT-based definition for the profile. public IAptBased Apt { get; set; } Property Value IAptBased DefaultAngleResolution_rad Gets or sets the default angle resolution in radians. public static double DefaultAngleResolution_rad { get; set; } Property Value double DefaultLinearResolution_mm Gets or sets the default linear resolution in millimeters. public static double DefaultLinearResolution_mm { get; set; } Property Value double PolarResolution2dSource The provider of IPolarResolution2d. public Func PolarResolution2dSource { get; set; } Property Value Func XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears all cached data. public void ClearCache() Dispose() Disposes of all resources. public void Dispose() Dispose(bool) Disposes of unmanaged resources. protected virtual void Dispose(bool disposing) Parameters disposing bool True if disposing, false if finalizing Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d resolution) Parameters resolution IPolarResolution2d Polar resolution Returns Stl A newly created STL. GetInitStickConvex() Gets the initial stick convex representation of the profile. public InitStickConvex GetInitStickConvex() Returns InitStickConvex The initial stick convex representation GetSelectionName() Gets the display name for selection. public string GetSelectionName() Returns string The display name GetStl() Gets the STL mesh representation of the profile. public Stl GetStl() Returns Stl The STL mesh GetZrList() Gets the ZR contour list for the profile. public List GetZrList() Returns List The list of ZR pairs 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. UpdateByContent() Updates the profile based on content changes. public void UpdateByContent()" }, "api/Hi.Milling.Cutters.ConstRatioProfile.html": { "href": "api/Hi.Milling.Cutters.ConstRatioProfile.html", @@ -2582,7 +2597,7 @@ "api/Hi.Milling.Cutters.CustomSpinningProfile.html": { "href": "api/Hi.Milling.Cutters.CustomSpinningProfile.html", "title": "Class CustomSpinningProfile | HiAPI-C# 2025", - "summary": "Class CustomSpinningProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a custom spinning profile for a milling cutter. This profile allows for custom geometry to be used as the cutter profile. public class CustomSpinningProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGenStl, IGetStl, IDuplicate, IClearCache, IPolarResolution2dSourceProperty Inheritance object CustomSpinningProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGenStl IGetStl IDuplicate IClearCache IPolarResolution2dSourceProperty Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods StlUtil.ToFaceDrawing(IGetStl) StlUtil.ToLineDrawing(IGetStl) StlUtil.ToSparkleLineDrawing(IGetStl) 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 CustomSpinningProfile(IGetStl) Initializes a new instance of the CustomSpinningProfile class. public CustomSpinningProfile(IGetStl geom) Parameters geom IGetStl The geometry that defines the profile. CustomSpinningProfile(XElement, string, IProgress, object[]) Initializes a new instance of the CustomSpinningProfile class. public CustomSpinningProfile(XElement element, string baseDirectory, IProgress progress, object[] res) Parameters element XElement The XML element containing profile data. baseDirectory string The base directory for resolving relative paths. progress IProgress res object[] Additional resolution parameters. Properties AbstractNote Gets the abstract note describing the profile. public string AbstractNote { get; } Property Value string Geom Gets or sets the geometry that defines the profile. public IGetStl Geom { get; set; } Property Value IGetStl PolarResolution2dSource The provider of IPolarResolution2d. public Func PolarResolution2dSource { get; set; } Property Value Func XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears any cached data. public void ClearCache() Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d resolution) Parameters resolution IPolarResolution2d Polar resolution Returns Stl A newly created STL. GetStl() Gets the STL mesh representation of the profile. public Stl GetStl() Returns Stl The STL mesh GetZrList() Gets the ZR contour list for the profile. This method attempts to get the ZR list from various geometry types. public List GetZrList() Returns List The list of ZR pairs 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." + "summary": "Class CustomSpinningProfile Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a custom spinning profile for a milling cutter. This profile allows for custom geometry to be used as the cutter profile. public class CustomSpinningProfile : IShaperProfile, IMakeXmlSource, IAbstractNote, IGetZrList, IGenStl, IGetStl, IDuplicate, IClearCache, IPolarResolution2dSourceProperty Inheritance object CustomSpinningProfile Implements IShaperProfile IMakeXmlSource IAbstractNote IGetZrList IGenStl IGetStl IDuplicate IClearCache IPolarResolution2dSourceProperty Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods StlUtil.ToFaceDrawing(IGetStl) StlUtil.ToLineDrawing(IGetStl) StlUtil.ToSparkleLineDrawing(IGetStl) 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 CustomSpinningProfile(IGetStl) Initializes a new instance of the CustomSpinningProfile class. public CustomSpinningProfile(IGetStl geom) Parameters geom IGetStl The geometry that defines the profile. CustomSpinningProfile(XElement, string, IProgress, object[]) Initializes a new instance of the CustomSpinningProfile class. public CustomSpinningProfile(XElement element, string baseDirectory, IProgress progress, object[] res) Parameters element XElement The XML element containing profile data. baseDirectory string The base directory for resolving relative paths. progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional resolution parameters. Properties AbstractNote Gets the abstract note describing the profile. public string AbstractNote { get; } Property Value string Geom Gets or sets the geometry that defines the profile. public IGetStl Geom { get; set; } Property Value IGetStl PolarResolution2dSource The provider of IPolarResolution2d. public Func PolarResolution2dSource { get; set; } Property Value Func XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears any cached data. public void ClearCache() Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object GenStl(IPolarResolution2d) Generates a new STL. public Stl GenStl(IPolarResolution2d resolution) Parameters resolution IPolarResolution2d Polar resolution Returns Stl A newly created STL. GetStl() Gets the STL mesh representation of the profile. public Stl GetStl() Returns Stl The STL mesh GetZrList() Gets the ZR contour list for the profile. This method attempts to get the ZR list from various geometry types. public List GetZrList() Returns List The list of ZR pairs 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." }, "api/Hi.Milling.Cutters.CutterUtil.html": { "href": "api/Hi.Milling.Cutters.CutterUtil.html", @@ -2617,7 +2632,7 @@ "api/Hi.Milling.Cutters.MillingCutter.html": { "href": "api/Hi.Milling.Cutters.MillingCutter.html", "title": "Class MillingCutter | HiAPI-C# 2025", - "summary": "Class MillingCutter Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a milling cutter with its geometric and physical properties. public class MillingCutter : ICutter, IGetSweptable, IAnchoredDisplayee, IGetFletchBuckle, IMakeXmlSource, IAbstractNote, IAnchoredCollidableStem, IAnchoredCollidableNode, IAnchoredCollidableBased, IDisposable, INameNote, IGetFluteHeight, IDisplayee, IExpandToBox3d, IUpdateByContent, IClearCache, IGetThermalLayerList, ITopo, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchoredDisplayeeList, IDuplicate, IGetInitStickConvex, IVolumeRemover, IPolarResolution2d, IGetZrList Inheritance object MillingCutter Implements ICutter IGetSweptable IAnchoredDisplayee IGetFletchBuckle IMakeXmlSource IAbstractNote IAnchoredCollidableStem IAnchoredCollidableNode IAnchoredCollidableBased IDisposable INameNote IGetFluteHeight IDisplayee IExpandToBox3d IUpdateByContent IClearCache IGetThermalLayerList ITopo IGetAsmb IGetAnchor IGetTopoIndex IGetAnchoredDisplayeeList IDuplicate IGetInitStickConvex IVolumeRemover IPolarResolution2d IGetZrList Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) CutterUtil.GetCutterBodyCoolingArea_mm2(ICutter) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MillingTemperatureUtil.GetMaterial(IGetThermalLayerList, double) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The cutter can be solid end or insert end. The term “Flute” is the edge part of the solid end cutter or the full insert of the insert end body. The term “Shank” is the full part except for edge part (i.e. Flute) of the solid end cutter. Shank and Flute compose the full cutter. Constructors MillingCutter() Initializes a new instance of the MillingCutter class. public MillingCutter() MillingCutter(XElement, string, string, IProgress, object[]) Ctor. public MillingCutter(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths relFile string Relative file path progress IProgress res object[] Additional optional resources Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string AngleResolution_deg AngleResolution_deg. Call ClearCache() after setting the property. public double AngleResolution_deg { get; set; } Property Value double AngleResolution_rad AngleResolution_rad. Call ClearCache() after setting the property. public double AngleResolution_rad { get; set; } Property Value double CoatingLayerList Gets or sets the list of coating thermal layers. The sequence starts from surface, i.e. from outer to inner. public List CoatingLayerList { get; set; } Property Value List CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CutterTip Gets the anchor point at the cutter tip. public Anchor CutterTip { get; } Property Value Anchor DefaultAngleResolution_rad Gets or sets the default angle resolution in radians. public static double DefaultAngleResolution_rad { get; set; } Property Value double DefaultLinearResolution_mm Gets or sets the default linear resolution in millimeters. public static double DefaultLinearResolution_mm { get; set; } Property Value double DefaultStlLongitudeNum Gets or sets the default number of longitude lines for STL generation. public static int DefaultStlLongitudeNum { get; set; } Property Value int EffectiveCuttingDiameter_mm Cutting Diameter for calculate cutting speed. public double EffectiveCuttingDiameter_mm { get; } Property Value double ExposedHeight_mm Has to be simultanous with ExposedCutterHeight_mm. public double ExposedHeight_mm { get; set; } Property Value double FluteContourTray Gets or sets the flute contour tray that defines the flute geometry. public IContourTray FluteContourTray { get; set; } Property Value IContourTray FluteHeight_mm Gets the height of the flute in millimeters. public double FluteHeight_mm { get; } Property Value double FluteMaterial Material of the flute. public CutterMaterial FluteMaterial { get; set; } Property Value CutterMaterial FluteMaterialFile Gets or sets the file path for the flute material definition. public string FluteMaterialFile { get; set; } Property Value string FullHeight_mm Gets the full height of the cutter in millimeters. public double FullHeight_mm { get; } Property Value double HoneRadius_mm Gets or sets the hone radius in millimeters. public double HoneRadius_mm { get; set; } Property Value double HoneRadius_um Gets the hone radius in micrometers. public double HoneRadius_um { get; set; } Property Value double InnerBeamProfile Gets or sets the inner beam profile. public IShaperProfile InnerBeamProfile { get; set; } Property Value IShaperProfile Remarks InnerBeamProfile may be dependent on ShaperProfile. InnerBeamProfile.ClearCache() and initialization must be performed after ShaperProfile.ClearCache() and initialization. InsertNum Gets or sets Insert Number. The property should be used Only if IntegralMode is InsertEnd. However, there is no exception mechanism. public int InsertNum { get; set; } Property Value int InsertThickness_mm Thickness of an insert. Only available if the cutter is InsertEnd. public double InsertThickness_mm { get; set; } Property Value double IntegralMode Gets or sets the main integral mode of the cutter. public MillingCutter.IntegralModeEnum IntegralMode { get; set; } Property Value MillingCutter.IntegralModeEnum IsSpinningCutter Is cutter spining when machining. public bool IsSpinningCutter { get; } Property Value bool Is cutter spining when machining. LinearResolution_mm LinearResolution_mm. Call ClearCache() after setting the property. public double LinearResolution_mm { get; set; } Property Value double MillingCutterOptLimit public MillingCutterOptOption MillingCutterOptLimit { get; set; } Property Value MillingCutterOptOption Name Name. public string Name { get; set; } Property Value string Note Note. public string Note { get; set; } Property Value string ReliefAngle_deg Gets or sets the relief angle in degrees. public double ReliefAngle_deg { get; set; } Property Value double ReliefAngle_rad Gets or sets the relief angle in radians. public double ReliefAngle_rad { get; set; } Property Value double ShankMassAssignmentMode Gets or sets the mass assignment mode for the shank. public MillingCutter.MassAssignmentMode ShankMassAssignmentMode { get; set; } Property Value MillingCutter.MassAssignmentMode ShankMass_g Gets or sets the cutter shank mass in grams. If IntegralMode is SolidEnd, the mass is the full cutter mass. If IntegralMode is InsertEnd, the mass is the shank mass. since the flute mass is assumed small and dynamic depends on the CWE (Cutter-Workpiece-Engagement). public double ShankMass_g { get; set; } Property Value double ShankMaterial Material of the shank. It should be the same with FluteMaterial if the cutter is SolidEnd. public IStructureMaterial ShankMaterial { get; set; } Property Value IStructureMaterial ShankMaterialFile Gets or sets the file path for the shank material definition. It should be the same with FluteMaterialFile if the cutter is SolidEnd. public string ShankMaterialFile { get; set; } Property Value string ShaperProfile Gets or sets the shaper profile that defines the cutter's shape. public IShaperProfile ShaperProfile { get; set; } Property Value IShaperProfile ShaperTopoBrick cutable part of cutter. the part cut the workpiece if overlapped. public ITopoBrick ShaperTopoBrick { get; } Property Value ITopoBrick SingleInsertMass_g Gets or sets the total inserts' mass in grams. The property should be used Only if IntegralMode is InsertEnd. However, there is no exception mechanism. public double SingleInsertMass_g { get; set; } Property Value double StrutTopoBrick uncutable part of cutter. the part triggers collision to workpiece if overlapped. public ITopoBrick StrutTopoBrick { get; } Property Value ITopoBrick SumInsertMass_g Gets the total mass of all inserts in grams calculated from SingleInsertMass_g * InsertNum. public double SumInsertMass_g { get; } Property Value double SurfaceMaterial Gets the surface material of the cutter. public CutterMaterial SurfaceMaterial { get; } Property Value CutterMaterial UpperBeamGeom Gets the upper beam geometry of the cutter. public IGetStl UpperBeamGeom { get; set; } Property Value IGetStl UpperBeamPolarResolution2dSource Gets or sets the provider for upper beam polar resolution. public Func UpperBeamPolarResolution2dSource { get; set; } Property Value Func XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears all cached data. public void ClearCache() ClearThermalLayerListCache() Clears the thermal layer list cache. public void ClearThermalLayerListCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredCollidables() Gets the list of anchored collidable nodes contained by this stem. public List GetAnchoredCollidables() Returns List A list of anchored collidable nodes. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCutterFluteDisplayee() Gets the cutter flute displayee for visualization. public IAnchoredDisplayee GetCutterFluteDisplayee() Returns IAnchoredDisplayee The anchored displayee for the cutter flute. GetDeflectionPara_umdN(out double, out double) (L^3)/(3EI). Where deflection = F(L^3)/(3EI). for cantiliver beam. public void GetDeflectionPara_umdN(out double bendingPara_umdN, out double zDeflectionPara_umdN) Parameters bendingPara_umdN double zDeflectionPara_umdN double Exceptions Exception GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetFluteThermalLayerList() Flute material layer From outer(i.e. surface) to inner. public List GetFluteThermalLayerList() Returns List GetGuessShankMass_g() Get guess mass by volume and density. The volume is count from InnerBeamProfile and UpperBeamGeom. public double GetGuessShankMass_g() Returns double GetInitStickConvex() Get InitStickConvex. public InitStickConvex GetInitStickConvex() Returns InitStickConvex InitStickConvex GetMinimumUncutChipThickness_mm(ICuttingPara) Gets the minimum uncut chip thickness in millimeters for the specified cutting parameters. The value is dependent on HoneRadius_um. public double GetMinimumUncutChipThickness_mm(ICuttingPara millingPara) Parameters millingPara ICuttingPara The cutting parameters to use for calculation. Returns double The minimum uncut chip thickness in millimeters. GetMinimumUncutChipThickness_um(ICuttingPara) Gets the minimum uncut chip thickness in micrometers for the specified cutting parameters. public double GetMinimumUncutChipThickness_um(ICuttingPara millingPara) Parameters millingPara ICuttingPara The cutting parameters to use for calculation. Returns double The minimum uncut chip thickness in micrometers. GetNobleAnchoredDisplayee() Gets a noble anchored displayee for visualization. public AnchoredDisplayee GetNobleAnchoredDisplayee() Returns AnchoredDisplayee The anchored displayee. GetSweptable(double) Get Sweptable. public Sweptable GetSweptable(double fractionTolerance) Parameters fractionTolerance double The fraction tolerance for the sweptable. Returns Sweptable Sweptable GetTestBallCutter() Creates a test ball cutter. public static MillingCutter GetTestBallCutter() Returns MillingCutter A new ball cutter instance for testing. GetTestBottomCutter() Creates a test bottom cutter. public static MillingCutter GetTestBottomCutter() Returns MillingCutter A new bottom cutter instance for testing. GetTestFreeCutter() Creates a test free cutter. public static MillingCutter GetTestFreeCutter() Returns MillingCutter A new free cutter instance for testing. GetThermalLayerList() Gets the list of thermal layers. public List GetThermalLayerList() Returns List List of thermal layers. GetZrList() Gets a list of Z-R coordinate pairs. public List GetZrList() Returns List A list of PairZr objects representing Z-R coordinates. 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. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" + "summary": "Class MillingCutter Namespace Hi.Milling.Cutters Assembly HiMech.dll Represents a milling cutter with its geometric and physical properties. public class MillingCutter : ICutter, IGetSweptable, IAnchoredDisplayee, IGetFletchBuckle, IMakeXmlSource, IAbstractNote, IAnchoredCollidableStem, IAnchoredCollidableNode, IAnchoredCollidableBased, IDisposable, INameNote, IGetFluteHeight, IDisplayee, IExpandToBox3d, IUpdateByContent, IClearCache, IGetThermalLayerList, ITopo, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchoredDisplayeeList, IDuplicate, IGetInitStickConvex, IVolumeRemover, IPolarResolution2d, IGetZrList Inheritance object MillingCutter Implements ICutter IGetSweptable IAnchoredDisplayee IGetFletchBuckle IMakeXmlSource IAbstractNote IAnchoredCollidableStem IAnchoredCollidableNode IAnchoredCollidableBased IDisposable INameNote IGetFluteHeight IDisplayee IExpandToBox3d IUpdateByContent IClearCache IGetThermalLayerList ITopo IGetAsmb IGetAnchor IGetTopoIndex IGetAnchoredDisplayeeList IDuplicate IGetInitStickConvex IVolumeRemover IPolarResolution2d IGetZrList Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) CutterUtil.GetCutterBodyCoolingArea_mm2(ICutter) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MillingTemperatureUtil.GetMaterial(IGetThermalLayerList, double) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The cutter can be solid end or insert end. The term “Flute” is the edge part of the solid end cutter or the full insert of the insert end body. The term “Shank” is the full part except for edge part (i.e. Flute) of the solid end cutter. Shank and Flute compose the full cutter. Constructors MillingCutter() Initializes a new instance of the MillingCutter class. public MillingCutter() MillingCutter(XElement, string, string, IProgress, object[]) Ctor. public MillingCutter(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths relFile string Relative file path progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional optional resources Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string AngleResolution_deg AngleResolution_deg. Call ClearCache() after setting the property. public double AngleResolution_deg { get; set; } Property Value double AngleResolution_rad AngleResolution_rad. Call ClearCache() after setting the property. public double AngleResolution_rad { get; set; } Property Value double CoatingLayerList Gets or sets the list of coating thermal layers. The sequence starts from surface, i.e. from outer to inner. public List CoatingLayerList { get; set; } Property Value List CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CutterTip Gets the anchor point at the cutter tip. public Anchor CutterTip { get; } Property Value Anchor DefaultAngleResolution_rad Gets or sets the default angle resolution in radians. public static double DefaultAngleResolution_rad { get; set; } Property Value double DefaultLinearResolution_mm Gets or sets the default linear resolution in millimeters. public static double DefaultLinearResolution_mm { get; set; } Property Value double DefaultStlLongitudeNum Gets or sets the default number of longitude lines for STL generation. public static int DefaultStlLongitudeNum { get; set; } Property Value int EffectiveCuttingDiameter_mm Cutting Diameter for calculate cutting speed. public double EffectiveCuttingDiameter_mm { get; } Property Value double ExposedHeight_mm Has to be simultanous with ExposedCutterHeight_mm. public double ExposedHeight_mm { get; set; } Property Value double FluteContourTray Gets or sets the flute contour tray that defines the flute geometry. public IContourTray FluteContourTray { get; set; } Property Value IContourTray FluteHeight_mm Gets the height of the flute in millimeters. public double FluteHeight_mm { get; } Property Value double FluteMaterial Material of the flute. public CutterMaterial FluteMaterial { get; set; } Property Value CutterMaterial FluteMaterialFile Gets or sets the file path for the flute material definition. public string FluteMaterialFile { get; set; } Property Value string FullHeight_mm Gets the full height of the cutter in millimeters. public double FullHeight_mm { get; } Property Value double HoneRadius_mm Gets or sets the hone radius in millimeters. public double HoneRadius_mm { get; set; } Property Value double HoneRadius_um Gets the hone radius in micrometers. public double HoneRadius_um { get; set; } Property Value double InnerBeamProfile Gets or sets the inner beam profile. public IShaperProfile InnerBeamProfile { get; set; } Property Value IShaperProfile Remarks InnerBeamProfile may be dependent on ShaperProfile. InnerBeamProfile.ClearCache() and initialization must be performed after ShaperProfile.ClearCache() and initialization. InsertNum Gets or sets Insert Number. The property should be used Only if IntegralMode is InsertEnd. However, there is no exception mechanism. public int InsertNum { get; set; } Property Value int InsertThickness_mm Thickness of an insert. Only available if the cutter is InsertEnd. public double InsertThickness_mm { get; set; } Property Value double IntegralMode Gets or sets the main integral mode of the cutter. public MillingCutter.IntegralModeEnum IntegralMode { get; set; } Property Value MillingCutter.IntegralModeEnum IsSpinningCutter Is cutter spining when machining. public bool IsSpinningCutter { get; } Property Value bool Is cutter spining when machining. LinearResolution_mm LinearResolution_mm. Call ClearCache() after setting the property. public double LinearResolution_mm { get; set; } Property Value double MillingCutterOptLimit public MillingCutterOptOption MillingCutterOptLimit { get; set; } Property Value MillingCutterOptOption Name Name. public string Name { get; set; } Property Value string Note Note. public string Note { get; set; } Property Value string ReliefAngle_deg Gets or sets the relief angle in degrees. public double ReliefAngle_deg { get; set; } Property Value double ReliefAngle_rad Gets or sets the relief angle in radians. public double ReliefAngle_rad { get; set; } Property Value double ShankMassAssignmentMode Gets or sets the mass assignment mode for the shank. public MillingCutter.MassAssignmentMode ShankMassAssignmentMode { get; set; } Property Value MillingCutter.MassAssignmentMode ShankMass_g Gets or sets the cutter shank mass in grams. If IntegralMode is SolidEnd, the mass is the full cutter mass. If IntegralMode is InsertEnd, the mass is the shank mass. since the flute mass is assumed small and dynamic depends on the CWE (Cutter-Workpiece-Engagement). public double ShankMass_g { get; set; } Property Value double ShankMaterial Material of the shank. It should be the same with FluteMaterial if the cutter is SolidEnd. public IStructureMaterial ShankMaterial { get; set; } Property Value IStructureMaterial ShankMaterialFile Gets or sets the file path for the shank material definition. It should be the same with FluteMaterialFile if the cutter is SolidEnd. public string ShankMaterialFile { get; set; } Property Value string ShaperProfile Gets or sets the shaper profile that defines the cutter's shape. public IShaperProfile ShaperProfile { get; set; } Property Value IShaperProfile ShaperTopoBrick cutable part of cutter. the part cut the workpiece if overlapped. public ITopoBrick ShaperTopoBrick { get; } Property Value ITopoBrick SingleInsertMass_g Gets or sets the total inserts' mass in grams. The property should be used Only if IntegralMode is InsertEnd. However, there is no exception mechanism. public double SingleInsertMass_g { get; set; } Property Value double StrutTopoBrick uncutable part of cutter. the part triggers collision to workpiece if overlapped. public ITopoBrick StrutTopoBrick { get; } Property Value ITopoBrick SumInsertMass_g Gets the total mass of all inserts in grams calculated from SingleInsertMass_g * InsertNum. public double SumInsertMass_g { get; } Property Value double SurfaceMaterial Gets the surface material of the cutter. public CutterMaterial SurfaceMaterial { get; } Property Value CutterMaterial UpperBeamGeom Gets the upper beam geometry of the cutter. public IGetStl UpperBeamGeom { get; set; } Property Value IGetStl UpperBeamPolarResolution2dSource Gets or sets the provider for upper beam polar resolution. public Func UpperBeamPolarResolution2dSource { get; set; } Property Value Func XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears all cached data. public void ClearCache() ClearThermalLayerListCache() Clears the thermal layer list cache. public void ClearThermalLayerListCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredCollidables() Gets the list of anchored collidable nodes contained by this stem. public List GetAnchoredCollidables() Returns List A list of anchored collidable nodes. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCutterFluteDisplayee() Gets the cutter flute displayee for visualization. public IAnchoredDisplayee GetCutterFluteDisplayee() Returns IAnchoredDisplayee The anchored displayee for the cutter flute. GetDeflectionPara_umdN(out double, out double) (L^3)/(3EI). Where deflection = F(L^3)/(3EI). for cantiliver beam. public void GetDeflectionPara_umdN(out double bendingPara_umdN, out double zDeflectionPara_umdN) Parameters bendingPara_umdN double zDeflectionPara_umdN double Exceptions Exception GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetFluteThermalLayerList() Flute material layer From outer(i.e. surface) to inner. public List GetFluteThermalLayerList() Returns List GetGuessShankMass_g() Get guess mass by volume and density. The volume is count from InnerBeamProfile and UpperBeamGeom. public double GetGuessShankMass_g() Returns double GetInitStickConvex() Get InitStickConvex. public InitStickConvex GetInitStickConvex() Returns InitStickConvex InitStickConvex GetMinimumUncutChipThickness_mm(ICuttingPara) Gets the minimum uncut chip thickness in millimeters for the specified cutting parameters. The value is dependent on HoneRadius_um. public double GetMinimumUncutChipThickness_mm(ICuttingPara millingPara) Parameters millingPara ICuttingPara The cutting parameters to use for calculation. Returns double The minimum uncut chip thickness in millimeters. GetMinimumUncutChipThickness_um(ICuttingPara) Gets the minimum uncut chip thickness in micrometers for the specified cutting parameters. public double GetMinimumUncutChipThickness_um(ICuttingPara millingPara) Parameters millingPara ICuttingPara The cutting parameters to use for calculation. Returns double The minimum uncut chip thickness in micrometers. GetNobleAnchoredDisplayee() Gets a noble anchored displayee for visualization. public AnchoredDisplayee GetNobleAnchoredDisplayee() Returns AnchoredDisplayee The anchored displayee. GetSweptable(double) Get Sweptable. public Sweptable GetSweptable(double fractionTolerance) Parameters fractionTolerance double The fraction tolerance for the sweptable. Returns Sweptable Sweptable GetTestBallCutter() Creates a test ball cutter. public static MillingCutter GetTestBallCutter() Returns MillingCutter A new ball cutter instance for testing. GetTestBottomCutter() Creates a test bottom cutter. public static MillingCutter GetTestBottomCutter() Returns MillingCutter A new bottom cutter instance for testing. GetTestFreeCutter() Creates a test free cutter. public static MillingCutter GetTestFreeCutter() Returns MillingCutter A new free cutter instance for testing. GetThermalLayerList() Gets the list of thermal layers. public List GetThermalLayerList() Returns List List of thermal layers. GetZrList() Gets a list of Z-R coordinate pairs. public List GetZrList() Returns List A list of PairZr objects representing Z-R coordinates. 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. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" }, "api/Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html": { "href": "api/Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html", @@ -2682,7 +2697,7 @@ "api/Hi.Milling.FluteContours.FluteContour.html": { "href": "api/Hi.Milling.FluteContours.FluteContour.html", "title": "Class FluteContour | HiAPI-C# 2025", - "summary": "Class FluteContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a flute contour for milling tools. public class FluteContour : IMakeXmlSource, IDisposable, IClearCache Inheritance object FluteContour Implements IMakeXmlSource IDisposable IClearCache 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FluteContour() Initializes a new instance of the FluteContour class public FluteContour() FluteContour(FluteContour, double) Initializes a new instance of the FluteContour class with a source contour and shift angle public FluteContour(FluteContour src, double shiftAngle_rad) Parameters src FluteContour The source flute contour to copy from shiftAngle_rad double The shift angle in radians FluteContour(XElement, string, IProgress, object[]) Initializes a new instance of the FluteContour class from XML data public FluteContour(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The source XML element baseDirectory string The base directory for resolving relative paths progress IProgress res object[] Additional resources for initialization Properties BaseBottomContour Gets or sets the base bottom contour of the flute. This represents the original bottom profile before any transformations. public IWorkingContour BaseBottomContour { get; set; } Property Value IWorkingContour BaseSideContour Gets or sets the base side contour of the flute. This represents the original side profile before any transformations. public IWorkingContour BaseSideContour { get; set; } Property Value IWorkingContour SetupAngle_deg Gets or sets the setup angle in degrees. This is a convenience property that converts ShiftAngle_rad to degrees. public double SetupAngle_deg { get; set; } Property Value double ShiftAngle_rad Gets or sets the shift angle in radians. This angle represents the angular offset of the flute from its base position. public double ShiftAngle_rad { get; set; } Property Value double ShiftedBottomContour Gets the shifted bottom contour of the flute. This is the bottom profile after applying the shift angle transformation. public ShiftedWorkingContour ShiftedBottomContour { get; } Property Value ShiftedWorkingContour ShiftedSideContour Gets the shifted side contour of the flute. This is the side profile after applying the shift angle transformation. public ShiftedWorkingContour ShiftedSideContour { get; } Property Value ShiftedWorkingContour XName Gets the XML name for serialization public static string XName { get; } Property Value string Methods ClearCache() Clears any cached data in the flute contour public void ClearCache() Dispose() Releases all resources used by the FluteContour public void Dispose() Dispose(bool) Releases the unmanaged resources used by the FluteContour and optionally releases the managed resources protected virtual void Dispose(bool disposing) Parameters disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources Duplicate(IGetZrList) Creates a duplicate of this flute contour public FluteContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The host containing Z-R list information Returns FluteContour A new instance of FluteContour with the same properties ExpandToBox3d(Box3d) Expands the given bounding box to include this flute contour public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand 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. UpdateByContent() Updates the internal state based on the current content public void UpdateByContent()" + "summary": "Class FluteContour Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a flute contour for milling tools. public class FluteContour : IMakeXmlSource, IDisposable, IClearCache Inheritance object FluteContour Implements IMakeXmlSource IDisposable IClearCache 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FluteContour() Initializes a new instance of the FluteContour class public FluteContour() FluteContour(FluteContour, double) Initializes a new instance of the FluteContour class with a source contour and shift angle public FluteContour(FluteContour src, double shiftAngle_rad) Parameters src FluteContour The source flute contour to copy from shiftAngle_rad double The shift angle in radians FluteContour(XElement, string, IProgress, object[]) Initializes a new instance of the FluteContour class from XML data public FluteContour(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The source XML element baseDirectory string The base directory for resolving relative paths progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional resources for initialization Properties BaseBottomContour Gets or sets the base bottom contour of the flute. This represents the original bottom profile before any transformations. public IWorkingContour BaseBottomContour { get; set; } Property Value IWorkingContour BaseSideContour Gets or sets the base side contour of the flute. This represents the original side profile before any transformations. public IWorkingContour BaseSideContour { get; set; } Property Value IWorkingContour SetupAngle_deg Gets or sets the setup angle in degrees. This is a convenience property that converts ShiftAngle_rad to degrees. public double SetupAngle_deg { get; set; } Property Value double ShiftAngle_rad Gets or sets the shift angle in radians. This angle represents the angular offset of the flute from its base position. public double ShiftAngle_rad { get; set; } Property Value double ShiftedBottomContour Gets the shifted bottom contour of the flute. This is the bottom profile after applying the shift angle transformation. public ShiftedWorkingContour ShiftedBottomContour { get; } Property Value ShiftedWorkingContour ShiftedSideContour Gets the shifted side contour of the flute. This is the side profile after applying the shift angle transformation. public ShiftedWorkingContour ShiftedSideContour { get; } Property Value ShiftedWorkingContour XName Gets the XML name for serialization public static string XName { get; } Property Value string Methods ClearCache() Clears any cached data in the flute contour public void ClearCache() Dispose() Releases all resources used by the FluteContour public void Dispose() Dispose(bool) Releases the unmanaged resources used by the FluteContour and optionally releases the managed resources protected virtual void Dispose(bool disposing) Parameters disposing bool true to release both managed and unmanaged resources; false to release only unmanaged resources Duplicate(IGetZrList) Creates a duplicate of this flute contour public FluteContour Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The host containing Z-R list information Returns FluteContour A new instance of FluteContour with the same properties ExpandToBox3d(Box3d) Expands the given bounding box to include this flute contour public void ExpandToBox3d(Box3d dst) Parameters dst Box3d The bounding box to expand 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. UpdateByContent() Updates the internal state based on the current content public void UpdateByContent()" }, "api/Hi.Milling.FluteContours.FluteContourUtil.html": { "href": "api/Hi.Milling.FluteContours.FluteContourUtil.html", @@ -2692,7 +2707,7 @@ "api/Hi.Milling.FluteContours.FreeContourTray.html": { "href": "api/Hi.Milling.FluteContours.FreeContourTray.html", "title": "Class FreeContourTray | HiAPI-C# 2025", - "summary": "Class FreeContourTray Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a container for multiple flute contours with free arrangement. public class FreeContourTray : IContourTray, IMakeXmlSource, IExpandToBox3d, IUpdateByContent, IClearCache, IGetFluteNum Inheritance object FreeContourTray Implements IContourTray IMakeXmlSource IExpandToBox3d IUpdateByContent IClearCache IGetFluteNum 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks This class provides a flexible way to manage multiple flute contours: Supports XML serialization for data persistence Allows arbitrary arrangement of flute contours Implements IContourTray for standard contour tray functionality Constructors FreeContourTray() Initializes a new instance of the FreeContourTray class public FreeContourTray() FreeContourTray(XElement, string, IProgress, object[]) Initializes a new instance of the FreeContourTray class from XML data public FreeContourTray(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The source XML element containing the contour tray data baseDirectory string The base directory for resolving relative paths progress IProgress res object[] Additional resources for initialization Properties ContourList Gets or sets the list of flute contours in this tray public List ContourList { get; set; } Property Value List XName Gets the XML name for serialization public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this contour tray public IContourTray Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The host containing Z-R list information Returns IContourTray A new instance of FreeContourTray with the same properties ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetFluteContourList() Gets the list of flute contours contained in this tray. public List GetFluteContourList() Returns List A list of flute contours. GetFluteNum() Gets the number of flutes in the contour tray. public int GetFluteNum() Returns int 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. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" + "summary": "Class FreeContourTray Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a container for multiple flute contours with free arrangement. public class FreeContourTray : IContourTray, IMakeXmlSource, IExpandToBox3d, IUpdateByContent, IClearCache, IGetFluteNum Inheritance object FreeContourTray Implements IContourTray IMakeXmlSource IExpandToBox3d IUpdateByContent IClearCache IGetFluteNum 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks This class provides a flexible way to manage multiple flute contours: Supports XML serialization for data persistence Allows arbitrary arrangement of flute contours Implements IContourTray for standard contour tray functionality Constructors FreeContourTray() Initializes a new instance of the FreeContourTray class public FreeContourTray() FreeContourTray(XElement, string, IProgress, object[]) Initializes a new instance of the FreeContourTray class from XML data public FreeContourTray(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement The source XML element containing the contour tray data baseDirectory string The base directory for resolving relative paths progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional resources for initialization Properties ContourList Gets or sets the list of flute contours in this tray public List ContourList { get; set; } Property Value List XName Gets the XML name for serialization public static string XName { get; } Property Value string XmlSourceFile public string XmlSourceFile { get; set; } Property Value string Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this contour tray public IContourTray Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The host containing Z-R list information Returns IContourTray A new instance of FreeContourTray with the same properties ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetFluteContourList() Gets the list of flute contours contained in this tray. public List GetFluteContourList() Returns List A list of flute contours. GetFluteNum() Gets the number of flutes in the contour tray. public int GetFluteNum() Returns int 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. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" }, "api/Hi.Milling.FluteContours.FreeformSideContour.html": { "href": "api/Hi.Milling.FluteContours.FreeformSideContour.html", @@ -2752,7 +2767,7 @@ "api/Hi.Milling.FluteContours.UniformContourTray.html": { "href": "api/Hi.Milling.FluteContours.UniformContourTray.html", "title": "Class UniformContourTray | HiAPI-C# 2025", - "summary": "Class UniformContourTray Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a uniform contour tray for milling tool flutes. public class UniformContourTray : IContourTray, IMakeXmlSource, IExpandToBox3d, IGetFluteNum, IUpdateByContent, IClearCache Inheritance object UniformContourTray Implements IContourTray IMakeXmlSource IExpandToBox3d IGetFluteNum IUpdateByContent IClearCache 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors UniformContourTray() Initializes a new instance of the UniformContourTray class. public UniformContourTray() UniformContourTray(XElement, string, IProgress, object[]) Ctor. public UniformContourTray(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths progress IProgress res object[] Additional optional resources Properties BaselineContourShiftAngle_deg Gets or sets the baseline contour shift angle in degrees. public double BaselineContourShiftAngle_deg { get; set; } Property Value double BaselineOneContour Gets or sets the baseline contour. public FluteContour BaselineOneContour { get; set; } Property Value FluteContour TrackNum Gets or sets the number of tracks in the contour tray. public int TrackNum { get; set; } Property Value int XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this contour tray with the specified ZR list host. public IContourTray Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The ZR list host to use for the duplicate Returns IContourTray A new contour tray instance ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetFluteContourList() Gets the list of flute contours contained in this tray. public List GetFluteContourList() Returns List A list of flute contours. GetFluteNum() Gets the number of flutes. public int GetFluteNum() Returns int The number of flutes. 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. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" + "summary": "Class UniformContourTray Namespace Hi.Milling.FluteContours Assembly HiMech.dll Represents a uniform contour tray for milling tool flutes. public class UniformContourTray : IContourTray, IMakeXmlSource, IExpandToBox3d, IGetFluteNum, IUpdateByContent, IClearCache Inheritance object UniformContourTray Implements IContourTray IMakeXmlSource IExpandToBox3d IGetFluteNum IUpdateByContent IClearCache 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors UniformContourTray() Initializes a new instance of the UniformContourTray class. public UniformContourTray() UniformContourTray(XElement, string, IProgress, object[]) Ctor. public UniformContourTray(XElement src, string baseDirectory, IProgress progress, object[] res) Parameters src XElement XML baseDirectory string Base directory path for resolving relative paths progress IProgress Progress reporter for diagnostic messages emitted during construction. res object[] Additional optional resources Properties BaselineContourShiftAngle_deg Gets or sets the baseline contour shift angle in degrees. public double BaselineContourShiftAngle_deg { get; set; } Property Value double BaselineOneContour Gets or sets the baseline contour. public FluteContour BaselineOneContour { get; set; } Property Value FluteContour TrackNum Gets or sets the number of tracks in the contour tray. public int TrackNum { get; set; } Property Value int XName Name for XML IO. public static string XName { get; } Property Value string Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Duplicate(IGetZrList) Creates a duplicate of this contour tray with the specified ZR list host. public IContourTray Duplicate(IGetZrList zrListHost) Parameters zrListHost IGetZrList The ZR list host to use for the duplicate Returns IContourTray A new contour tray instance ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetFluteContourList() Gets the list of flute contours contained in this tray. public List GetFluteContourList() Returns List A list of flute contours. GetFluteNum() Gets the number of flutes. public int GetFluteNum() Returns int The number of flutes. 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. UpdateByContent() Updates the object based on its current content. public void UpdateByContent()" }, "api/Hi.Milling.FluteContours.html": { "href": "api/Hi.Milling.FluteContours.html", @@ -2797,7 +2812,7 @@ "api/Hi.Milling.MillingTools.MillingTool.html": { "href": "api/Hi.Milling.MillingTools.MillingTool.html", "title": "Class MillingTool | HiAPI-C# 2025", - "summary": "Class MillingTool Namespace Hi.Milling.MillingTools Assembly HiMech.dll Represents a central stick milling tool that combines a holder and a cutter. public class MillingTool : IMachiningTool, IDisplayee, IExpandToBox3d, ITopo, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchoredDisplayeeList, IGetFletchBuckle, IMakeXmlSource, IAbstractNote, IDuplicate, IClearCache, IGetFluteNum Inheritance object MillingTool Implements IMachiningTool IDisplayee IExpandToBox3d ITopo IGetAsmb IGetAnchor IGetTopoIndex IGetAnchoredDisplayeeList IGetFletchBuckle IMakeXmlSource IAbstractNote IDuplicate IClearCache IGetFluteNum Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) MillingToolUtil.GetFullH(IMachiningTool) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) 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 MillingTool() Ctor. public MillingTool() MillingTool(XElement, string, string, IProgress) Initializes a new instance of the MillingTool class. public MillingTool(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing the tool configuration. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Properties AbstractNote Gets an abstract note describing the tool's dimensions and cutter. public string AbstractNote { get; } Property Value string Asmb Gets the assembly containing the tool components. public Asmb Asmb { get; } Property Value Asmb Cutter Gets the cutting tool. public ICutter Cutter { get; set; } Property Value ICutter CutterFile Gets or sets the file path of the cutter. public string CutterFile { get; set; } Property Value string ExposedCutterBendingPara_umdN Gets or sets the parameter for exposed cutter bending in micrometers per Newton. public double ExposedCutterBendingPara_umdN { get; } Property Value double ExposedCutterHeight_mm Gets or sets the exposed cutter height in millimeters. public double ExposedCutterHeight_mm { get; set; } Property Value double ExposedCutterZDeflectionPara_umdN Gets or sets the parameter for exposed cutter Z-axis deflection in micrometers per Newton. public double ExposedCutterZDeflectionPara_umdN { get; } Property Value double Holder Gets or sets the tool holder. public IHolder Holder { get; set; } Property Value IHolder HolderFile Gets or sets the holder file path. public string HolderFile { get; set; } Property Value string Note Gets or sets a note for this machining tool. public string Note { get; set; } Property Value string ObservationAnchor Gets the tool anchor reference point. public Anchor ObservationAnchor { get; } Property Value Anchor ObservationAnchorReference Gets the tool observation anchor reference point. public MillingToolAnchorReference ObservationAnchorReference { get; set; } Property Value MillingToolAnchorReference ObservationHeightFromToolTip Gets the tool observation point relative to the reference. public double ObservationHeightFromToolTip { get; } Property Value double ObservationRingRadius_mm Obsoleted. Gets the tool observation reference point. public double ObservationRingRadius_mm { get; set; } Property Value double PreservedDistanceBetweenFluteAndSpindleNose_mm Gets or sets the preserved distance between flute and clamp in millimeters. public double PreservedDistanceBetweenFluteAndSpindleNose_mm { get; set; } Property Value double RelativeHeightFromObservationAnchor_mm Gets the tool observation point relative to the reference. public double RelativeHeightFromObservationAnchor_mm { get; set; } Property Value double SpindleBuckle Gets the motor-side buckle. public Anchor SpindleBuckle { get; } Property Value Anchor SpindleBuckleToToolTipLength Height For NC Compensation table and step number computation. public double SpindleBuckleToToolTipLength { get; } Property Value double ToolTip Gets the tool tip anchor point from the cutter. public Anchor ToolTip { get; } Property Value Anchor XName Initializes a new instance of the StickMachiningTool class from XML data. public static string XName { get; } Property Value string Methods AlignAnchorByExposedCutterHeight() Aligns the anchor by the exposed cutter height. public void AlignAnchorByExposedCutterHeight() ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box Remarks For display GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetFluteNum() Gets the number of flutes in the contour tray. public int GetFluteNum() Returns int 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." + "summary": "Class MillingTool Namespace Hi.Milling.MillingTools Assembly HiMech.dll Represents a central stick milling tool that combines a holder and a cutter. public class MillingTool : IMachiningTool, IDisplayee, IExpandToBox3d, ITopo, IGetAsmb, IGetAnchor, IGetTopoIndex, IGetAnchoredDisplayeeList, IGetFletchBuckle, IMakeXmlSource, IAbstractNote, IDuplicate, IClearCache, IGetFluteNum Inheritance object MillingTool Implements IMachiningTool IDisplayee IExpandToBox3d ITopo IGetAsmb IGetAnchor IGetTopoIndex IGetAnchoredDisplayeeList IGetFletchBuckle IMakeXmlSource IAbstractNote IDuplicate IClearCache IGetFluteNum Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) MillingToolUtil.GetFullH(IMachiningTool) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) 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 MillingTool() Ctor. public MillingTool() MillingTool(XElement, string, string, IProgress) Initializes a new instance of the MillingTool class. public MillingTool(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing the tool configuration. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Progress reporter for diagnostic messages emitted during construction. Properties AbstractNote Gets an abstract note describing the tool's dimensions and cutter. public string AbstractNote { get; } Property Value string Asmb Gets the assembly containing the tool components. public Asmb Asmb { get; } Property Value Asmb Cutter Gets the cutting tool. public ICutter Cutter { get; set; } Property Value ICutter CutterFile Gets or sets the file path of the cutter. public string CutterFile { get; set; } Property Value string ExposedCutterBendingPara_umdN Gets or sets the parameter for exposed cutter bending in micrometers per Newton. public double ExposedCutterBendingPara_umdN { get; } Property Value double ExposedCutterHeight_mm Gets or sets the exposed cutter height in millimeters. public double ExposedCutterHeight_mm { get; set; } Property Value double ExposedCutterZDeflectionPara_umdN Gets or sets the parameter for exposed cutter Z-axis deflection in micrometers per Newton. public double ExposedCutterZDeflectionPara_umdN { get; } Property Value double Holder Gets or sets the tool holder. public IHolder Holder { get; set; } Property Value IHolder HolderFile Gets or sets the holder file path. public string HolderFile { get; set; } Property Value string Note Gets or sets a note for this machining tool. public string Note { get; set; } Property Value string ObservationAnchor Gets the tool anchor reference point. public Anchor ObservationAnchor { get; } Property Value Anchor ObservationAnchorReference Gets the tool observation anchor reference point. public MillingToolAnchorReference ObservationAnchorReference { get; set; } Property Value MillingToolAnchorReference ObservationHeightFromToolTip Gets the tool observation point relative to the reference. public double ObservationHeightFromToolTip { get; } Property Value double ObservationRingRadius_mm Obsoleted. Gets the tool observation reference point. public double ObservationRingRadius_mm { get; set; } Property Value double PreservedDistanceBetweenFluteAndSpindleNose_mm Gets or sets the preserved distance between flute and clamp in millimeters. public double PreservedDistanceBetweenFluteAndSpindleNose_mm { get; set; } Property Value double RelativeHeightFromObservationAnchor_mm Gets the tool observation point relative to the reference. public double RelativeHeightFromObservationAnchor_mm { get; set; } Property Value double SpindleBuckle Gets the motor-side buckle. public Anchor SpindleBuckle { get; } Property Value Anchor SpindleBuckleToToolTipLength Height For NC Compensation table and step number computation. public double SpindleBuckleToToolTipLength { get; } Property Value double ToolTip Gets the tool tip anchor point from the cutter. public Anchor ToolTip { get; } Property Value Anchor XName Initializes a new instance of the StickMachiningTool class from XML data. public static string XName { get; } Property Value string Methods AlignAnchorByExposedCutterHeight() Aligns the anchor by the exposed cutter height. public void AlignAnchorByExposedCutterHeight() ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box Remarks For display GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetFluteNum() Gets the number of flutes in the contour tray. public int GetFluteNum() Returns int 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." }, "api/Hi.Milling.MillingTools.MillingToolAnchorReference.html": { "href": "api/Hi.Milling.MillingTools.MillingToolAnchorReference.html", @@ -3262,7 +3277,7 @@ "api/Hi.NcMech.Fixtures.Fixture.html": { "href": "api/Hi.NcMech.Fixtures.Fixture.html", "title": "Class Fixture | HiAPI-C# 2025", - "summary": "Class Fixture Namespace Hi.NcMech.Fixtures Assembly HiMech.dll Represents a fixture used to hold workpieces during machining operations. public class Fixture : IGetSolid, IMakeXmlSource, IDisplayee, IExpandToBox3d, IGetAnchoredDisplayeeList, IGetAsmb, IGetAnchor, IGetTopoIndex, IDisposable, IAnchoredCollidableLeaf, IAnchoredCollidableNode, IAnchoredCollidableBased, ICollidable Inheritance object Fixture Implements IGetSolid IMakeXmlSource IDisplayee IExpandToBox3d IGetAnchoredDisplayeeList IGetAsmb IGetAnchor IGetTopoIndex IDisposable IAnchoredCollidableLeaf IAnchoredCollidableNode IAnchoredCollidableBased ICollidable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) 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 Fixture() Initializes a new instance of the Fixture class. public Fixture() Fixture(XElement, string, string, IProgress) Initializes a new instance of the Fixture class from XML. public Fixture(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing fixture data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Fields XName Name for XML IO. public static string XName Field Value string Properties Asmb Gets the assembly that contains the fixture components. public Asmb Asmb { get; } Property Value Asmb CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag Geom Geometry. Delegate by Solid.Geom. public IGetStl Geom { get; set; } Property Value IGetStl GeomAnchor Anchor that represents the geometry origin of the fixture. public Anchor GeomAnchor { get; } Property Value Anchor GeomToTableBranch Branch that transforms from geometry origin to table origin. public Branch GeomToTableBranch { get; } Property Value Branch GeomToTableTransformer Transformer from Geometry origin to table (machine tool side) origin. public ITransformer GeomToTableTransformer { get; set; } Property Value ITransformer GeomToWorkpieceBranch Branch that transforms from geometry origin to workpiece origin. public Branch GeomToWorkpieceBranch { get; } Property Value Branch GeomToWorkpieceTransformer Transformer from Geometry origin to workpiece origin. public ITransformer GeomToWorkpieceTransformer { get; set; } Property Value ITransformer Solid Gets the solid representation of the fixture. public Solid Solid { get; } Property Value Solid TableBuckle Table buckle. Root. Solid anchor. public Anchor TableBuckle { get; } Property Value Anchor ThemeColor Default theme color used when rendering the fixture. public static Vec3d ThemeColor { get; } Property Value Vec3d WorkpieceBuckle Gets the workpiece buckle anchor point. public Anchor WorkpieceBuckle { get; } Property Value Anchor Methods ClearGeomCache() Update cache of Geom. The method is used after inner content of Geom is altered. public void ClearGeomCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCollidableAnchor() Gets the anchor associated with this collidable leaf. public Anchor GetCollidableAnchor() Returns Anchor The anchor for this collidable leaf. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. 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. SetWorkpieceTransformationToGeomTopCenter() Sets the workpiece transformation to position it at the top center of the fixture. public void SetWorkpieceTransformationToGeomTopCenter()" + "summary": "Class Fixture Namespace Hi.NcMech.Fixtures Assembly HiMech.dll Represents a fixture used to hold workpieces during machining operations. public class Fixture : IGetSolid, IMakeXmlSource, IDisplayee, IExpandToBox3d, IGetAnchoredDisplayeeList, IGetAsmb, IGetAnchor, IGetTopoIndex, IDisposable, IAnchoredCollidableLeaf, IAnchoredCollidableNode, IAnchoredCollidableBased, ICollidable Inheritance object Fixture Implements IGetSolid IMakeXmlSource IDisplayee IExpandToBox3d IGetAnchoredDisplayeeList IGetAsmb IGetAnchor IGetTopoIndex IDisposable IAnchoredCollidableLeaf IAnchoredCollidableNode IAnchoredCollidableBased ICollidable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) 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 Fixture() Initializes a new instance of the Fixture class. public Fixture() Fixture(XElement, string, string, IProgress) Initializes a new instance of the Fixture class from XML. public Fixture(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing fixture data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Progress reporter for diagnostic messages emitted during construction. Fields XName Name for XML IO. public static string XName Field Value string Properties Asmb Gets the assembly that contains the fixture components. public Asmb Asmb { get; } Property Value Asmb CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag Geom Geometry. Delegate by Solid.Geom. public IGetStl Geom { get; set; } Property Value IGetStl GeomAnchor Anchor that represents the geometry origin of the fixture. public Anchor GeomAnchor { get; } Property Value Anchor GeomToTableBranch Branch that transforms from geometry origin to table origin. public Branch GeomToTableBranch { get; } Property Value Branch GeomToTableTransformer Transformer from Geometry origin to table (machine tool side) origin. public ITransformer GeomToTableTransformer { get; set; } Property Value ITransformer GeomToWorkpieceBranch Branch that transforms from geometry origin to workpiece origin. public Branch GeomToWorkpieceBranch { get; } Property Value Branch GeomToWorkpieceTransformer Transformer from Geometry origin to workpiece origin. public ITransformer GeomToWorkpieceTransformer { get; set; } Property Value ITransformer Solid Gets the solid representation of the fixture. public Solid Solid { get; } Property Value Solid TableBuckle Table buckle. Root. Solid anchor. public Anchor TableBuckle { get; } Property Value Anchor ThemeColor Default theme color used when rendering the fixture. public static Vec3d ThemeColor { get; } Property Value Vec3d WorkpieceBuckle Gets the workpiece buckle anchor point. public Anchor WorkpieceBuckle { get; } Property Value Anchor Methods ClearGeomCache() Update cache of Geom. The method is used after inner content of Geom is altered. public void ClearGeomCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCollidableAnchor() Gets the anchor associated with this collidable leaf. public Anchor GetCollidableAnchor() Returns Anchor The anchor for this collidable leaf. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. 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. SetWorkpieceTransformationToGeomTopCenter() Sets the workpiece transformation to position it at the top center of the fixture. public void SetWorkpieceTransformationToGeomTopCenter()" }, "api/Hi.NcMech.Fixtures.FixtureEditorDisplayee.html": { "href": "api/Hi.NcMech.Fixtures.FixtureEditorDisplayee.html", @@ -3282,12 +3297,12 @@ "api/Hi.NcMech.Holders.CylindroidHolder.html": { "href": "api/Hi.NcMech.Holders.CylindroidHolder.html", "title": "Class CylindroidHolder | HiAPI-C# 2025", - "summary": "Class CylindroidHolder Namespace Hi.NcMech.Holders Assembly HiMech.dll Represents a cylindrical tool holder for machining operations. public class CylindroidHolder : IHolder, ITopo, IGetAsmb, IGetAnchoredDisplayeeList, IAnchoredDisplayee, IDisplayee, IExpandToBox3d, IMakeXmlSource, IAbstractNote, IGetFletchBuckle, IDuplicate, INameNote, IAnchoredCollidabled, IGetCollidable, IGetAnchor, IGetTopoIndex, IGetSolid, IDisposable, IAnchoredCollidableLeaf, IAnchoredCollidableNode, IAnchoredCollidableBased, ICollidable, IClearCache Inheritance object CylindroidHolder Implements IHolder ITopo IGetAsmb IGetAnchoredDisplayeeList IAnchoredDisplayee IDisplayee IExpandToBox3d IMakeXmlSource IAbstractNote IGetFletchBuckle IDuplicate INameNote IAnchoredCollidabled IGetCollidable IGetAnchor IGetTopoIndex IGetSolid IDisposable IAnchoredCollidableLeaf IAnchoredCollidableNode IAnchoredCollidableBased ICollidable IClearCache Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) 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 CylindroidHolder() Ctor. public CylindroidHolder() CylindroidHolder(Cylindroid) Ctor. public CylindroidHolder(Cylindroid cylindroid) Parameters cylindroid Cylindroid The cylindroid geometry for this holder. CylindroidHolder(XElement, string, string, IProgress) Initializes a new instance of the CylindroidHolder class from XML. public CylindroidHolder(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing holder data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Fields XName XML Name. public static string XName Field Value string Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Branch Gets the branch connecting the fletch buckle to the tail buckle. public Branch Branch { get; } Property Value Branch CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag CutterBuckle Gets the cutter buckle anchor. public Anchor CutterBuckle { get; } Property Value Anchor Cylindroid Gets or sets the cylindroid geometry that defines this holder. public Cylindroid Cylindroid { get; set; } Property Value Cylindroid GeomAnchor Equivalent of CutterBuckle. public Anchor GeomAnchor { get; } Property Value Anchor Name Gets or sets the name of the object. public string Name { get; set; } Property Value string Note Gets or sets the descriptive note for the object. public string Note { get; set; } Property Value string PolarResolution2d Gets or sets the polar resolution used for STL generation. public PolarResolution2d PolarResolution2d { get; set; } Property Value PolarResolution2d SpindleBuckle Gets the spindle buckle anchor. public Anchor SpindleBuckle { get; } Property Value Anchor Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCollidable() Get ICollidable. public ICollidable GetCollidable() Returns ICollidable The collidable object. GetCollidableAnchor() Gets the anchor associated with the collidable object. public Anchor GetCollidableAnchor() Returns Anchor The Anchor instance. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. GetTailBuckle() Gets the cutter buckle anchor, generally located on the free-end side. public Anchor GetTailBuckle() Returns Anchor 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. UpdateByCylindroid() Update Branch By Cylindroid. Call the function if the Cylindroid content changed. public void UpdateByCylindroid()" + "summary": "Class CylindroidHolder Namespace Hi.NcMech.Holders Assembly HiMech.dll Represents a cylindrical tool holder for machining operations. public class CylindroidHolder : IHolder, ITopo, IGetAsmb, IGetAnchoredDisplayeeList, IAnchoredDisplayee, IDisplayee, IExpandToBox3d, IMakeXmlSource, IAbstractNote, IGetFletchBuckle, IDuplicate, INameNote, IAnchoredCollidabled, IGetCollidable, IGetAnchor, IGetTopoIndex, IGetSolid, IDisposable, IAnchoredCollidableLeaf, IAnchoredCollidableNode, IAnchoredCollidableBased, ICollidable, IClearCache Inheritance object CylindroidHolder Implements IHolder ITopo IGetAsmb IGetAnchoredDisplayeeList IAnchoredDisplayee IDisplayee IExpandToBox3d IMakeXmlSource IAbstractNote IGetFletchBuckle IDuplicate INameNote IAnchoredCollidabled IGetCollidable IGetAnchor IGetTopoIndex IGetSolid IDisposable IAnchoredCollidableLeaf IAnchoredCollidableNode IAnchoredCollidableBased ICollidable IClearCache Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) 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 CylindroidHolder() Ctor. public CylindroidHolder() CylindroidHolder(Cylindroid) Ctor. public CylindroidHolder(Cylindroid cylindroid) Parameters cylindroid Cylindroid The cylindroid geometry for this holder. CylindroidHolder(XElement, string, string, IProgress) Initializes a new instance of the CylindroidHolder class from XML. public CylindroidHolder(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing holder data. baseDirectory string The base directory for resolving relative paths. relFile string The relative file path. progress IProgress Progress reporter for diagnostic messages emitted during construction. Fields XName XML Name. public static string XName Field Value string Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string Branch Gets the branch connecting the fletch buckle to the tail buckle. public Branch Branch { get; } Property Value Branch CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag CutterBuckle Gets the cutter buckle anchor. public Anchor CutterBuckle { get; } Property Value Anchor Cylindroid Gets or sets the cylindroid geometry that defines this holder. public Cylindroid Cylindroid { get; set; } Property Value Cylindroid GeomAnchor Equivalent of CutterBuckle. public Anchor GeomAnchor { get; } Property Value Anchor Name Gets or sets the name of the object. public string Name { get; set; } Property Value string Note Gets or sets the descriptive note for the object. public string Note { get; set; } Property Value string PolarResolution2d Gets or sets the polar resolution used for STL generation. public PolarResolution2d PolarResolution2d { get; set; } Property Value PolarResolution2d SpindleBuckle Gets the spindle buckle anchor. public Anchor SpindleBuckle { get; } Property Value Anchor Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCollidable() Get ICollidable. public ICollidable GetCollidable() Returns ICollidable The collidable object. GetCollidableAnchor() Gets the anchor associated with the collidable object. public Anchor GetCollidableAnchor() Returns Anchor The Anchor instance. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. GetTailBuckle() Gets the cutter buckle anchor, generally located on the free-end side. public Anchor GetTailBuckle() Returns Anchor 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. UpdateByCylindroid() Update Branch By Cylindroid. Call the function if the Cylindroid content changed. public void UpdateByCylindroid()" }, "api/Hi.NcMech.Holders.FreeformHolder.html": { "href": "api/Hi.NcMech.Holders.FreeformHolder.html", "title": "Class FreeformHolder | HiAPI-C# 2025", - "summary": "Class FreeformHolder Namespace Hi.NcMech.Holders Assembly HiMech.dll Represents a freeform tool holder with customizable geometry. public class FreeformHolder : IHolder, ITopo, IGetAsmb, IGetAnchoredDisplayeeList, IAnchoredDisplayee, IDisplayee, IExpandToBox3d, IMakeXmlSource, IAbstractNote, IGetFletchBuckle, IDuplicate, INameNote, IAnchoredCollidabled, IGetCollidable, IGetAnchor, IGetTopoIndex, IGetSolid, IDisposable, IAnchoredCollidableLeaf, IAnchoredCollidableNode, IAnchoredCollidableBased, ICollidable, IClearCache Inheritance object FreeformHolder Implements IHolder ITopo IGetAsmb IGetAnchoredDisplayeeList IAnchoredDisplayee IDisplayee IExpandToBox3d IMakeXmlSource IAbstractNote IGetFletchBuckle IDuplicate INameNote IAnchoredCollidabled IGetCollidable IGetAnchor IGetTopoIndex IGetSolid IDisposable IAnchoredCollidableLeaf IAnchoredCollidableNode IAnchoredCollidableBased ICollidable IClearCache Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) 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 FreeformHolder() Ctor. public FreeformHolder() FreeformHolder(IStlSource) Initializes a new instance of the FreeformHolder class from STL geometry. public FreeformHolder(IStlSource geom) Parameters geom IStlSource The STL geometry provider. FreeformHolder(XElement, string, string, IProgress) Initializes a new instance of the FreeformHolder class from XML data. public FreeformHolder(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing holder data baseDirectory string Base directory path for resolving relative paths relFile string Relative file path progress IProgress Fields XName XML Name. public static string XName Field Value string Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag CutterBuckle Gets the tail buckle (tool buckle) anchor point public Anchor CutterBuckle { get; } Property Value Anchor Geom Gets the transformation geometry. Internal Use Only. public IStlSource Geom { get; set; } Property Value IStlSource Remarks Call UpdateByGeom() to keep state of Hi.NcMech.Holders.FreeformHolder.Solid if content modified. GeomAnchor Gets the geometry anchor point public Anchor GeomAnchor { get; } Property Value Anchor GeomAnchorToSpindleBuckleBranch Gets the branch from GeomAnchor to SpindleBuckle. public Branch GeomAnchorToSpindleBuckleBranch { get; } Property Value Branch GeomToCutterBranch Gets the branch from GeomAnchor to CutterBuckle. public Branch GeomToCutterBranch { get; } Property Value Branch GeomToCutterTransformer Gets or sets the transformer from geometry to tail (Cutter). public ITransformer GeomToCutterTransformer { get; set; } Property Value ITransformer GeomToSpindleTransformer Gets or sets the transformer from geometry to base (Spindle) public ITransformer GeomToSpindleTransformer { get; set; } Property Value ITransformer Name Gets or sets the name of the object. public string Name { get; set; } Property Value string Note Gets or sets the descriptive note for the object. public string Note { get; set; } Property Value string PolarResolution2d Gets or sets the polar resolution 2D settings. public PolarResolution2d PolarResolution2d { get; set; } Property Value PolarResolution2d SpindleBuckle Gets the base buckle (spindle buckle) anchor point public Anchor SpindleBuckle { get; } Property Value Anchor Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCollidable() Get ICollidable. public ICollidable GetCollidable() Returns ICollidable The collidable object. GetCollidableAnchor() Gets the anchor associated with the collidable object. public Anchor GetCollidableAnchor() Returns Anchor The Anchor instance. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. GetTailBuckle() Gets the cutter buckle anchor, generally located on the free-end side. public Anchor GetTailBuckle() Returns Anchor 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. UpdateByGeom() Call the function if the Geom content changed. public void UpdateByGeom()" + "summary": "Class FreeformHolder Namespace Hi.NcMech.Holders Assembly HiMech.dll Represents a freeform tool holder with customizable geometry. public class FreeformHolder : IHolder, ITopo, IGetAsmb, IGetAnchoredDisplayeeList, IAnchoredDisplayee, IDisplayee, IExpandToBox3d, IMakeXmlSource, IAbstractNote, IGetFletchBuckle, IDuplicate, INameNote, IAnchoredCollidabled, IGetCollidable, IGetAnchor, IGetTopoIndex, IGetSolid, IDisposable, IAnchoredCollidableLeaf, IAnchoredCollidableNode, IAnchoredCollidableBased, ICollidable, IClearCache Inheritance object FreeformHolder Implements IHolder ITopo IGetAsmb IGetAnchoredDisplayeeList IAnchoredDisplayee IDisplayee IExpandToBox3d IMakeXmlSource IAbstractNote IGetFletchBuckle IDuplicate INameNote IAnchoredCollidabled IGetCollidable IGetAnchor IGetTopoIndex IGetSolid IDisposable IAnchoredCollidableLeaf IAnchoredCollidableNode IAnchoredCollidableBased ICollidable IClearCache Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods CollisionUtil.Detect(ICollidable, ICollidable, Mat4d, double, int) DispUtil.Display(IDisplayee, Bind, Mat4d) TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) TopoDisplayeeUtil.Display(ITopo, Bind) TopoDisplayeeUtil.ExpandToBox3d(ITopo, Box3d) 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 FreeformHolder() Ctor. public FreeformHolder() FreeformHolder(IStlSource) Initializes a new instance of the FreeformHolder class from STL geometry. public FreeformHolder(IStlSource geom) Parameters geom IStlSource The STL geometry provider. FreeformHolder(XElement, string, string, IProgress) Initializes a new instance of the FreeformHolder class from XML data. public FreeformHolder(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement The XML element containing holder data baseDirectory string Base directory path for resolving relative paths relFile string Relative file path progress IProgress Progress reporter for diagnostic messages emitted during construction. Fields XName XML Name. public static string XName Field Value string Properties AbstractNote Gets a descriptive note or abstract about the object. public string AbstractNote { get; } Property Value string CollidableName Gets the name of the collidable object. public string CollidableName { get; } Property Value string CollisionFlag Gets or sets the collision flag. public CollisionFlag CollisionFlag { get; set; } Property Value CollisionFlag CutterBuckle Gets the tail buckle (tool buckle) anchor point public Anchor CutterBuckle { get; } Property Value Anchor Geom Gets the transformation geometry. Internal Use Only. public IStlSource Geom { get; set; } Property Value IStlSource Remarks Call UpdateByGeom() to keep state of Hi.NcMech.Holders.FreeformHolder.Solid if content modified. GeomAnchor Gets the geometry anchor point public Anchor GeomAnchor { get; } Property Value Anchor GeomAnchorToSpindleBuckleBranch Gets the branch from GeomAnchor to SpindleBuckle. public Branch GeomAnchorToSpindleBuckleBranch { get; } Property Value Branch GeomToCutterBranch Gets the branch from GeomAnchor to CutterBuckle. public Branch GeomToCutterBranch { get; } Property Value Branch GeomToCutterTransformer Gets or sets the transformer from geometry to tail (Cutter). public ITransformer GeomToCutterTransformer { get; set; } Property Value ITransformer GeomToSpindleTransformer Gets or sets the transformer from geometry to base (Spindle) public ITransformer GeomToSpindleTransformer { get; set; } Property Value ITransformer Name Gets or sets the name of the object. public string Name { get; set; } Property Value string Note Gets or sets the descriptive note for the object. public string Note { get; set; } Property Value string PolarResolution2d Gets or sets the polar resolution 2D settings. public PolarResolution2d PolarResolution2d { get; set; } Property Value PolarResolution2d SpindleBuckle Gets the base buckle (spindle buckle) anchor point public Anchor SpindleBuckle { get; } Property Value Anchor Methods ClearCache() Clears any cached data held by the implementing object. public void ClearCache() Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool Duplicate(params object[]) Creates a deep copy of the object, excluding any source file references. public object Duplicate(params object[] res) Parameters res object[] Optional parameters that may be needed during the duplication process Returns object A new instance that is a deep copy of the original object ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetAnchoredCollidableNode() Gets the anchored collidable node associated with this object. public IAnchoredCollidableNode GetAnchoredCollidableNode() Returns IAnchoredCollidableNode The anchored collidable node. GetAnchoredDisplayeeList() Gets a list of anchored displayable objects. public List GetAnchoredDisplayeeList() Returns List A list of IAnchoredDisplayee objects GetAsmb() Gets the key asmb. public Asmb GetAsmb() Returns Asmb The key asmb. GetCollidable() Get ICollidable. public ICollidable GetCollidable() Returns ICollidable The collidable object. GetCollidableAnchor() Gets the anchor associated with the collidable object. public Anchor GetCollidableAnchor() Returns Anchor The Anchor instance. GetCollidee() Get ICollidee. public ICollidee GetCollidee() Returns ICollidee ICollidee GetFletchBuckle() Get fletch buckle anchor. the anchor that generally connect to fixed part such as ground and triggering(motor)-side. public Anchor GetFletchBuckle() Returns Anchor buckle anchor GetSolid() Gets the solid geometry object. public Solid GetSolid() Returns Solid The solid geometry object. GetTailBuckle() Gets the cutter buckle anchor, generally located on the free-end side. public Anchor GetTailBuckle() Returns Anchor 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. UpdateByGeom() Call the function if the Geom content changed. public void UpdateByGeom()" }, "api/Hi.NcMech.Holders.HolderEditorDisplayee.html": { "href": "api/Hi.NcMech.Holders.HolderEditorDisplayee.html", @@ -3377,7 +3392,7 @@ "api/Hi.NcMech.Workpieces.Workpiece.html": { "href": "api/Hi.NcMech.Workpieces.Workpiece.html", "title": "Class Workpiece | HiAPI-C# 2025", - "summary": "Class Workpiece Namespace Hi.NcMech.Workpieces Assembly HiMech.dll Workpiece configuration data model. public class Workpiece : IGetAnchor, IGetTopoIndex, IGetCuttingPara, IMakeXmlSource Inheritance object Workpiece Implements IGetAnchor IGetTopoIndex IGetCuttingPara IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) 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) Remarks Workpiece holds the persistent/serializable configuration. Runtime geometry, caching, diff calculation, defect scanning, display and collision are managed by WorkpieceService. Constructors Workpiece() Initializes a new instance of the Workpiece class. public Workpiece() Workpiece(XElement, string, string, IProgress) Initializes a new instance of the Workpiece class. public Workpiece(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML element source. baseDirectory string Base directory. relFile string Relative file path. progress IProgress Properties Asmb Asmb. public Asmb Asmb { get; } Property Value Asmb CollidableName Collidable name. public string CollidableName { get; } Property Value string CuttingPara Milling parameters. public ICuttingPara CuttingPara { get; set; } Property Value ICuttingPara CuttingParaFile File path for milling parameters. public string CuttingParaFile { get; set; } Property Value string FixtureBuckle Buckle anchor. public Anchor FixtureBuckle { get; } Property Value Anchor FixtureToProgramZeroMat4d Matrix transformation from fixture to program zero. public Mat4d FixtureToProgramZeroMat4d { get; } Property Value Mat4d GeomAnchor Anchor of workpiece geometry. public Anchor GeomAnchor { get; } Property Value Anchor IdealGeom Ideal geometry representation. public IGetStl IdealGeom { get; set; } Property Value IGetStl InitGeom Raw geometry for initiate. public IMakeXmlSource InitGeom { get; set; } Property Value IMakeXmlSource InitResolution Resolution for initialization. public double InitResolution { get; set; } Property Value double ProgramZeroAnchor Anchor of geometry zero and cutter location zero. public Anchor ProgramZeroAnchor { get; } Property Value Anchor WorkpieceGeomToFixtureBuckleBranch Branch connecting workpiece geometry to fixture buckle. public Branch WorkpieceGeomToFixtureBuckleBranch { get; } Property Value Branch WorkpieceGeomToFixtureBuckleTransformer Transformer connecting workpiece geometry to fixture buckle. public ITransformer WorkpieceGeomToFixtureBuckleTransformer { get; set; } Property Value ITransformer WorkpieceGeomToProgramZeroBranch Branch connecting workpiece geometry to program zero. public Branch WorkpieceGeomToProgramZeroBranch { get; } Property Value Branch WorkpieceGeomToProgramZeroTransformer Transformer connecting workpiece geometry to program zero. public ITransformer WorkpieceGeomToProgramZeroTransformer { get; set; } Property Value ITransformer WorkpieceMaterial Workpiece material. public WorkpieceMaterial WorkpieceMaterial { get; set; } Property Value WorkpieceMaterial WorkpieceMaterialFile File path for workpiece material. public string WorkpieceMaterialFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetCuttingPara() Get ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara ICuttingPara 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." + "summary": "Class Workpiece Namespace Hi.NcMech.Workpieces Assembly HiMech.dll Workpiece configuration data model. public class Workpiece : IGetAnchor, IGetTopoIndex, IGetCuttingPara, IMakeXmlSource Inheritance object Workpiece Implements IGetAnchor IGetTopoIndex IGetCuttingPara IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods TopoUtil.Display(IGetAnchor, Bind, Dictionary) TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary) 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) Remarks Workpiece holds the persistent/serializable configuration. Runtime geometry, caching, diff calculation, defect scanning, display and collision are managed by WorkpieceService. Constructors Workpiece() Initializes a new instance of the Workpiece class. public Workpiece() Workpiece(XElement, string, string, IProgress) Initializes a new instance of the Workpiece class. public Workpiece(XElement src, string baseDirectory, string relFile, IProgress progress) Parameters src XElement XML element source. baseDirectory string Base directory. relFile string Relative file path. progress IProgress Progress reporter for diagnostic messages emitted during construction. Properties Asmb Asmb. public Asmb Asmb { get; } Property Value Asmb CollidableName Collidable name. public string CollidableName { get; } Property Value string CuttingPara Milling parameters. public ICuttingPara CuttingPara { get; set; } Property Value ICuttingPara CuttingParaFile File path for milling parameters. public string CuttingParaFile { get; set; } Property Value string FixtureBuckle Buckle anchor. public Anchor FixtureBuckle { get; } Property Value Anchor FixtureToProgramZeroMat4d Matrix transformation from fixture to program zero. public Mat4d FixtureToProgramZeroMat4d { get; } Property Value Mat4d GeomAnchor Anchor of workpiece geometry. public Anchor GeomAnchor { get; } Property Value Anchor IdealGeom Ideal geometry representation. public IGetStl IdealGeom { get; set; } Property Value IGetStl InitGeom Raw geometry for initiate. public IMakeXmlSource InitGeom { get; set; } Property Value IMakeXmlSource InitResolution Resolution for initialization. public double InitResolution { get; set; } Property Value double ProgramZeroAnchor Anchor of geometry zero and cutter location zero. public Anchor ProgramZeroAnchor { get; } Property Value Anchor WorkpieceGeomToFixtureBuckleBranch Branch connecting workpiece geometry to fixture buckle. public Branch WorkpieceGeomToFixtureBuckleBranch { get; } Property Value Branch WorkpieceGeomToFixtureBuckleTransformer Transformer connecting workpiece geometry to fixture buckle. public ITransformer WorkpieceGeomToFixtureBuckleTransformer { get; set; } Property Value ITransformer WorkpieceGeomToProgramZeroBranch Branch connecting workpiece geometry to program zero. public Branch WorkpieceGeomToProgramZeroBranch { get; } Property Value Branch WorkpieceGeomToProgramZeroTransformer Transformer connecting workpiece geometry to program zero. public ITransformer WorkpieceGeomToProgramZeroTransformer { get; set; } Property Value ITransformer WorkpieceMaterial Workpiece material. public WorkpieceMaterial WorkpieceMaterial { get; set; } Property Value WorkpieceMaterial WorkpieceMaterialFile File path for workpiece material. public string WorkpieceMaterialFile { get; set; } Property Value string XName Name for XML IO. public static string XName { get; } Property Value string Methods GetAnchor() Get key anchor. (i.e. root anchor) public Anchor GetAnchor() Returns Anchor key anchor GetCuttingPara() Get ICuttingPara. public ICuttingPara GetCuttingPara() Returns ICuttingPara ICuttingPara 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." }, "api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html": { "href": "api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html", @@ -3512,7 +3527,7 @@ "api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html": { "href": "api/Hi.NcParsers.Dependencys.ControllerParameterTableBase.html", "title": "Class ControllerParameterTableBase | HiAPI-C# 2025", - "summary": "Class ControllerParameterTableBase Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Base class for brand-specific controller parameter tables. Provides shared data structures, XML IO, and IHomeMcConfig IMachineAxisConfig implementations. Subclasses define brand-specific parameter numbers, XML attribute names, and derived convenience properties. public abstract class ControllerParameterTableBase : IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig INcDependency IMakeXmlSource Derived FanucParameterTable HeidenhainParameterTable SiemensMachineDataTable SyntecParameterTable 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties AxisNames Gets the configured axis names in order. public IEnumerable AxisNames { get; } Property Value IEnumerable AxisParams Per-axis float parameters. Outer key = parameter number, inner key = axis name. public Dictionary> AxisParams { get; set; } Property Value Dictionary> AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected abstract int AxisTypeParamId { get; } Property Value int IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected abstract string IdAttributeName { get; } Property Value string IntAxisParams Per-axis integer parameters. Outer key = parameter number, inner key = axis name. public Dictionary> IntAxisParams { get; set; } Property Value Dictionary> RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected virtual int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected abstract int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected virtual int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected virtual int? StrokeLimitPosParamId { get; } Property Value int? SystemParams System-wide parameters. Key = parameter number. public Dictionary SystemParams { get; set; } Property Value Dictionary Methods AxisParam(int) public Dictionary AxisParam(int paramId) Parameters paramId int Returns Dictionary ConfigureRotaryAxis(string, double, double) Configures a rotary axis with home position and rapid rate. Sets axis type to Rotary, home position via SetHomePosition(string, double), and per-axis rapid rate (if RapidRateParamId is defined for this brand). Use RemoveAxis(string) to remove the axis entirely. public void ConfigureRotaryAxis(string axisName, double homePosition_deg = 0, double rapidRate_degdmin = 36000) Parameters axisName string Axis name (e.g., “A”, “B”, “C”). homePosition_deg double Home position in degrees (default 0). rapidRate_degdmin double Rapid traverse rate in deg/min (default 36000). GetHomePosition(string) Gets the home position for a specific axis. Returns null if the axis has no home position configured. public double? GetHomePosition(string axisName) Parameters axisName string Returns double? GetLinearAxisRapidRate_mmdmin(string) Gets rapid traverse feedrate for a linear axis in mm/min. Returns a default value if the axis is not configured. public double GetLinearAxisRapidRate_mmdmin(string axisName) Parameters axisName string Returns double GetNegativeLimit(string) Gets the negative stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. Returns null if not configured (no limit). public double? GetNegativeLimit(string axisName) Parameters axisName string Returns double? GetPositiveLimit(string) Gets the positive stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. Returns null if not configured (no limit). public double? GetPositiveLimit(string axisName) Parameters axisName string Returns double? GetRotaryAxisRapidRate_degdmin(string) Gets rapid traverse feedrate for a rotary axis in deg/min. Returns a default value if the axis is not configured. public double GetRotaryAxisRapidRate_degdmin(string axisName) Parameters axisName string Returns double IntAxisParam(int) public Dictionary IntAxisParam(int paramId) Parameters paramId int Returns Dictionary IsRotaryAxis(string) Returns true if the axis is rotary or spindle, false if linear. public bool IsRotaryAxis(string axisName) Parameters axisName string Returns bool MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public abstract 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. ReadXml(XElement) protected void ReadXml(XElement src) Parameters src XElement RemoveAxis(string) Removes an axis from the configuration. public void RemoveAxis(string axisName) Parameters axisName string SetAxis(string, AxisType) Adds or updates an axis with the specified type. public void SetAxis(string axisName, AxisType type) Parameters axisName string type AxisType SetHomePosition(string, double) Sets the home position for a specific axis. public void SetHomePosition(string axisName, double value) Parameters axisName string value double SetLinearAxisRapidRate_mmdmin(string, double) Sets rapid traverse feedrate for a linear axis in mm/min. public void SetLinearAxisRapidRate_mmdmin(string axisName, double value) Parameters axisName string value double SetNegativeLimit(string, double) Sets the negative stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. public void SetNegativeLimit(string axisName, double value) Parameters axisName string value double SetPositiveLimit(string, double) Sets the positive stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. public void SetPositiveLimit(string axisName, double value) Parameters axisName string value double SetRotaryAxisRapidRate_degdmin(string, double) Sets rapid traverse feedrate for a rotary axis in deg/min. public void SetRotaryAxisRapidRate_degdmin(string axisName, double value) Parameters axisName string value double WriteXml(string) protected XElement WriteXml(string xName) Parameters xName string Returns XElement" + "summary": "Class ControllerParameterTableBase Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Base class for brand-specific controller parameter tables. Provides shared data structures, XML IO, and IHomeMcConfig IMachineAxisConfig implementations. Subclasses define brand-specific parameter numbers, XML attribute names, and derived convenience properties. public abstract class ControllerParameterTableBase : IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig INcDependency IMakeXmlSource Derived FanucParameterTable HeidenhainParameterTable SiemensMachineDataTable SyntecParameterTable 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties AxisNames Gets the configured axis names in order. public IEnumerable AxisNames { get; } Property Value IEnumerable AxisParams Per-axis float parameters. Outer key = parameter number, inner key = axis name. public Dictionary> AxisParams { get; set; } Property Value Dictionary> AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected abstract int AxisTypeParamId { get; } Property Value int IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected abstract string IdAttributeName { get; } Property Value string IntAxisParams Per-axis integer parameters. Outer key = parameter number, inner key = axis name. public Dictionary> IntAxisParams { get; set; } Property Value Dictionary> RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected virtual int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected abstract int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected virtual int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected virtual int? StrokeLimitPosParamId { get; } Property Value int? SystemParams System-wide parameters. Key = parameter number. public Dictionary SystemParams { get; set; } Property Value Dictionary Methods AxisParam(int) Returns the per-axis float bucket for paramId, creating it if absent. See AxisParams. public Dictionary AxisParam(int paramId) Parameters paramId int Brand-specific parameter/MD/MP number. Returns Dictionary ConfigureRotaryAxis(string, double, double) Configures a rotary axis with home position and rapid rate. Sets axis type to Rotary, home position via SetHomePosition(string, double), and per-axis rapid rate (if RapidRateParamId is defined for this brand). Use RemoveAxis(string) to remove the axis entirely. public void ConfigureRotaryAxis(string axisName, double homePosition_deg = 0, double rapidRate_degdmin = 36000) Parameters axisName string Axis name (e.g., “A”, “B”, “C”). homePosition_deg double Home position in degrees (default 0). rapidRate_degdmin double Rapid traverse rate in deg/min (default 36000). GetHomePosition(string) Gets the home position for a specific axis. Returns null if the axis has no home position configured. public double? GetHomePosition(string axisName) Parameters axisName string Returns double? GetLinearAxisRapidRate_mmdmin(string) Gets rapid traverse feedrate for a linear axis in mm/min. Returns a default value if the axis is not configured. public double GetLinearAxisRapidRate_mmdmin(string axisName) Parameters axisName string Returns double GetNegativeLimit(string) Gets the negative stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. Returns null if not configured (no limit). public double? GetNegativeLimit(string axisName) Parameters axisName string Returns double? GetPositiveLimit(string) Gets the positive stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. Returns null if not configured (no limit). public double? GetPositiveLimit(string axisName) Parameters axisName string Returns double? GetRotaryAxisRapidRate_degdmin(string) Gets rapid traverse feedrate for a rotary axis in deg/min. Returns a default value if the axis is not configured. public double GetRotaryAxisRapidRate_degdmin(string axisName) Parameters axisName string Returns double IntAxisParam(int) Returns the per-axis integer bucket for paramId, creating it if absent. See IntAxisParams. public Dictionary IntAxisParam(int paramId) Parameters paramId int Brand-specific parameter/MD/MP number. Returns Dictionary IsRotaryAxis(string) Returns true if the axis is rotary or spindle, false if linear. public bool IsRotaryAxis(string axisName) Parameters axisName string Returns bool MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public abstract 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. ReadXml(XElement) Populates SystemParams, AxisParams, and IntAxisParams from src using the brand-specific IdAttributeName. protected void ReadXml(XElement src) Parameters src XElement XML element produced by WriteXml(string). RemoveAxis(string) Removes an axis from the configuration. public void RemoveAxis(string axisName) Parameters axisName string SetAxis(string, AxisType) Adds or updates an axis with the specified type. public void SetAxis(string axisName, AxisType type) Parameters axisName string type AxisType SetHomePosition(string, double) Sets the home position for a specific axis. public void SetHomePosition(string axisName, double value) Parameters axisName string value double SetLinearAxisRapidRate_mmdmin(string, double) Sets rapid traverse feedrate for a linear axis in mm/min. public void SetLinearAxisRapidRate_mmdmin(string axisName, double value) Parameters axisName string value double SetNegativeLimit(string, double) Sets the negative stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. public void SetNegativeLimit(string axisName, double value) Parameters axisName string value double SetPositiveLimit(string, double) Sets the positive stroke limit for a specific axis. Unit is mm for linear axes, deg for rotary axes. public void SetPositiveLimit(string axisName, double value) Parameters axisName string value double SetRotaryAxisRapidRate_degdmin(string, double) Sets rapid traverse feedrate for a rotary axis in deg/min. public void SetRotaryAxisRapidRate_degdmin(string axisName, double value) Parameters axisName string value double WriteXml(string) Serializes SystemParams, AxisParams, and IntAxisParams into a new XElement. Inverse of ReadXml(XElement). protected XElement WriteXml(string xName) Parameters xName string Element name for the produced XML element. Returns XElement" }, "api/Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html", @@ -3522,12 +3537,12 @@ "api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html", "title": "Class FanucParameterTable | HiAPI-C# 2025", - "summary": "Class FanucParameterTable Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following real Fanuc parameter numbering. public class FanucParameterTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, ICannedCycleConfig, IIsoCoordinateConfig, INcDependency, IMakeXmlSource, IVariableLookup Inheritance object ControllerParameterTableBase FanucParameterTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig ICannedCycleConfig IIsoCoordinateConfig INcDependency IMakeXmlSource IVariableLookup Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucParameterTable() public FanucParameterTable() FanucParameterTable(XElement) public FanucParameterTable(XElement src) Parameters src XElement Fields CoordOffsetMax Inclusive upper bound of the G54-G59 work coordinate offset address range (#5328). public const int CoordOffsetMax = 5328 Field Value int CoordOffsetMin Inclusive lower bound of the G54-G59 work coordinate offset address range (#5221). public const int CoordOffsetMin = 5221 Field Value int ExtCoordOffsetMax Inclusive upper bound of the G54.1 P-table extended offset range (#7999). public const int ExtCoordOffsetMax = 7999 Field Value int ExtCoordOffsetMin Inclusive lower bound of the G54.1 P-table extended offset range (#7001). public const int ExtCoordOffsetMin = 7001 Field Value int ParamAxisType #1006: Axis type per axis. See AxisType. public const int ParamAxisType = 1006 Field Value int ParamControlledAxes #1020: Number of controlled axes. public const int ParamControlledAxes = 1020 Field Value int ParamCutterCompType #5003: Cutter compensation startup type. See CutterCompensationType. public const int ParamCutterCompType = 5003 Field Value int ParamG54OffsetBase #5221: Base address (X) of G54 work coordinate offset. G54.Y at +1 (#5222), G54.Z at +2 (#5223). G55..G59 follow at stride 20. See IsoCoordinateAddressMap. public const int ParamG54OffsetBase = 5221 Field Value int ParamG54p1P1OffsetBase #7001: Base address (X) of G54.1 P1 extended work coordinate offset. G54.1 P2..P48 follow at stride 20. See IsoCoordinateAddressMap. public const int ParamG54p1P1OffsetBase = 7001 Field Value int ParamMaxSpindleSpeed #3741: Maximum spindle speed (RPM). public const int ParamMaxSpindleSpeed = 3741 Field Value int ParamPeckRetraction #4002: G83 peck drilling retraction distance (mm). Fanuc stores this value in mm directly in the system parameter. public const int ParamPeckRetraction = 4002 Field Value int ParamRapidRate #1420: Rapid traverse rate per axis (mm/min or deg/min). public const int ParamRapidRate = 1420 Field Value int ParamReferencePosition #1240: G28 first reference position per axis. public const int ParamReferencePosition = 1240 Field Value int ParamStrokeLimitNeg #1320: Negative stroke limit per axis (mm or deg). public const int ParamStrokeLimitNeg = 1320 Field Value int ParamStrokeLimitPos #1300: Positive stroke limit per axis (mm or deg). public const int ParamStrokeLimitPos = 1300 Field Value int Properties AxisParam1006 #1006: Axis type per axis. See AxisType. See AxisNames. See IsRotaryAxis(string). See SetAxis(string, AxisType). public Dictionary AxisParam1006 { get; set; } Property Value Dictionary AxisParam1240 #1240: G28 first reference position per axis. See IHomeMcConfig. See GetHomePosition(string). See SetHomePosition(string, double). public Dictionary AxisParam1240 { get; set; } Property Value Dictionary AxisParam1420 #1420: Rapid traverse rate per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisParam1420 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int ControlledAxisCount Number of controlled axes. Delegates to Param1020. public int ControlledAxisCount { get; set; } Property Value int CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable CutterCompType Cutter compensation startup type. Delegates to Param5003. public CutterCompensationType CutterCompType { get; set; } Property Value CutterCompensationType Default3Axis Default 3-axis Fanuc milling machine. public static FanucParameterTable Default3Axis { get; } Property Value FanucParameterTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Param3741. public double MaxSpindleSpeed_rpm { get; set; } Property Value double Param1020 #1020: Number of controlled axes. See ControlledAxisCount. public int Param1020 { get; set; } Property Value int Param3741 #3741: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Param3741 { get; set; } Property Value double Param5003 #5003: Cutter compensation startup type. See CutterCompType. public CutterCompensationType Param5003 { get; set; } Property Value CutterCompensationType PeckRetractionDistance_mm G83 peck drilling clearance distance above the previous stroke bottom before re-entering at feed (mm). public double PeckRetractionDistance_mm { get; } Property Value double RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? XName public static string XName { get; } Property Value string Methods Get(string) Returns the value of the variable identified by key (e.g. \"#124\"), or null if vacant or unknown to this lookup. public double? Get(string key) Parameters key string Returns double? Remarks Routes Fanuc system-variable reads to SystemParams: #5221-#5328 (G54-G59 work coordinate offsets) and #7001-#7999 (G54.1 P1-P48 extended offsets) are returned directly by parameter address. Other ranges return null so the evaluator's lookup chain can fall through. GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d" + "summary": "Class FanucParameterTable Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following real Fanuc parameter numbering. public class FanucParameterTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, ICannedCycleConfig, IIsoCoordinateConfig, INcDependency, IMakeXmlSource, IVariableLookup Inheritance object ControllerParameterTableBase FanucParameterTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig ICannedCycleConfig IIsoCoordinateConfig INcDependency IMakeXmlSource IVariableLookup Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucParameterTable() Initializes a new instance, seeding Param1020, Param3741, Param5003, and the ISO G54-G59/G54.1 P-table coordinate offsets with their default values. public FanucParameterTable() FanucParameterTable(XElement) Initializes a new instance by deserializing from src. public FanucParameterTable(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Fields CoordOffsetMax Inclusive upper bound of the G54-G59 work coordinate offset address range (#5328). public const int CoordOffsetMax = 5328 Field Value int CoordOffsetMin Inclusive lower bound of the G54-G59 work coordinate offset address range (#5221). public const int CoordOffsetMin = 5221 Field Value int ExtCoordOffsetMax Inclusive upper bound of the G54.1 P-table extended offset range (#7999). public const int ExtCoordOffsetMax = 7999 Field Value int ExtCoordOffsetMin Inclusive lower bound of the G54.1 P-table extended offset range (#7001). public const int ExtCoordOffsetMin = 7001 Field Value int ParamAxisType #1006: Axis type per axis. See AxisType. public const int ParamAxisType = 1006 Field Value int ParamControlledAxes #1020: Number of controlled axes. public const int ParamControlledAxes = 1020 Field Value int ParamCutterCompType #5003: Cutter compensation startup type. See CutterCompensationType. public const int ParamCutterCompType = 5003 Field Value int ParamG54OffsetBase #5221: Base address (X) of G54 work coordinate offset. G54.Y at +1 (#5222), G54.Z at +2 (#5223). G55..G59 follow at stride 20. See IsoCoordinateAddressMap. public const int ParamG54OffsetBase = 5221 Field Value int ParamG54p1P1OffsetBase #7001: Base address (X) of G54.1 P1 extended work coordinate offset. G54.1 P2..P48 follow at stride 20. See IsoCoordinateAddressMap. public const int ParamG54p1P1OffsetBase = 7001 Field Value int ParamMaxSpindleSpeed #3741: Maximum spindle speed (RPM). public const int ParamMaxSpindleSpeed = 3741 Field Value int ParamPeckRetraction #4002: G83 peck drilling retraction distance (mm). Fanuc stores this value in mm directly in the system parameter. public const int ParamPeckRetraction = 4002 Field Value int ParamRapidRate #1420: Rapid traverse rate per axis (mm/min or deg/min). public const int ParamRapidRate = 1420 Field Value int ParamReferencePosition #1240: G28 first reference position per axis. public const int ParamReferencePosition = 1240 Field Value int ParamStrokeLimitNeg #1320: Negative stroke limit per axis (mm or deg). public const int ParamStrokeLimitNeg = 1320 Field Value int ParamStrokeLimitPos #1300: Positive stroke limit per axis (mm or deg). public const int ParamStrokeLimitPos = 1300 Field Value int Properties AxisParam1006 #1006: Axis type per axis. See AxisType. See AxisNames. See IsRotaryAxis(string). See SetAxis(string, AxisType). public Dictionary AxisParam1006 { get; set; } Property Value Dictionary AxisParam1240 #1240: G28 first reference position per axis. See IHomeMcConfig. See GetHomePosition(string). See SetHomePosition(string, double). public Dictionary AxisParam1240 { get; set; } Property Value Dictionary AxisParam1420 #1420: Rapid traverse rate per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisParam1420 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int ControlledAxisCount Number of controlled axes. Delegates to Param1020. public int ControlledAxisCount { get; set; } Property Value int CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable CutterCompType Cutter compensation startup type. Delegates to Param5003. public CutterCompensationType CutterCompType { get; set; } Property Value CutterCompensationType Default3Axis Default 3-axis Fanuc milling machine. public static FanucParameterTable Default3Axis { get; } Property Value FanucParameterTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Param3741. public double MaxSpindleSpeed_rpm { get; set; } Property Value double Param1020 #1020: Number of controlled axes. See ControlledAxisCount. public int Param1020 { get; set; } Property Value int Param3741 #3741: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Param3741 { get; set; } Property Value double Param5003 #5003: Cutter compensation startup type. See CutterCompType. public CutterCompensationType Param5003 { get; set; } Property Value CutterCompensationType PeckRetractionDistance_mm G83 peck drilling clearance distance above the previous stroke bottom before re-entering at feed (mm). public double PeckRetractionDistance_mm { get; } Property Value double RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods Get(string) Returns the value of the variable identified by key (e.g. \"#124\"), or null if vacant or unknown to this lookup. public double? Get(string key) Parameters key string Returns double? Remarks Routes Fanuc system-variable reads to SystemParams: #5221-#5328 (G54-G59 work coordinate offsets) and #7001-#7999 (G54.1 P1-P48 extended offsets) are returned directly by parameter address. Other ranges return null so the evaluator's lookup chain can fall through. GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d" }, "api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html", "title": "Class FanucPositionVariableLookup | HiAPI-C# 2025", - "summary": "Class FanucPositionVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on VariableEvaluatorSyntax.RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. public sealed class FanucPositionVariableLookup : IRuntimeVariableLookup Inheritance object FanucPositionVariableLookup Implements IRuntimeVariableLookup Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() 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) Fields AbsoluteXyzBase Inclusive lower bound of the absolute XYZ position range (#5041). public const int AbsoluteXyzBase = 5041 Field Value int BlockEndXyzBase Inclusive lower bound of the block-end XYZ position range (#5001). public const int BlockEndXyzBase = 5001 Field Value int MachineCoordXyzBase Inclusive lower bound of the machine-coordinate XYZ position range (#5021). public const int MachineCoordXyzBase = 5021 Field Value int Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double?" + "summary": "Class FanucPositionVariableLookup Namespace Hi.NcParsers.Dependencys.Fanuc Assembly HiMech.dll Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. public sealed class FanucPositionVariableLookup : IRuntimeVariableLookup Inheritance object FanucPositionVariableLookup Implements IRuntimeVariableLookup Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() 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) Fields AbsoluteXyzBase Inclusive lower bound of the absolute XYZ position range (#5041). public const int AbsoluteXyzBase = 5041 Field Value int BlockEndXyzBase Inclusive lower bound of the block-end XYZ position range (#5001). public const int BlockEndXyzBase = 5001 Field Value int MachineCoordXyzBase Inclusive lower bound of the machine-coordinate XYZ position range (#5021). public const int MachineCoordXyzBase = 5021 Field Value int Methods Get(string, LazyLinkedListNode, IReadOnlyList) Returns the value of the variable identified by key in the context of node and dependencies, or null if the key is outside this lookup's range or the value is vacant. public double? Get(string key, LazyLinkedListNode node, IReadOnlyList dependencies) Parameters key string node LazyLinkedListNode dependencies IReadOnlyList Returns double?" }, "api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html", @@ -3542,17 +3557,17 @@ "api/Hi.NcParsers.Dependencys.Fanuc.html": { "href": "api/Hi.NcParsers.Dependencys.Fanuc.html", "title": "Namespace Hi.NcParsers.Dependencys.Fanuc | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Dependencys.Fanuc Classes FanucParameterTable Fanuc controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following real Fanuc parameter numbering. FanucPositionVariableLookup Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on VariableEvaluatorSyntax.RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. FanucToolOffsetVariableLookup Fanuc-side adapter that exposes a wrapped ToolOffsetTable as an IVariableLookup following Fanuc Memory C tool offset addressing: #2001+N → effective height of offset N (geometry − wear). The underlying ToolOffsetTable stays brand-neutral — Heidenhain / Siemens can use the same storage with different addressing by registering their own adapter alongside the table. Holds a reference to the table rather than owning data so writes through the table show up immediately in lookups via this adapter. RetainedCommonVariableTable Fanuc-style ISO controller common variable table for the retained range #500-#999. These variables survive a power cycle (in real hardware they live in NV-RAM) and are serialised into the project file. Excluded by design: Local #1-#33Call-frame scoped (Fanuc local variables); lives in the SyntaxPiece JSON dataflow, not here. Non-retained common #100-#499Cleared by program-end / power reset; lives in the SyntaxPiece JSON dataflow as well, not in this table. System #1000+Read-only or computed from runtime state; resolved by dedicated reading syntaxes against other dependencies (e.g. FanucParameterTable, tool offset / WCS tables). Vacant (Fanuc ) is represented by null: either the dictionary has no entry for the key, or the entry maps to null. Both are treated identically by GetVariable(int). Naming rationale: Fanuc official documentation calls #500-#999 \"retained common variables\" (and #100-#499 \"non-retained common variables\"). The umbrella term \"macro variable\" was avoided because it conflicts with Custom Macro B's call-frame concept (G65/G66 push a frame containing the local #1-#33); using RetainedCommonVariableTable reserves \"macro\" for the call-frame topic. Enums CutterCompensationType Fanuc #5003: Cutter compensation startup/cancellation type." + "summary": "Namespace Hi.NcParsers.Dependencys.Fanuc Classes FanucParameterTable Fanuc controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following real Fanuc parameter numbering. FanucPositionVariableLookup Fanuc-style position system variables read from the previous block's runtime-state JSON sections: #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's ProgramXyz. #5021-#5023Current machine position X/Y/Z → previous block's MachineCoordinateState. #5041-#5043Current absolute position X/Y/Z → previous block's ProgramXyz. Stateless. Configured on RuntimeVariableLookups rather than NcDependencyList because the read needs the block node for Previous access — there is no long-lived dependency object that owns this data. FanucToolOffsetVariableLookup Fanuc-side adapter that exposes a wrapped ToolOffsetTable as an IVariableLookup following Fanuc Memory C tool offset addressing: #2001+N → effective height of offset N (geometry − wear). The underlying ToolOffsetTable stays brand-neutral — Heidenhain / Siemens can use the same storage with different addressing by registering their own adapter alongside the table. Holds a reference to the table rather than owning data so writes through the table show up immediately in lookups via this adapter. RetainedCommonVariableTable Fanuc-style ISO controller common variable table for the retained range #500-#999. These variables survive a power cycle (in real hardware they live in NV-RAM) and are serialised into the project file. Excluded by design: Local #1-#33Call-frame scoped (Fanuc local variables); lives in the SyntaxPiece JSON dataflow, not here. Non-retained common #100-#499Cleared by program-end / power reset; lives in the SyntaxPiece JSON dataflow as well, not in this table. System #1000+Read-only or computed from runtime state; resolved by dedicated reading syntaxes against other dependencies (e.g. FanucParameterTable, tool offset / WCS tables). Vacant (Fanuc ) is represented by null: either the dictionary has no entry for the key, or the entry maps to null. Both are treated identically by GetVariable(int). Naming rationale: Fanuc official documentation calls #500-#999 \"retained common variables\" (and #100-#499 \"non-retained common variables\"). The umbrella term \"macro variable\" was avoided because it conflicts with Custom Macro B's call-frame concept (G65/G66 push a frame containing the local #1-#33); using RetainedCommonVariableTable reserves \"macro\" for the call-frame topic. Enums CutterCompensationType Fanuc #5003: Cutter compensation startup/cancellation type." }, "api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html", "title": "Class FallbackConfig | HiAPI-C# 2025", - "summary": "Class FallbackConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll HiNC-specific fallback dependency that provides default values for all optional configuration interfaces. Should be placed as the last element in NcDependencyList so that brand-specific parameter tables (which appear earlier) take priority via OfType().FirstOrDefault(). When a brand table (e.g., FanucParameterTable) implements the same interface, its values are used instead. This class serves as a safety net for brands that do not define certain parameters (e.g., Siemens/Heidenhain have no system parameter for G83 peck retraction — it is per-call). public class FallbackConfig : ICannedCycleConfig, INcDependency, IMakeXmlSource Inheritance object FallbackConfig Implements ICannedCycleConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FallbackConfig() public FallbackConfig() FallbackConfig(XElement) public FallbackConfig(XElement src) Parameters src XElement Properties PeckRetractionDistance_mm G83 peck drilling clearance distance above the previous stroke bottom before re-entering at feed (mm). public double PeckRetractionDistance_mm { get; set; } Property Value double XName public static string XName { get; } Property Value string Methods 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." + "summary": "Class FallbackConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll HiNC-specific fallback dependency that provides default values for all optional configuration interfaces. Should be placed as the last element in NcDependencyList so that brand-specific parameter tables (which appear earlier) take priority via OfType().FirstOrDefault(). When a brand table (e.g., FanucParameterTable) implements the same interface, its values are used instead. This class serves as a safety net for brands that do not define certain parameters (e.g., Siemens/Heidenhain have no system parameter for G83 peck retraction — it is per-call). public class FallbackConfig : ICannedCycleConfig, INcDependency, IMakeXmlSource Inheritance object FallbackConfig Implements ICannedCycleConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FallbackConfig() Initializes a new instance with default settings (PeckRetractionDistance_mm = 5.0). public FallbackConfig() FallbackConfig(XElement) Initializes a new instance by deserializing from src. public FallbackConfig(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Properties PeckRetractionDistance_mm G83 peck drilling clearance distance above the previous stroke bottom before re-entering at feed (mm). public double PeckRetractionDistance_mm { get; set; } Property Value double XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods 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." }, "api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html", "title": "Class GenericBlockSkipConfig | HiAPI-C# 2025", - "summary": "Class GenericBlockSkipConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Default IBlockSkipConfig. Mirrors the typical Fanuc factory default: layer 1 (bare / prefix) is ON, other layers are OFF. Each layer can be toggled individually. XML form: 1,3 When EnabledLayers is absent the default is layer 1 only. public class GenericBlockSkipConfig : IBlockSkipConfig, INcDependency, IMakeXmlSource Inheritance object GenericBlockSkipConfig Implements IBlockSkipConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GenericBlockSkipConfig() public GenericBlockSkipConfig() GenericBlockSkipConfig(XElement) public GenericBlockSkipConfig(XElement src) Parameters src XElement Properties EnabledLayers CSV of currently-enabled layers, e.g. “1,3”. public string EnabledLayers { get; set; } Property Value string XName public static string XName { get; } Property Value string Methods IsLayerEnabled(int) Returns true when blocks tagged with this layer should be skipped (controller switch ON). public bool IsLayerEnabled(int layer) Parameters layer int Skip layer, 1..9. Bare / is layer 1. Returns bool 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. SetLayerEnabled(int, bool) Enables / disables a specific skip layer. public void SetLayerEnabled(int layer, bool enabled) Parameters layer int Skip layer, 1..9. enabled bool True to skip blocks tagged with this layer." + "summary": "Class GenericBlockSkipConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Default IBlockSkipConfig. Mirrors the typical Fanuc factory default: layer 1 (bare / prefix) is ON, other layers are OFF. Each layer can be toggled individually. XML form: 1,3 When EnabledLayers is absent the default is layer 1 only. public class GenericBlockSkipConfig : IBlockSkipConfig, INcDependency, IMakeXmlSource Inheritance object GenericBlockSkipConfig Implements IBlockSkipConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GenericBlockSkipConfig() Initializes a new instance with only layer 1 (the bare / prefix) enabled, matching the typical Fanuc factory default. public GenericBlockSkipConfig() GenericBlockSkipConfig(XElement) Initializes a new instance by deserializing from src. Falls back to layer 1 only when the EnabledLayers child element is absent or blank. public GenericBlockSkipConfig(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Properties EnabledLayers CSV of currently-enabled layers, e.g. “1,3”. public string EnabledLayers { get; set; } Property Value string XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods IsLayerEnabled(int) Returns true when blocks tagged with this layer should be skipped (controller switch ON). public bool IsLayerEnabled(int layer) Parameters layer int Skip layer, 1..9. Bare / is layer 1. Returns bool 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. SetLayerEnabled(int, bool) Enables / disables a specific skip layer. public void SetLayerEnabled(int layer, bool enabled) Parameters layer int Skip layer, 1..9. enabled bool True to skip blocks tagged with this layer." }, "api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html", @@ -3562,22 +3577,22 @@ "api/Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.NcKinematicsDependency.html", "title": "Class NcKinematicsDependency | HiAPI-C# 2025", - "summary": "Class NcKinematicsDependency Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Provides IMachineKinematics as an INcDependency for SoftNcRunner.NcDependencyList. The actual kinematics instance is resolved at runtime via KinematicsProvider. This supports scenarios where the machine tool is loaded or changed after the runner is configured (e.g., XML config loaded first, kinematics assigned later). Consumed by G53p1RotaryPositionSyntax, IsoG68p2TiltSyntax, and McLinearMotionSemantic via dependencyList.OfType(). public class NcKinematicsDependency : INcDependency, IMakeXmlSource, IMachineKinematics Inheritance object NcKinematicsDependency Implements INcDependency IMakeXmlSource IMachineKinematics 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcKinematicsDependency() public NcKinematicsDependency() NcKinematicsDependency(Func) public NcKinematicsDependency(Func provider) Parameters provider Func Properties KinematicsProvider Runtime provider for the kinematics instance. Null provider or null return means kinematics is not yet available. public Func KinematicsProvider { get; set; } Property Value Func XName public static string XName { get; } Property Value string Methods 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. McAbcToMat(Vec3d) Converts machine ABC coordinates to a tilt matrix. the tilt matrix is the transformation matrix from table to attacher. public Mat4d McAbcToMat(Vec3d mcAbc_rad) Parameters mcAbc_rad Vec3d The machine ABC coordinates in radians Returns Mat4d The tilt matrix McToMat(DVec3d) Converts machine coordinates to an attacher matrix. public Mat4d McToMat(DVec3d mcXyzabc) Parameters mcXyzabc DVec3d The machine coordinates Returns Mat4d The attacher matrix McToPn(DVec3d) Machine coordinate to tool attacher Pn (Point and Normal). The Pn is from table buckle to tool attacher. public DVec3d McToPn(DVec3d mcXyzabc) Parameters mcXyzabc DVec3d machine coordinate. ABC is in radian. Returns DVec3d tool attacher Pn (Point and Normal) OrientationToMcAbc(Mat4d, out Vec3d) 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) Parameters tiltMat Mat4d The tilt matrix to convert mcAbc_rad Vec3d Output parameter that will contain the machine ABC coordinates in radians Returns bool Whether the conversion was successful OrientationToMcAbc(Vec3d, out Vec3d) Converts a target tool axial direction (endpoint orientation) to machine ABC coordinates. Only the axial alignment is constrained; rotation about the tool axis is free. Use this in place of OrientationToMcAbc(Mat4d, out Vec3d) when the rotation about the tool axis is irrelevant (e.g. G53.1 rotary positioning). The axial-only solve avoids the redundant 6-target full-matrix constraint and is more likely to converge for tilt configurations such as G68.2 I180 J90 K0. public bool OrientationToMcAbc(Vec3d toolAxialNormal, out Vec3d mcAbc_rad) Parameters toolAxialNormal Vec3d Target tool axial direction in table coordinates (the third row of the tilt matrix; e.g. AxialNormal). mcAbc_rad Vec3d Output machine ABC coordinates in radians. Returns bool Whether the conversion was successful. PnToMc(DVec3d, out DVec3d) Tool attacher Pn (Point and Normal) to machine coordinate. The Pn is from table buckle to tool attacher. public bool PnToMc(DVec3d pn, out DVec3d mcXyzabc_rad) Parameters pn DVec3d tool attacher Pn (Point and Normal) mcXyzabc_rad DVec3d machine coordinate (ABC in radian) Returns bool whether conversion succeeded" + "summary": "Class NcKinematicsDependency Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll Provides IMachineKinematics as an INcDependency for SoftNcRunner.NcDependencyList. The actual kinematics instance is resolved at runtime via KinematicsProvider. This supports scenarios where the machine tool is loaded or changed after the runner is configured (e.g., XML config loaded first, kinematics assigned later). Consumed by G53p1RotaryPositionSyntax, IsoG68p2TiltSyntax, and McLinearMotionSemantic via dependencyList.OfType(). public class NcKinematicsDependency : INcDependency, IMakeXmlSource, IMachineKinematics Inheritance object NcKinematicsDependency Implements INcDependency IMakeXmlSource IMachineKinematics 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcKinematicsDependency() Initializes a new instance with no KinematicsProvider; assign one before the runner queries kinematics. public NcKinematicsDependency() NcKinematicsDependency(Func) Initializes a new instance with the given KinematicsProvider. public NcKinematicsDependency(Func provider) Parameters provider Func Delegate that resolves the live IMachineKinematics at lookup time. Properties KinematicsProvider Runtime provider for the kinematics instance. Null provider or null return means kinematics is not yet available. public Func KinematicsProvider { get; set; } Property Value Func XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods 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. McAbcToMat(Vec3d) Converts machine ABC coordinates to a tilt matrix. the tilt matrix is the transformation matrix from table to attacher. public Mat4d McAbcToMat(Vec3d mcAbc_rad) Parameters mcAbc_rad Vec3d The machine ABC coordinates in radians Returns Mat4d The tilt matrix McToMat(DVec3d) Converts machine coordinates to an attacher matrix. public Mat4d McToMat(DVec3d mcXyzabc) Parameters mcXyzabc DVec3d The machine coordinates Returns Mat4d The attacher matrix McToPn(DVec3d) Machine coordinate to tool attacher Pn (Point and Normal). The Pn is from table buckle to tool attacher. public DVec3d McToPn(DVec3d mcXyzabc) Parameters mcXyzabc DVec3d machine coordinate. ABC is in radian. Returns DVec3d tool attacher Pn (Point and Normal) OrientationToMcAbc(Mat4d, out Vec3d) 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) Parameters tiltMat Mat4d The tilt matrix to convert mcAbc_rad Vec3d Output parameter that will contain the machine ABC coordinates in radians Returns bool Whether the conversion was successful OrientationToMcAbc(Vec3d, out Vec3d) Converts a target tool axial direction (endpoint orientation) to machine ABC coordinates. Only the axial alignment is constrained; rotation about the tool axis is free. Use this in place of OrientationToMcAbc(Mat4d, out Vec3d) when the rotation about the tool axis is irrelevant (e.g. G53.1 rotary positioning). The axial-only solve avoids the redundant 6-target full-matrix constraint and is more likely to converge for tilt configurations such as G68.2 I180 J90 K0. public bool OrientationToMcAbc(Vec3d toolAxialNormal, out Vec3d mcAbc_rad) Parameters toolAxialNormal Vec3d Target tool axial direction in table coordinates (the third row of the tilt matrix; e.g. AxialNormal). mcAbc_rad Vec3d Output machine ABC coordinates in radians. Returns bool Whether the conversion was successful. PnToMc(DVec3d, out DVec3d) Tool attacher Pn (Point and Normal) to machine coordinate. The Pn is from table buckle to tool attacher. public bool PnToMc(DVec3d pn, out DVec3d mcXyzabc_rad) Parameters pn DVec3d tool attacher Pn (Point and Normal) mcXyzabc_rad DVec3d machine coordinate (ABC in radian) Returns bool whether conversion succeeded" }, "api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html", "title": "Class ToolOffsetRow | HiAPI-C# 2025", - "summary": "Class ToolOffsetRow Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll 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. public class ToolOffsetRow Inheritance object ToolOffsetRow 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ToolOffsetRow() public ToolOffsetRow() ToolOffsetRow(double, double, double, double) public ToolOffsetRow(double idealHeight_mm, double axialWear_mm, double idealRadius_mm, double radialWear_mm) Parameters idealHeight_mm double axialWear_mm double idealRadius_mm double radialWear_mm double Properties AxialWear_mm public double AxialWear_mm { get; set; } Property Value double FullHeight_mm Effective height: geometry minus wear. public double FullHeight_mm { get; } Property Value double FullRadius_mm Effective radius: geometry minus wear. public double FullRadius_mm { get; } Property Value double IdealHeight_mm public double IdealHeight_mm { get; set; } Property Value double IdealRadius_mm public double IdealRadius_mm { get; set; } Property Value double RadialWear_mm public double RadialWear_mm { get; set; } Property Value double" + "summary": "Class ToolOffsetRow Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll 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. public class ToolOffsetRow Inheritance object ToolOffsetRow 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ToolOffsetRow() Initializes a new instance with all components zero. public ToolOffsetRow() ToolOffsetRow(double, double, double, double) Initializes a new instance with the supplied geometry and wear components. public ToolOffsetRow(double idealHeight_mm, double axialWear_mm, double idealRadius_mm, double radialWear_mm) Parameters idealHeight_mm double Initial value of IdealHeight_mm. axialWear_mm double Initial value of AxialWear_mm. idealRadius_mm double Initial value of IdealRadius_mm. radialWear_mm double Initial value of RadialWear_mm. Properties AxialWear_mm Accumulated axial wear in millimetres, subtracted from IdealHeight_mm by FullHeight_mm. public double AxialWear_mm { get; set; } Property Value double FullHeight_mm Effective height: geometry minus wear. public double FullHeight_mm { get; } Property Value double FullRadius_mm Effective radius: geometry minus wear. public double FullRadius_mm { get; } Property Value double IdealHeight_mm Geometric tool height in millimetres before wear is subtracted. Combined with AxialWear_mm via FullHeight_mm. public double IdealHeight_mm { get; set; } Property Value double IdealRadius_mm Geometric tool radius in millimetres before wear is subtracted. Combined with RadialWear_mm via FullRadius_mm. public double IdealRadius_mm { get; set; } Property Value double RadialWear_mm Accumulated radial wear in millimetres, subtracted from IdealRadius_mm by FullRadius_mm. public double RadialWear_mm { get; set; } Property Value double" }, "api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html", "title": "Class ToolOffsetTable | HiAPI-C# 2025", - "summary": "Class ToolOffsetTable Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll 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 Inheritance object ToolOffsetTable Implements INcDependency IMakeXmlSource IToolOffsetConfig 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ToolOffsetTable() public ToolOffsetTable() ToolOffsetTable(XElement) public ToolOffsetTable(XElement src) Parameters src XElement Properties Offsets public Dictionary Offsets { get; set; } Property Value Dictionary XName public static string XName { get; } Property Value string Methods GetToolHeightOffset_mm(int) Gets the effective tool height offset (geometry - wear) in mm. Returns 0 if the offset number is not configured. public double GetToolHeightOffset_mm(int offsetNumber) Parameters offsetNumber int Offset number: Fanuc H number, Heidenhain tool number, etc. Returns double GetToolRadiusOffset_mm(int) Gets the effective tool radius offset (geometry - wear) in mm. Returns 0 if the offset number is not configured. public double GetToolRadiusOffset_mm(int offsetNumber) Parameters offsetNumber int Offset number: Fanuc D number, Heidenhain tool number, etc. Returns double 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. SetToolOffset(int, double, double, double, double) Sets all four offset components for the given offset number. public void SetToolOffset(int offsetNumber, double idealHeight_mm, double axialWear_mm, double idealRadius_mm, double radialWear_mm) Parameters offsetNumber int idealHeight_mm double axialWear_mm double idealRadius_mm double radialWear_mm double" + "summary": "Class ToolOffsetTable Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll 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 Inheritance object ToolOffsetTable Implements INcDependency IMakeXmlSource IToolOffsetConfig 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ToolOffsetTable() Initializes a new instance with an empty Offsets table. public ToolOffsetTable() ToolOffsetTable(XElement) Initializes a new instance by deserializing from src. public ToolOffsetTable(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Properties Offsets Tool offset rows keyed by offset number (Fanuc H or D number, Heidenhain tool number, etc.). public Dictionary Offsets { get; set; } Property Value Dictionary XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods GetToolHeightOffset_mm(int) Gets the effective tool height offset (geometry - wear) in mm. Returns 0 if the offset number is not configured. public double GetToolHeightOffset_mm(int offsetNumber) Parameters offsetNumber int Offset number: Fanuc H number, Heidenhain tool number, etc. Returns double GetToolRadiusOffset_mm(int) Gets the effective tool radius offset (geometry - wear) in mm. Returns 0 if the offset number is not configured. public double GetToolRadiusOffset_mm(int offsetNumber) Parameters offsetNumber int Offset number: Fanuc D number, Heidenhain tool number, etc. Returns double 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. SetToolOffset(int, double, double, double, double) Sets all four offset components for the given offset number. public void SetToolOffset(int offsetNumber, double idealHeight_mm, double axialWear_mm, double idealRadius_mm, double radialWear_mm) Parameters offsetNumber int idealHeight_mm double axialWear_mm double idealRadius_mm double radialWear_mm double" }, "api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html", "title": "Class ToolingMcConfig | HiAPI-C# 2025", - "summary": "Class ToolingMcConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll 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 Inheritance object ToolingMcConfig Implements IToolingMcConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ToolingMcConfig() public ToolingMcConfig() ToolingMcConfig(XElement) public ToolingMcConfig(XElement src) Parameters src XElement Properties AxisPositions Per-axis tooling positions. NaN means the axis stays where it is. public Dictionary AxisPositions { get; set; } Property Value Dictionary Default3Axis Default: XY stay, Z moves to 0, rotary axes move to 0. public static ToolingMcConfig Default3Axis { get; } Property Value ToolingMcConfig ToolingTime Duration of the tool changer mechanism (arm swap, magazine rotation, etc.). Does not include axis motion time to/from the tooling position. public TimeSpan ToolingTime { get; set; } Property Value TimeSpan XName public static string XName { get; } Property Value string Methods GetToolingPosition(string) 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) Parameters axisName string Returns double? 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. 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) Parameters axisName string value double" + "summary": "Class ToolingMcConfig Namespace Hi.NcParsers.Dependencys.Generic Assembly HiMech.dll 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 Inheritance object ToolingMcConfig Implements IToolingMcConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ToolingMcConfig() Initializes a new instance with an empty AxisPositions map and zero ToolingTime. public ToolingMcConfig() ToolingMcConfig(XElement) Initializes a new instance by deserializing from src. public ToolingMcConfig(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Properties AxisPositions Per-axis tooling positions. NaN means the axis stays where it is. public Dictionary AxisPositions { get; set; } Property Value Dictionary Default3Axis Default: XY stay, Z moves to 0, rotary axes move to 0. public static ToolingMcConfig Default3Axis { get; } Property Value ToolingMcConfig ToolingTime Duration of the tool changer mechanism (arm swap, magazine rotation, etc.). Does not include axis motion time to/from the tooling position. public TimeSpan ToolingTime { get; set; } Property Value TimeSpan XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods GetToolingPosition(string) 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) Parameters axisName string Returns double? 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. 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) Parameters axisName string value double" }, "api/Hi.NcParsers.Dependencys.Generic.html": { "href": "api/Hi.NcParsers.Dependencys.Generic.html", @@ -3587,7 +3602,7 @@ "api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html": { "href": "api/Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html", "title": "Class HeidenhainParameterTable | HiAPI-C# 2025", - "summary": "Class HeidenhainParameterTable Namespace Hi.NcParsers.Dependencys.Heidenhain Assembly HiMech.dll Heidenhain TNC/iTNC machine parameter table. Stores machine parameters (MP numbers) as system and per-axis values. MP100–MP199: General machine configuration. MP400–MP499: Axis-specific parameters. public class HeidenhainParameterTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase HeidenhainParameterTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig INcDependency IMakeXmlSource Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainParameterTable() public HeidenhainParameterTable() HeidenhainParameterTable(XElement) public HeidenhainParameterTable(XElement src) Parameters src XElement Fields MpAxisType MP400: Axis type per axis (0=linear, 1=rotary, 2=spindle). public const int MpAxisType = 400 Field Value int MpMaxSpindleSpeed MP100: Maximum spindle speed (RPM). public const int MpMaxSpindleSpeed = 100 Field Value int MpRapidRate MP1010: Rapid traverse rate per axis (mm/min or deg/min). public const int MpRapidRate = 1010 Field Value int MpReferencePosition MP410: Reference point position per axis. public const int MpReferencePosition = 410 Field Value int MpStrokeLimitNeg MP430: Negative stroke limit per axis. public const int MpStrokeLimitNeg = 430 Field Value int MpStrokeLimitPos MP420: Positive stroke limit per axis. public const int MpStrokeLimitPos = 420 Field Value int MpToolAxisDirection MP101: Tool axis direction (0=Z, 1=Y, 2=X). public const int MpToolAxisDirection = 101 Field Value int Properties AxisMp1010 MP1010: Rapid traverse rate per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisMp1010 { get; set; } Property Value Dictionary AxisMp400 MP400: Axis type per axis. See AxisType. See AxisNames. public Dictionary AxisMp400 { get; set; } Property Value Dictionary AxisMp410 MP410: Reference point position per axis. See IHomeMcConfig. public Dictionary AxisMp410 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int Default3Axis Default 3-axis Heidenhain milling machine. public static HeidenhainParameterTable Default3Axis { get; } Property Value HeidenhainParameterTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Mp100. public double MaxSpindleSpeed_rpm { get; set; } Property Value double Mp100 MP100: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Mp100 { get; set; } Property Value double Mp101 MP101: Tool axis direction (0=Z, 1=Y, 2=X). See ToolAxisDirection. public int Mp101 { get; set; } Property Value int RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? ToolAxisDirection Tool axis direction (0=Z, 1=Y, 2=X). Delegates to Mp101. public int ToolAxisDirection { get; set; } Property Value int XName public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." + "summary": "Class HeidenhainParameterTable Namespace Hi.NcParsers.Dependencys.Heidenhain Assembly HiMech.dll Heidenhain TNC/iTNC machine parameter table. Stores machine parameters (MP numbers) as system and per-axis values. MP100–MP199: General machine configuration. MP400–MP499: Axis-specific parameters. public class HeidenhainParameterTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase HeidenhainParameterTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig INcDependency IMakeXmlSource Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainParameterTable() Initializes a new instance with empty parameter tables. public HeidenhainParameterTable() HeidenhainParameterTable(XElement) Initializes a new instance by deserializing from src. public HeidenhainParameterTable(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Fields MpAxisType MP400: Axis type per axis (0=linear, 1=rotary, 2=spindle). public const int MpAxisType = 400 Field Value int MpMaxSpindleSpeed MP100: Maximum spindle speed (RPM). public const int MpMaxSpindleSpeed = 100 Field Value int MpRapidRate MP1010: Rapid traverse rate per axis (mm/min or deg/min). public const int MpRapidRate = 1010 Field Value int MpReferencePosition MP410: Reference point position per axis. public const int MpReferencePosition = 410 Field Value int MpStrokeLimitNeg MP430: Negative stroke limit per axis. public const int MpStrokeLimitNeg = 430 Field Value int MpStrokeLimitPos MP420: Positive stroke limit per axis. public const int MpStrokeLimitPos = 420 Field Value int MpToolAxisDirection MP101: Tool axis direction (0=Z, 1=Y, 2=X). public const int MpToolAxisDirection = 101 Field Value int Properties AxisMp1010 MP1010: Rapid traverse rate per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisMp1010 { get; set; } Property Value Dictionary AxisMp400 MP400: Axis type per axis. See AxisType. See AxisNames. public Dictionary AxisMp400 { get; set; } Property Value Dictionary AxisMp410 MP410: Reference point position per axis. See IHomeMcConfig. public Dictionary AxisMp410 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int Default3Axis Default 3-axis Heidenhain milling machine. public static HeidenhainParameterTable Default3Axis { get; } Property Value HeidenhainParameterTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Mp100. public double MaxSpindleSpeed_rpm { get; set; } Property Value double Mp100 MP100: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Mp100 { get; set; } Property Value double Mp101 MP101: Tool axis direction (0=Z, 1=Y, 2=X). See ToolAxisDirection. public int Mp101 { get; set; } Property Value int RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? ToolAxisDirection Tool axis direction (0=Z, 1=Y, 2=X). Delegates to Mp101. public int ToolAxisDirection { get; set; } Property Value int XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." }, "api/Hi.NcParsers.Dependencys.Heidenhain.html": { "href": "api/Hi.NcParsers.Dependencys.Heidenhain.html", @@ -3597,7 +3612,7 @@ "api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html": { "href": "api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html", "title": "Class HeidenhainDatumTable | HiAPI-C# 2025", - "summary": "Class HeidenhainDatumTable Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll 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. On real Heidenhain controllers, preset and datum tables are separate disk files (e.g. TNC:\\table\\preset.pr, *.d) — distinct from MP-prefixed Machine Parameters (held by HeidenhainParameterTable). HiNC mirrors that separation by keeping this dependency independent of HeidenhainParameterTable. Implements IIsoCoordinateConfig by mapping the ISO/DIN G54–G59 codes to preset rows 1–6, the conventional Heidenhain compatibility mapping for ISO/DIN programs running on a Heidenhain. public class HeidenhainDatumTable : IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object HeidenhainDatumTable Implements IIsoCoordinateConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainDatumTable() public HeidenhainDatumTable() HeidenhainDatumTable(XElement) public HeidenhainDatumTable(XElement src) Parameters src XElement Properties CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable DatumPresetTable public Dictionary DatumPresetTable { get; set; } Property Value Dictionary DatumShiftTable public Dictionary DatumShiftTable { get; set; } Property Value Dictionary XName public static string XName { get; } Property Value string Methods GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d GetDatumPreset(int) public Vec3d GetDatumPreset(int q339) Parameters q339 int Returns Vec3d GetDatumShift(int) public Vec3d GetDatumShift(int tableId) Parameters tableId int Returns Vec3d 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d SetDatumPreset(int, Vec3d) public void SetDatumPreset(int q339, Vec3d offset) Parameters q339 int offset Vec3d SetDatumShift(int, Vec3d) public void SetDatumShift(int tableId, Vec3d offset) Parameters tableId int offset Vec3d" + "summary": "Class HeidenhainDatumTable Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll 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. On real Heidenhain controllers, preset and datum tables are separate disk files (e.g. TNC:\\table\\preset.pr, *.d) — distinct from MP-prefixed Machine Parameters (held by HeidenhainParameterTable). HiNC mirrors that separation by keeping this dependency independent of HeidenhainParameterTable. Implements IIsoCoordinateConfig by mapping the ISO/DIN G54–G59 codes to preset rows 1–6, the conventional Heidenhain compatibility mapping for ISO/DIN programs running on a Heidenhain. public class HeidenhainDatumTable : IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object HeidenhainDatumTable Implements IIsoCoordinateConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainDatumTable() Initializes a new instance with rows 1-20 of DatumPresetTable and DatumShiftTable seeded to zero. public HeidenhainDatumTable() HeidenhainDatumTable(XElement) Initializes a new instance by deserializing from src. public HeidenhainDatumTable(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Properties CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable DatumPresetTable Preset rows (CYCL DEF 247 Q339=N) keyed by preset id (1-20). Rows 1-6 are aliased to ISO G54-G59 via IIsoCoordinateConfig. public Dictionary DatumPresetTable { get; set; } Property Value Dictionary DatumShiftTable Datum shift rows (CYCL DEF 7 #N) keyed by table id (1-20). public Dictionary DatumShiftTable { get; set; } Property Value Dictionary XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d GetDatumPreset(int) Returns the preset offset for q339, or Zero if absent. See DatumPresetTable. public Vec3d GetDatumPreset(int q339) Parameters q339 int Preset id (CYCL DEF 247 Q339). Returns Vec3d GetDatumShift(int) Returns the datum shift offset for tableId, or Zero if absent. See DatumShiftTable. public Vec3d GetDatumShift(int tableId) Parameters tableId int Datum shift row id (CYCL DEF 7 #N). Returns Vec3d 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d SetDatumPreset(int, Vec3d) Sets the preset offset for q339. See DatumPresetTable. public void SetDatumPreset(int q339, Vec3d offset) Parameters q339 int Preset id (CYCL DEF 247 Q339). offset Vec3d Translation to store. SetDatumShift(int, Vec3d) Sets the datum shift offset for tableId. See DatumShiftTable. public void SetDatumShift(int tableId, Vec3d offset) Parameters tableId int Datum shift row id (CYCL DEF 7 #N). offset Vec3d Translation to store." }, "api/Hi.NcParsers.Dependencys.IBlockSkipConfig.html": { "href": "api/Hi.NcParsers.Dependencys.IBlockSkipConfig.html", @@ -3627,7 +3642,7 @@ "api/Hi.NcParsers.Dependencys.INcDependency.html": { "href": "api/Hi.NcParsers.Dependencys.INcDependency.html", "title": "Interface INcDependency | HiAPI-C# 2025", - "summary": "Interface INcDependency Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll public interface INcDependency : IMakeXmlSource Inherited Members IMakeXmlSource.MakeXmlSource(string, string, bool) 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)" + "summary": "Interface INcDependency Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime. public interface INcDependency : IMakeXmlSource Inherited Members IMakeXmlSource.MakeXmlSource(string, string, bool) 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)" }, "api/Hi.NcParsers.Dependencys.IPowerResettable.html": { "href": "api/Hi.NcParsers.Dependencys.IPowerResettable.html", @@ -3667,12 +3682,12 @@ "api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html": { "href": "api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html", "title": "Class SiemensFrameTable | HiAPI-C# 2025", - "summary": "Class SiemensFrameTable Namespace Hi.NcParsers.Dependencys.Siemens Assembly HiMech.dll Sinumerik settable work coordinate frames ($P_UIFR[n]). Models G54–G57 (ISO-compatible), G505–G599 (extended Siemens), and G500 (cancel — always zero). On real Sinumerik, $P_UIFR is a frame array containing translation, rotation, scale and mirror per entry. HiNC currently consumes only the translation component, so this table stores Vec3d per id. $P_UIFR is NOT in the machine data table — therefore this is a separate dependency from SiemensMachineDataTable (which holds MD-prefixed OEM machine data such as MD30300 axis type, MD34010 reference position, etc.). public class SiemensFrameTable : IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object SiemensFrameTable Implements IIsoCoordinateConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SiemensFrameTable() public SiemensFrameTable() SiemensFrameTable(XElement) public SiemensFrameTable(XElement src) Parameters src XElement Properties CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable Frames Settable frames keyed by G-code id. G500 is treated specially (always zero) and is not stored here. public Dictionary Frames { get; set; } Property Value Dictionary XName XML element name for serialization. public static string XName { get; } Property Value string Methods GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d" + "summary": "Class SiemensFrameTable Namespace Hi.NcParsers.Dependencys.Siemens Assembly HiMech.dll Sinumerik settable work coordinate frames ($P_UIFR[n]). Models G54–G57 (ISO-compatible), G505–G599 (extended Siemens), and G500 (cancel — always zero). On real Sinumerik, $P_UIFR is a frame array containing translation, rotation, scale and mirror per entry. HiNC currently consumes only the translation component, so this table stores Vec3d per id. $P_UIFR is NOT in the machine data table — therefore this is a separate dependency from SiemensMachineDataTable (which holds MD-prefixed OEM machine data such as MD30300 axis type, MD34010 reference position, etc.). public class SiemensFrameTable : IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object SiemensFrameTable Implements IIsoCoordinateConfig INcDependency IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SiemensFrameTable() Initializes a new instance with G54-G57 and the Siemens extended G505-G599 series seeded as zero Vec3d entries in Frames. public SiemensFrameTable() SiemensFrameTable(XElement) Initializes a new instance by deserializing from src. public SiemensFrameTable(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Properties CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable Frames Settable frames keyed by G-code id. G500 is treated specially (always zero) and is not stored here. public Dictionary Frames { get; set; } Property Value Dictionary XName XML element name for serialization. public static string XName { get; } Property Value string Methods GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d" }, "api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html": { "href": "api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html", "title": "Class SiemensMachineDataTable | HiAPI-C# 2025", - "summary": "Class SiemensMachineDataTable Namespace Hi.NcParsers.Dependencys.Siemens Assembly HiMech.dll Siemens Sinumerik machine data table. Stores machine data (MD numbers) as system and per-axis parameters. MD10000–MD19999: General machine data. MD20000–MD29999: Axis-specific machine data. MD30000–MD39999: Axis-specific machine data (extended). public class SiemensMachineDataTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase SiemensMachineDataTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig INcDependency IMakeXmlSource Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SiemensMachineDataTable() public SiemensMachineDataTable() SiemensMachineDataTable(XElement) public SiemensMachineDataTable(XElement src) Parameters src XElement Fields MdAxisType MD30300: Axis type per axis (0=linear, 1=rotary, 2=spindle). public const int MdAxisType = 30300 Field Value int MdMaxAxisVelocity MD32000: Max axis velocity per axis (mm/min or deg/min). public const int MdMaxAxisVelocity = 32000 Field Value int MdMaxSpindleSpeed MD35100: Maximum spindle speed (RPM). public const int MdMaxSpindleSpeed = 35100 Field Value int MdReferencePosition MD34010: Reference point position per axis. public const int MdReferencePosition = 34010 Field Value int MdStrokeLimitNeg MD36110: Negative stroke limit per axis. public const int MdStrokeLimitNeg = 36110 Field Value int MdStrokeLimitPos MD36100: Positive stroke limit per axis. public const int MdStrokeLimitPos = 36100 Field Value int Properties AxisMd30300 MD30300: Axis type per axis. See AxisType. See AxisNames. public Dictionary AxisMd30300 { get; set; } Property Value Dictionary AxisMd32000 MD32000: Max axis velocity per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisMd32000 { get; set; } Property Value Dictionary AxisMd34010 MD34010: Reference point position per axis. See IHomeMcConfig. public Dictionary AxisMd34010 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int Default3Axis Default 3-axis Siemens milling machine. public static SiemensMachineDataTable Default3Axis { get; } Property Value SiemensMachineDataTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Md35100. public double MaxSpindleSpeed_rpm { get; set; } Property Value double Md35100 MD35100: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Md35100 { get; set; } Property Value double RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? XName public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." + "summary": "Class SiemensMachineDataTable Namespace Hi.NcParsers.Dependencys.Siemens Assembly HiMech.dll Siemens Sinumerik machine data table. Stores machine data (MD numbers) as system and per-axis parameters. MD10000–MD19999: General machine data. MD20000–MD29999: Axis-specific machine data. MD30000–MD39999: Axis-specific machine data (extended). public class SiemensMachineDataTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase SiemensMachineDataTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig INcDependency IMakeXmlSource Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SiemensMachineDataTable() Initializes a new instance with empty machine data tables. public SiemensMachineDataTable() SiemensMachineDataTable(XElement) Initializes a new instance by deserializing from src. public SiemensMachineDataTable(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Fields MdAxisType MD30300: Axis type per axis (0=linear, 1=rotary, 2=spindle). public const int MdAxisType = 30300 Field Value int MdMaxAxisVelocity MD32000: Max axis velocity per axis (mm/min or deg/min). public const int MdMaxAxisVelocity = 32000 Field Value int MdMaxSpindleSpeed MD35100: Maximum spindle speed (RPM). public const int MdMaxSpindleSpeed = 35100 Field Value int MdReferencePosition MD34010: Reference point position per axis. public const int MdReferencePosition = 34010 Field Value int MdStrokeLimitNeg MD36110: Negative stroke limit per axis. public const int MdStrokeLimitNeg = 36110 Field Value int MdStrokeLimitPos MD36100: Positive stroke limit per axis. public const int MdStrokeLimitPos = 36100 Field Value int Properties AxisMd30300 MD30300: Axis type per axis. See AxisType. See AxisNames. public Dictionary AxisMd30300 { get; set; } Property Value Dictionary AxisMd32000 MD32000: Max axis velocity per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisMd32000 { get; set; } Property Value Dictionary AxisMd34010 MD34010: Reference point position per axis. See IHomeMcConfig. public Dictionary AxisMd34010 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int Default3Axis Default 3-axis Siemens milling machine. public static SiemensMachineDataTable Default3Axis { get; } Property Value SiemensMachineDataTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Md35100. public double MaxSpindleSpeed_rpm { get; set; } Property Value double Md35100 MD35100: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Md35100 { get; set; } Property Value double RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." }, "api/Hi.NcParsers.Dependencys.Siemens.html": { "href": "api/Hi.NcParsers.Dependencys.Siemens.html", @@ -3682,7 +3697,7 @@ "api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html": { "href": "api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html", "title": "Class SyntecParameterTable | HiAPI-C# 2025", - "summary": "Class SyntecParameterTable Namespace Hi.NcParsers.Dependencys.Syntec Assembly HiMech.dll Syntec controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following Syntec Pr-prefixed parameter numbering. Syntec is largely Fanuc-compatible in parameter numbering, but some parameters differ in unit or interpretation. For example, Pr4002 (peck retraction) is stored in microns whereas Fanuc #4002 stores in mm. public class SyntecParameterTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, ICannedCycleConfig, IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase SyntecParameterTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig ICannedCycleConfig IIsoCoordinateConfig INcDependency IMakeXmlSource Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks CutterCompensationType is shared with Fanuc because both follow the same ISO cutter compensation standard. Consider relocating to the shared Hi.NcParsers.Dependencys namespace if more brands need it. Constructors SyntecParameterTable() public SyntecParameterTable() SyntecParameterTable(XElement) public SyntecParameterTable(XElement src) Parameters src XElement Fields PrAxisType Pr1006: Axis type per axis. See AxisType. public const int PrAxisType = 1006 Field Value int PrControlledAxes Pr1020: Number of controlled axes. public const int PrControlledAxes = 1020 Field Value int PrCutterCompType Pr5003: Cutter compensation startup type. See CutterCompensationType. public const int PrCutterCompType = 5003 Field Value int PrG54OffsetBase Pr5221: Base address (X) of G54 work coordinate offset. G54.Y at +1 (Pr5222), G54.Z at +2 (Pr5223). G55..G59 follow at stride 20. Syntec follows Fanuc-compatible numbering — see IsoCoordinateAddressMap. public const int PrG54OffsetBase = 5221 Field Value int PrG54p1P1OffsetBase Pr7001: Base address (X) of G54.1 P1 extended work coordinate offset. G54.1 P2..P48 follow at stride 20. See IsoCoordinateAddressMap. public const int PrG54p1P1OffsetBase = 7001 Field Value int PrMaxSpindleSpeed Pr3741: Maximum spindle speed (RPM). public const int PrMaxSpindleSpeed = 3741 Field Value int PrPeckRetraction Pr4002: G83 peck drilling retraction distance (microns). Syntec stores this value in microns; convert ×0.001 for mm. public const int PrPeckRetraction = 4002 Field Value int PrRapidRate Pr1420: Rapid traverse rate per axis (mm/min or deg/min). public const int PrRapidRate = 1420 Field Value int PrReferencePosition Pr1240: G28 first reference position per axis. public const int PrReferencePosition = 1240 Field Value int PrStrokeLimitNeg Pr1320: Negative stroke limit per axis (mm or deg). public const int PrStrokeLimitNeg = 1320 Field Value int PrStrokeLimitPos Pr1300: Positive stroke limit per axis (mm or deg). public const int PrStrokeLimitPos = 1300 Field Value int Properties AxisPr1006 Pr1006: Axis type per axis. See AxisType. See AxisNames. See IsRotaryAxis(string). public Dictionary AxisPr1006 { get; set; } Property Value Dictionary AxisPr1240 Pr1240: G28 first reference position per axis. See IHomeMcConfig. See GetHomePosition(string). See SetHomePosition(string, double). public Dictionary AxisPr1240 { get; set; } Property Value Dictionary AxisPr1420 Pr1420: Rapid traverse rate per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisPr1420 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int ControlledAxisCount Number of controlled axes. Delegates to Pr1020. public int ControlledAxisCount { get; set; } Property Value int CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable CutterCompType Cutter compensation startup type. Delegates to Pr5003. public CutterCompensationType CutterCompType { get; set; } Property Value CutterCompensationType Default3Axis Default 3-axis Syntec milling machine. public static SyntecParameterTable Default3Axis { get; } Property Value SyntecParameterTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Pr3741. public double MaxSpindleSpeed_rpm { get; set; } Property Value double PeckRetractionDistance_mm G83 peck drilling clearance distance above the previous stroke bottom before re-entering at feed (mm). public double PeckRetractionDistance_mm { get; } Property Value double Remarks Syntec Pr4002 stores peck retraction distance in microns. Multiply by 0.001 to convert to mm. Pr1020 Pr1020: Number of controlled axes. See ControlledAxisCount. public int Pr1020 { get; set; } Property Value int Pr3741 Pr3741: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Pr3741 { get; set; } Property Value double Pr5003 Pr5003: Cutter compensation startup type. See CutterCompType. public CutterCompensationType Pr5003 { get; set; } Property Value CutterCompensationType RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? XName public static string XName { get; } Property Value string Methods GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d" + "summary": "Class SyntecParameterTable Namespace Hi.NcParsers.Dependencys.Syntec Assembly HiMech.dll Syntec controller parameter table. Stores system parameters (single value) and axis parameters (per-axis value) following Syntec Pr-prefixed parameter numbering. Syntec is largely Fanuc-compatible in parameter numbering, but some parameters differ in unit or interpretation. For example, Pr4002 (peck retraction) is stored in microns whereas Fanuc #4002 stores in mm. public class SyntecParameterTable : ControllerParameterTableBase, IHomeMcConfig, IMachineAxisConfig, IRapidFeedrateConfig, IStrokeLimitConfig, ICannedCycleConfig, IIsoCoordinateConfig, INcDependency, IMakeXmlSource Inheritance object ControllerParameterTableBase SyntecParameterTable Implements IHomeMcConfig IMachineAxisConfig IRapidFeedrateConfig IStrokeLimitConfig ICannedCycleConfig IIsoCoordinateConfig INcDependency IMakeXmlSource Inherited Members ControllerParameterTableBase.GetLinearAxisRapidRate_mmdmin(string) ControllerParameterTableBase.GetRotaryAxisRapidRate_degdmin(string) ControllerParameterTableBase.SetLinearAxisRapidRate_mmdmin(string, double) ControllerParameterTableBase.SetRotaryAxisRapidRate_degdmin(string, double) ControllerParameterTableBase.GetPositiveLimit(string) ControllerParameterTableBase.GetNegativeLimit(string) ControllerParameterTableBase.SetPositiveLimit(string, double) ControllerParameterTableBase.SetNegativeLimit(string, double) ControllerParameterTableBase.SystemParams ControllerParameterTableBase.AxisParams ControllerParameterTableBase.IntAxisParams ControllerParameterTableBase.AxisParam(int) ControllerParameterTableBase.IntAxisParam(int) ControllerParameterTableBase.GetHomePosition(string) ControllerParameterTableBase.SetHomePosition(string, double) ControllerParameterTableBase.AxisNames ControllerParameterTableBase.IsRotaryAxis(string) ControllerParameterTableBase.SetAxis(string, AxisType) ControllerParameterTableBase.RemoveAxis(string) ControllerParameterTableBase.ConfigureRotaryAxis(string, double, double) ControllerParameterTableBase.ReadXml(XElement) ControllerParameterTableBase.WriteXml(string) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks CutterCompensationType is shared with Fanuc because both follow the same ISO cutter compensation standard. Consider relocating to the shared Hi.NcParsers.Dependencys namespace if more brands need it. Constructors SyntecParameterTable() Initializes a new instance, seeding the ISO G54-G59 / G54.1 P-table coordinate offsets with their default values. public SyntecParameterTable() SyntecParameterTable(XElement) Initializes a new instance by deserializing from src. public SyntecParameterTable(XElement src) Parameters src XElement XML element produced by MakeXmlSource(string, string, bool). Fields PrAxisType Pr1006: Axis type per axis. See AxisType. public const int PrAxisType = 1006 Field Value int PrControlledAxes Pr1020: Number of controlled axes. public const int PrControlledAxes = 1020 Field Value int PrCutterCompType Pr5003: Cutter compensation startup type. See CutterCompensationType. public const int PrCutterCompType = 5003 Field Value int PrG54OffsetBase Pr5221: Base address (X) of G54 work coordinate offset. G54.Y at +1 (Pr5222), G54.Z at +2 (Pr5223). G55..G59 follow at stride 20. Syntec follows Fanuc-compatible numbering — see IsoCoordinateAddressMap. public const int PrG54OffsetBase = 5221 Field Value int PrG54p1P1OffsetBase Pr7001: Base address (X) of G54.1 P1 extended work coordinate offset. G54.1 P2..P48 follow at stride 20. See IsoCoordinateAddressMap. public const int PrG54p1P1OffsetBase = 7001 Field Value int PrMaxSpindleSpeed Pr3741: Maximum spindle speed (RPM). public const int PrMaxSpindleSpeed = 3741 Field Value int PrPeckRetraction Pr4002: G83 peck drilling retraction distance (microns). Syntec stores this value in microns; convert ×0.001 for mm. public const int PrPeckRetraction = 4002 Field Value int PrRapidRate Pr1420: Rapid traverse rate per axis (mm/min or deg/min). public const int PrRapidRate = 1420 Field Value int PrReferencePosition Pr1240: G28 first reference position per axis. public const int PrReferencePosition = 1240 Field Value int PrStrokeLimitNeg Pr1320: Negative stroke limit per axis (mm or deg). public const int PrStrokeLimitNeg = 1320 Field Value int PrStrokeLimitPos Pr1300: Positive stroke limit per axis (mm or deg). public const int PrStrokeLimitPos = 1300 Field Value int Properties AxisPr1006 Pr1006: Axis type per axis. See AxisType. See AxisNames. See IsRotaryAxis(string). public Dictionary AxisPr1006 { get; set; } Property Value Dictionary AxisPr1240 Pr1240: G28 first reference position per axis. See IHomeMcConfig. See GetHomePosition(string). See SetHomePosition(string, double). public Dictionary AxisPr1240 { get; set; } Property Value Dictionary AxisPr1420 Pr1420: Rapid traverse rate per axis (mm/min or deg/min). See IRapidFeedrateConfig. public Dictionary AxisPr1420 { get; set; } Property Value Dictionary AxisTypeParamId Parameter/MD/MP number for axis type (linear/rotary/spindle). protected override int AxisTypeParamId { get; } Property Value int ControlledAxisCount Number of controlled axes. Delegates to Pr1020. public int ControlledAxisCount { get; set; } Property Value int CoordinateIds Enumerates the G-code coordinate ids that this provider currently has data for. public IEnumerable CoordinateIds { get; } Property Value IEnumerable CutterCompType Cutter compensation startup type. Delegates to Pr5003. public CutterCompensationType CutterCompType { get; set; } Property Value CutterCompensationType Default3Axis Default 3-axis Syntec milling machine. public static SyntecParameterTable Default3Axis { get; } Property Value SyntecParameterTable IdAttributeName XML attribute name for the parameter ID (“ParamId”, “MdId”, “MpId”). protected override string IdAttributeName { get; } Property Value string MaxSpindleSpeed_rpm Maximum spindle speed in RPM. Delegates to Pr3741. public double MaxSpindleSpeed_rpm { get; set; } Property Value double PeckRetractionDistance_mm G83 peck drilling clearance distance above the previous stroke bottom before re-entering at feed (mm). public double PeckRetractionDistance_mm { get; } Property Value double Remarks Syntec Pr4002 stores peck retraction distance in microns. Multiply by 0.001 to convert to mm. Pr1020 Pr1020: Number of controlled axes. See ControlledAxisCount. public int Pr1020 { get; set; } Property Value int Pr3741 Pr3741: Maximum spindle speed (RPM). See MaxSpindleSpeed_rpm. public double Pr3741 { get; set; } Property Value double Pr5003 Pr5003: Cutter compensation startup type. See CutterCompType. public CutterCompensationType Pr5003 { get; set; } Property Value CutterCompensationType RapidRateParamId Parameter/MD/MP number for rapid traverse rate per axis. Null if not defined for this controller brand. protected override int? RapidRateParamId { get; } Property Value int? ReferencePositionParamId Parameter/MD/MP number for reference position (G28 home). protected override int ReferencePositionParamId { get; } Property Value int StrokeLimitNegParamId Parameter/MD/MP number for negative stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitNegParamId { get; } Property Value int? StrokeLimitPosParamId Parameter/MD/MP number for positive stroke limit per axis. Null if not defined for this controller brand. protected override int? StrokeLimitPosParamId { get; } Property Value int? XName XML element name used to register this dependency with XFactory. public static string XName { get; } Property Value string Methods GetCoordinateOffset(string) Gets the offset for the given G-code coordinate id. Returns null when no offset is configured for that id by this provider (callers iterate the next provider, or fall back to Zero). public Vec3d GetCoordinateOffset(string coordId) Parameters coordId string Returns Vec3d MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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. SetCoordinateOffset(string, Vec3d) Sets the offset for the given G-code coordinate id. public void SetCoordinateOffset(string coordId, Vec3d offset) Parameters coordId string offset Vec3d" }, "api/Hi.NcParsers.Dependencys.Syntec.html": { "href": "api/Hi.NcParsers.Dependencys.Syntec.html", @@ -3692,47 +3707,47 @@ "api/Hi.NcParsers.Dependencys.html": { "href": "api/Hi.NcParsers.Dependencys.html", "title": "Namespace Hi.NcParsers.Dependencys | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Dependencys Classes CncBrandDependency Explicit CNC controller brand identifier carried in NcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. ControllerParameterTableBase Base class for brand-specific controller parameter tables. Provides shared data structures, XML IO, and IHomeMcConfig IMachineAxisConfig implementations. Subclasses define brand-specific parameter numbers, XML attribute names, and derived convenience properties. HeidenhainDatumTable 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. On real Heidenhain controllers, preset and datum tables are separate disk files (e.g. TNC:\\table\\preset.pr, *.d) — distinct from MP-prefixed Machine Parameters (held by HeidenhainParameterTable). HiNC mirrors that separation by keeping this dependency independent of HeidenhainParameterTable. Implements IIsoCoordinateConfig by mapping the ISO/DIN G54–G59 codes to preset rows 1–6, the conventional Heidenhain compatibility mapping for ISO/DIN programs running on a Heidenhain. IsoCoordinateAddressMap Fanuc-style ISO coordinate parameter address mapping. G54–G59 → #5221+ (stride 20, three consecutive numbers per entry for X/Y/Z), G54.1 P1–P48 → #7001+ (stride 20). Shared between FanucParameterTable (which calls these “ParamId”) and SyntecParameterTable (which calls them “PrId”) because both follow the same numeric scheme. Interfaces IBlockSkipConfig Runtime state of the controller's Block Delete / Block Skip switches. Present in NcDependencyList exposes this to the runner so that blocks whose head carries / or /N (parsed by BlockSkipSyntax into BlockSkip) are skipped at semantic time. Layers are 1..9; Layer 1 corresponds to the bare / prefix. Controllers (Fanuc / Syntec / Mazak / Siemens) let each layer be toggled independently via panel switches or system parameters. When this dependency is absent from NcDependencyList, no block is skipped (safest default: simulate the full machining). The syntax still consumes the / prefix so no UnparsedText--Remaining diagnostic is produced. ICannedCycleConfig Canned cycle configuration parameters. Implemented by brand-specific parameter tables (e.g., FanucParameterTable for Fanuc #4002, SyntecParameterTable for Syntec Pr4002) and by FallbackConfig as a safety net. Siemens and Heidenhain specify peck clearance per-call (CYCLE83 parameter / CYCL DEF), so their tables do not implement this interface. The FallbackConfig provides the default value in those cases. IHomeMcConfig G28 first reference position (home machine coordinate) per axis. IIsoCoordinateConfig ISO work coordinate offset provider. Maps a G-code work coordinate id (e.g. “G54”, “G59.2”, “G54.1P1”) to a machine-coordinate offset Vec3d. Implementations include IsoCoordinateTable (brand-agnostic standalone storage), FanucParameterTable / SyntecParameterTable (parameter-table integration via real Fanuc/Syntec parameter numbers #5221+ for G54–G59 and #7001+ for G54.1 P1–P48), SiemensFrameTable (Sinumerik $P_UIFR frames), and HeidenhainDatumTable (Heidenhain preset rows). IMachineAxisConfig Machine axis configuration: which axes exist and their types. Compatible with Fanuc, Siemens, Heidenhain, Mazak, Okuma. INcDependency IPowerResettable Marks an INcDependency that holds volatile state which must be cleared when the controller performs a power reset (power off then on). Implementers should clear only the volatile subset they own (e.g. Fanuc common volatile macro variables #100-#499), and leave persistent state untouched (e.g. #500-#999, controller parameters). Call-frame local state (Fanuc #1-#33, Heidenhain Q200-Q1199) is NOT in scope — that lives in the SyntaxPiece JSON dataflow and is bounded by call activation, not power cycle. IRapidFeedrateConfig Provides per-axis rapid traverse feedrate for motion semantics. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1420, Siemens MD32000, Heidenhain MP1010). IStrokeLimitConfig Per-axis stroke (travel) limits. Unit is mm for linear axes, deg for rotary axes. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1300/#1320, Siemens MD36100/MD36110, Heidenhain MP420/MP430). IToolOffsetConfig 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. IToolingMcConfig Machine position axes move to during tool change (M06). Enums AxisType Axis type: linear (translation), rotary (rotation), or spindle (speed/positioning dual mode)." + "summary": "Namespace Hi.NcParsers.Dependencys Classes CncBrandDependency Explicit CNC controller brand identifier carried in NcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. ControllerParameterTableBase Base class for brand-specific controller parameter tables. Provides shared data structures, XML IO, and IHomeMcConfig IMachineAxisConfig implementations. Subclasses define brand-specific parameter numbers, XML attribute names, and derived convenience properties. HeidenhainDatumTable 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. On real Heidenhain controllers, preset and datum tables are separate disk files (e.g. TNC:\\table\\preset.pr, *.d) — distinct from MP-prefixed Machine Parameters (held by HeidenhainParameterTable). HiNC mirrors that separation by keeping this dependency independent of HeidenhainParameterTable. Implements IIsoCoordinateConfig by mapping the ISO/DIN G54–G59 codes to preset rows 1–6, the conventional Heidenhain compatibility mapping for ISO/DIN programs running on a Heidenhain. IsoCoordinateAddressMap Fanuc-style ISO coordinate parameter address mapping. G54–G59 → #5221+ (stride 20, three consecutive numbers per entry for X/Y/Z), G54.1 P1–P48 → #7001+ (stride 20). Shared between FanucParameterTable (which calls these “ParamId”) and SyntecParameterTable (which calls them “PrId”) because both follow the same numeric scheme. Interfaces IBlockSkipConfig Runtime state of the controller's Block Delete / Block Skip switches. Present in NcDependencyList exposes this to the runner so that blocks whose head carries / or /N (parsed by BlockSkipSyntax into BlockSkip) are skipped at semantic time. Layers are 1..9; Layer 1 corresponds to the bare / prefix. Controllers (Fanuc / Syntec / Mazak / Siemens) let each layer be toggled independently via panel switches or system parameters. When this dependency is absent from NcDependencyList, no block is skipped (safest default: simulate the full machining). The syntax still consumes the / prefix so no UnparsedText--Remaining diagnostic is produced. ICannedCycleConfig Canned cycle configuration parameters. Implemented by brand-specific parameter tables (e.g., FanucParameterTable for Fanuc #4002, SyntecParameterTable for Syntec Pr4002) and by FallbackConfig as a safety net. Siemens and Heidenhain specify peck clearance per-call (CYCLE83 parameter / CYCL DEF), so their tables do not implement this interface. The FallbackConfig provides the default value in those cases. IHomeMcConfig G28 first reference position (home machine coordinate) per axis. IIsoCoordinateConfig ISO work coordinate offset provider. Maps a G-code work coordinate id (e.g. “G54”, “G59.2”, “G54.1P1”) to a machine-coordinate offset Vec3d. Implementations include IsoCoordinateTable (brand-agnostic standalone storage), FanucParameterTable / SyntecParameterTable (parameter-table integration via real Fanuc/Syntec parameter numbers #5221+ for G54–G59 and #7001+ for G54.1 P1–P48), SiemensFrameTable (Sinumerik $P_UIFR frames), and HeidenhainDatumTable (Heidenhain preset rows). IMachineAxisConfig Machine axis configuration: which axes exist and their types. Compatible with Fanuc, Siemens, Heidenhain, Mazak, Okuma. INcDependency Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime. IPowerResettable Marks an INcDependency that holds volatile state which must be cleared when the controller performs a power reset (power off then on). Implementers should clear only the volatile subset they own (e.g. Fanuc common volatile macro variables #100-#499), and leave persistent state untouched (e.g. #500-#999, controller parameters). Call-frame local state (Fanuc #1-#33, Heidenhain Q200-Q1199) is NOT in scope — that lives in the SyntaxPiece JSON dataflow and is bounded by call activation, not power cycle. IRapidFeedrateConfig Provides per-axis rapid traverse feedrate for motion semantics. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1420, Siemens MD32000, Heidenhain MP1010). IStrokeLimitConfig Per-axis stroke (travel) limits. Unit is mm for linear axes, deg for rotary axes. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1300/#1320, Siemens MD36100/MD36110, Heidenhain MP420/MP430). IToolOffsetConfig 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. IToolingMcConfig Machine position axes move to during tool change (M06). Enums AxisType Axis type: linear (translation), rotary (rotation), or spindle (speed/positioning dual mode)." }, "api/Hi.NcParsers.IGetSentence.html": { "href": "api/Hi.NcParsers.IGetSentence.html", "title": "Interface IGetSentence | HiAPI-C# 2025", - "summary": "Interface IGetSentence Namespace Hi.NcParsers Assembly HiMech.dll Abstraction for a source that carries a Sentence. public interface IGetSentence 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) Methods GetSentence() Sentence GetSentence() Returns Sentence" + "summary": "Interface IGetSentence Namespace Hi.NcParsers Assembly HiMech.dll Abstraction for a source that carries a Sentence. public interface IGetSentence 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) Methods GetSentence() Returns the source Sentence carried by this object. Sentence GetSentence() Returns Sentence" }, "api/Hi.NcParsers.Initializers.HomeMcInitializer.html": { "href": "api/Hi.NcParsers.Initializers.HomeMcInitializer.html", "title": "Class HomeMcInitializer | HiAPI-C# 2025", - "summary": "Class HomeMcInitializer Namespace Hi.NcParsers.Initializers Assembly HiMech.dll Sets the initial MachineCoordinateState on the first SyntaxPiece from IHomeMcConfig and IMachineAxisConfig. Only configured linear axes are written; rotary axes (which typically have no home) are omitted — downstream readers must tolerate missing axis keys. public class HomeMcInitializer : INcInitializer, IMakeXmlSource Inheritance object HomeMcInitializer Implements INcInitializer IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HomeMcInitializer() public HomeMcInitializer() HomeMcInitializer(XElement) public HomeMcInitializer(XElement src) Parameters src XElement Properties Name public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Initialize(JsonObject, List) public void Initialize(JsonObject jsonObject, List ncDependencyList) Parameters jsonObject JsonObject ncDependencyList List 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." + "summary": "Class HomeMcInitializer Namespace Hi.NcParsers.Initializers Assembly HiMech.dll Sets the initial MachineCoordinateState on the first SyntaxPiece from IHomeMcConfig and IMachineAxisConfig. Only configured linear axes are written; rotary axes (which typically have no home) are omitted — downstream readers must tolerate missing axis keys. public class HomeMcInitializer : INcInitializer, IMakeXmlSource Inheritance object HomeMcInitializer Implements INcInitializer IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HomeMcInitializer() Creates a new HomeMcInitializer. public HomeMcInitializer() HomeMcInitializer(XElement) Creates a HomeMcInitializer from an XML source element. public HomeMcInitializer(XElement src) Parameters src XElement Properties Name Display/registration name of the initializer. public string Name { get; } Property Value string XName XML element name used to register and serialize this initializer. public static string XName { get; } Property Value string Methods Initialize(JsonObject, List) Writes initial sections into jsonObject, optionally using values resolved from ncDependencyList. public void Initialize(JsonObject jsonObject, List ncDependencyList) Parameters jsonObject JsonObject ncDependencyList List 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." }, "api/Hi.NcParsers.Initializers.INcInitializer.html": { "href": "api/Hi.NcParsers.Initializers.INcInitializer.html", "title": "Interface INcInitializer | HiAPI-C# 2025", - "summary": "Interface INcInitializer Namespace Hi.NcParsers.Initializers Assembly HiMech.dll public interface INcInitializer : IMakeXmlSource Inherited Members IMakeXmlSource.MakeXmlSource(string, string, bool) 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) Properties Name string Name { get; } Property Value string Methods Initialize(JsonObject, List) void Initialize(JsonObject jsonObject, List ncDependencyList) Parameters jsonObject JsonObject ncDependencyList List" + "summary": "Interface INcInitializer Namespace Hi.NcParsers.Initializers Assembly HiMech.dll Populates the init-block JSON sections (e.g. home position, static defaults) before the soft-NC runtime processes any source NC syntax. Implementations such as HomeMcInitializer and StaticInitializer write into the supplied JsonObject. public interface INcInitializer : IMakeXmlSource Inherited Members IMakeXmlSource.MakeXmlSource(string, string, bool) 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) Properties Name Display/registration name of the initializer. string Name { get; } Property Value string Methods Initialize(JsonObject, List) Writes initial sections into jsonObject, optionally using values resolved from ncDependencyList. void Initialize(JsonObject jsonObject, List ncDependencyList) Parameters jsonObject JsonObject ncDependencyList List" }, "api/Hi.NcParsers.Initializers.StaticInitializer.html": { "href": "api/Hi.NcParsers.Initializers.StaticInitializer.html", "title": "Class StaticInitializer | HiAPI-C# 2025", - "summary": "Class StaticInitializer Namespace Hi.NcParsers.Initializers Assembly HiMech.dll public class StaticInitializer : INcInitializer, IMakeXmlSource Inheritance object StaticInitializer Implements INcInitializer IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors StaticInitializer() public StaticInitializer() StaticInitializer(XElement) public StaticInitializer(XElement src) Parameters src XElement Properties Default public static StaticInitializer Default { get; } Property Value StaticInitializer HeidenhainDefault Heidenhain default: no coordinate offset active (datum tables used on demand). public static StaticInitializer HeidenhainDefault { get; } Property Value StaticInitializer Initialization public JsonObject Initialization { get; set; } Property Value JsonObject IsoDefault ISO/Fanuc default: G54 active, canned-cycle cancelled (G80). public static StaticInitializer IsoDefault { get; } Property Value StaticInitializer Name public string Name { get; } Property Value string SiemensDefault Siemens default: G54 active, canned-cycle cancelled (G80). public static StaticInitializer SiemensDefault { get; } Property Value StaticInitializer XName public static string XName { get; } Property Value string Methods Initialize(JsonObject, List) public void Initialize(JsonObject jsonObject, List ncDependencyList) Parameters jsonObject JsonObject ncDependencyList List 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." + "summary": "Class StaticInitializer Namespace Hi.NcParsers.Initializers Assembly HiMech.dll Merges a fixed Initialization JSON snippet into the init-block JSON. Used to seed brand-default sections (e.g. G54, G80) before any source NC syntax is processed. public class StaticInitializer : INcInitializer, IMakeXmlSource Inheritance object StaticInitializer Implements INcInitializer IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors StaticInitializer() Creates an empty StaticInitializer. public StaticInitializer() StaticInitializer(XElement) Creates a StaticInitializer from an XML source element, reading the embedded JSON from the Initialization child element. public StaticInitializer(XElement src) Parameters src XElement Properties Default An empty StaticInitializer with no preset sections. public static StaticInitializer Default { get; } Property Value StaticInitializer HeidenhainDefault Heidenhain default: no coordinate offset active (datum tables used on demand). public static StaticInitializer HeidenhainDefault { get; } Property Value StaticInitializer Initialization JSON sections to merge into the init-block JSON during Initialize(JsonObject, List). public JsonObject Initialization { get; set; } Property Value JsonObject IsoDefault ISO/Fanuc default: G54 active, canned-cycle cancelled (G80). public static StaticInitializer IsoDefault { get; } Property Value StaticInitializer Name Display/registration name of the initializer. public string Name { get; } Property Value string SiemensDefault Siemens default: G54 active, canned-cycle cancelled (G80). public static StaticInitializer SiemensDefault { get; } Property Value StaticInitializer XName XML element name used to register and serialize this initializer. public static string XName { get; } Property Value string Methods Initialize(JsonObject, List) Writes initial sections into jsonObject, optionally using values resolved from ncDependencyList. public void Initialize(JsonObject jsonObject, List ncDependencyList) Parameters jsonObject JsonObject ncDependencyList List 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." }, "api/Hi.NcParsers.Initializers.html": { "href": "api/Hi.NcParsers.Initializers.html", "title": "Namespace Hi.NcParsers.Initializers | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Initializers Classes HomeMcInitializer Sets the initial MachineCoordinateState on the first SyntaxPiece from IHomeMcConfig and IMachineAxisConfig. Only configured linear axes are written; rotary axes (which typically have no home) are omitted — downstream readers must tolerate missing axis keys. StaticInitializer Interfaces INcInitializer" + "summary": "Namespace Hi.NcParsers.Initializers Classes HomeMcInitializer Sets the initial MachineCoordinateState on the first SyntaxPiece from IHomeMcConfig and IMachineAxisConfig. Only configured linear axes are written; rotary axes (which typically have no home) are omitted — downstream readers must tolerate missing axis keys. StaticInitializer Merges a fixed Initialization JSON snippet into the init-block JSON. Used to seed brand-default sections (e.g. G54, G80) before any source NC syntax is processed. Interfaces INcInitializer Populates the init-block JSON sections (e.g. home position, static defaults) before the soft-NC runtime processes any source NC syntax. Implementations such as HomeMcInitializer and StaticInitializer write into the supplied JsonObject." }, "api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html", "title": "Class CleanupSyntax | HiAPI-C# 2025", - "summary": "Class CleanupSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll 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 Inheritance object CleanupSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples new CleanupSyntax(\"ProgramToMcTransform\", \"ToolOrientation\") Constructors CleanupSyntax(params string[]) public CleanupSyntax(params string[] keys) Parameters keys string[] CleanupSyntax(XElement) public CleanupSyntax(XElement src) Parameters src XElement Properties Keys JSON keys to remove from JsonObject each block. public List Keys { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class CleanupSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll 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 Inheritance object CleanupSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples new CleanupSyntax(\"ProgramToMcTransform\", \"ToolOrientation\") Constructors CleanupSyntax(params string[]) Creates a CleanupSyntax seeded with the given keys. public CleanupSyntax(params string[] keys) Parameters keys string[] JSON keys to remove on each block; copied into Keys. CleanupSyntax(XElement) Reconstructs a CleanupSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public CleanupSyntax(XElement src) Parameters src XElement XML element with one Key child per entry in Keys. Properties Keys JSON keys to remove from JsonObject each block. public List Keys { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html", "title": "Class ProgramXyzBackfillSyntax | HiAPI-C# 2025", - "summary": "Class ProgramXyzBackfillSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug / observability back-fill: writes ProgramXyz onto blocks that did not have it written by upstream logic syntaxes (e.g. HomeMcInitializer block, chain-change blocks that only updated MC via a rotary-only path), only when the effective program position has changed from the last block that stored a ProgramXyz. Skips the block entirely when either of these holds: The block already has ProgramXyz written — e.g. by ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax, ReferenceReturnSyntax, McAbcXyzFallbackSyntax, or RadiusCompensationSyntax. The effective value equals the last stored value (modal-only block such as pure F / S / M / plane-select — no program motion). Only back-fills the root block; ItemsKey items are intentionally skipped (they are managed by Hi.NcParsers.LogicSyntaxs.CompoundMotionSyntaxUtil and per-cycle syntaxes that already write the right per-item ProgramXyz). Placement: end of NcSyntaxList, after UnconsumedCheckSyntax. Runs purely as a bookkeeping pass — no other syntax / semantic in the default pipeline reads the additional back-fill values it emits, so the runtime output (IAct stream) is unchanged whether this syntax is present or not. The only observable effect is additional ProgramXyz entries in the cached syntax-pieces dump, which makes block-to-block debugging and diffing easier. public class ProgramXyzBackfillSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzBackfillSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramXyzBackfillSyntax() public ProgramXyzBackfillSyntax() Fields AddedByValue Value written under AddedByKey on the ProgramXyz JSON object when this syntax synthesized the value. Absent on sub-objects authored by LogicSyntaxs-stage writers (e.g. ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax) — the AddedByKey is only present when a post-Logic / Inspection stage writer (this syntax, or ModalCarrySyntax) injected the sub-object. Purely informational — no downstream syntax / semantic reads this marker. Intended for cache-file diffing: its presence means \"this block did not originally command program motion; the value is a modal back-fill to make debug dumps more complete\". public const string AddedByValue = \"Backfill\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ProgramXyzBackfillSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug / observability back-fill: writes ProgramXyz onto blocks that did not have it written by upstream logic syntaxes (e.g. HomeMcInitializer block, chain-change blocks that only updated MC via a rotary-only path), only when the effective program position has changed from the last block that stored a ProgramXyz. Skips the block entirely when either of these holds: The block already has ProgramXyz written — e.g. by ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax, ReferenceReturnSyntax, McAbcXyzFallbackSyntax, or RadiusCompensationSyntax. The effective value equals the last stored value (modal-only block such as pure F / S / M / plane-select — no program motion). Only back-fills the root block; ItemsKey items are intentionally skipped (they are managed by Hi.NcParsers.LogicSyntaxs.CompoundMotionSyntaxUtil and per-cycle syntaxes that already write the right per-item ProgramXyz). Placement: end of NcSyntaxList, after UnconsumedCheckSyntax. Runs purely as a bookkeeping pass — no other syntax / semantic in the default pipeline reads the additional back-fill values it emits, so the runtime output (IAct stream) is unchanged whether this syntax is present or not. The only observable effect is additional ProgramXyz entries in the cached syntax-pieces dump, which makes block-to-block debugging and diffing easier. public class ProgramXyzBackfillSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzBackfillSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramXyzBackfillSyntax() Creates a default ProgramXyzBackfillSyntax. public ProgramXyzBackfillSyntax() Fields AddedByValue Value written under AddedByKey on the ProgramXyz JSON object when this syntax synthesized the value. Absent on sub-objects authored by LogicSyntaxs-stage writers (e.g. ProgramXyzSyntax, G53p1RotaryPositionSyntax, MachineCoordSelectSyntax) — the AddedByKey is only present when a post-Logic / Inspection stage writer (this syntax, or ModalCarrySyntax) injected the sub-object. Purely informational — no downstream syntax / semantic reads this marker. Intended for cache-file diffing: its presence means \"this block did not originally command program motion; the value is a modal back-fill to make debug dumps more complete\". public const string AddedByValue = \"Backfill\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html", "title": "Class SnapshotSyntax | HiAPI-C# 2025", - "summary": "Class SnapshotSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug-time JsonObject capture: deep-clones every key on the current JsonObject (except the SnapshotKey envelope itself) into json[SnapshotKey][SectionName], leaving the rest of the block untouched. Insertable at any position in NcSyntaxList — placement determines what stage the dump captures (e.g. drop after the Parsing bundle for \"after-parsing\", drop after the Logic bundle for \"after-logic\"). Two instances with different SectionName values can coexist on the same pipeline and their dumps end up under sibling keys of the same SnapshotKey envelope, so a single cache file shows the data at every captured stage in one place. Excluding the SnapshotKey envelope from the clone keeps each captured section flat: it reflects \"everything else on the block at that stage\", and re-running through additional SnapshotSyntax instances never nests past one level. Set IsEnabled = false to keep the configuration in place but skip the capture (no JSON mutation, no allocation) — convenient for toggling a debug pipeline without removing the entries. public class SnapshotSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SnapshotSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SnapshotSyntax() public SnapshotSyntax() SnapshotSyntax(string) public SnapshotSyntax(string sectionName) Parameters sectionName string SnapshotSyntax(XElement) public SnapshotSyntax(XElement src) Parameters src XElement Fields SnapshotKey Top-level JSON envelope key under which captured sections are stored. Each SnapshotSyntax instance writes a sibling key (named by SectionName) inside this envelope. public const string SnapshotKey = \"Snapshot\" Field Value string Properties IsEnabled When false, Build(LazyLinkedListNode, List, NcDiagnosticProgress) is a no-op — keeps the entry in the syntax list for easy toggling without re-editing the project. public bool IsEnabled { get; set; } Property Value bool Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string SectionName Sub-key inside the SnapshotKey envelope under which this instance writes its capture. Two instances configured with the same SectionName are last-writer-wins on a given block. Required: Build(LazyLinkedListNode, List, NcDiagnosticProgress) throws InvalidOperationException when this is null or empty (a misconfiguration the user should see, not a silent skip). public string SectionName { get; set; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class SnapshotSyntax Namespace Hi.NcParsers.InspectionSyntaxs Assembly HiMech.dll Debug-time JsonObject capture: deep-clones every key on the current JsonObject (except the SnapshotKey envelope itself) into json[SnapshotKey][SectionName], leaving the rest of the block untouched. Insertable at any position in NcSyntaxList — placement determines what stage the dump captures (e.g. drop after the Parsing bundle for \"after-parsing\", drop after the Logic bundle for \"after-logic\"). Two instances with different SectionName values can coexist on the same pipeline and their dumps end up under sibling keys of the same SnapshotKey envelope, so a single cache file shows the data at every captured stage in one place. Excluding the SnapshotKey envelope from the clone keeps each captured section flat: it reflects \"everything else on the block at that stage\", and re-running through additional SnapshotSyntax instances never nests past one level. Set IsEnabled = false to keep the configuration in place but skip the capture (no JSON mutation, no allocation) — convenient for toggling a debug pipeline without removing the entries. public class SnapshotSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SnapshotSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SnapshotSyntax() Creates a SnapshotSyntax with no SectionName set yet. public SnapshotSyntax() SnapshotSyntax(string) Creates a SnapshotSyntax with the given SectionName. public SnapshotSyntax(string sectionName) Parameters sectionName string Sub-key under SnapshotKey for this instance's capture. SnapshotSyntax(XElement) Reconstructs a SnapshotSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public SnapshotSyntax(XElement src) Parameters src XElement XML element carrying SectionName and IsEnabled; null is treated as defaults. Fields SnapshotKey Top-level JSON envelope key under which captured sections are stored. Each SnapshotSyntax instance writes a sibling key (named by SectionName) inside this envelope. public const string SnapshotKey = \"Snapshot\" Field Value string Properties IsEnabled When false, Build(LazyLinkedListNode, List, NcDiagnosticProgress) is a no-op — keeps the entry in the syntax list for easy toggling without re-editing the project. public bool IsEnabled { get; set; } Property Value bool Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string SectionName Sub-key inside the SnapshotKey envelope under which this instance writes its capture. Two instances configured with the same SectionName are last-writer-wins on a given block. Required: Build(LazyLinkedListNode, List, NcDiagnosticProgress) throws InvalidOperationException when this is null or empty (a misconfiguration the user should see, not a silent skip). public string SectionName { get; set; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html": { "href": "api/Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html", @@ -3777,7 +3792,7 @@ "api/Hi.NcParsers.Keywords.CsScript.html": { "href": "api/Hi.NcParsers.Keywords.CsScript.html", "title": "Class CsScript | HiAPI-C# 2025", - "summary": "Class CsScript Namespace Hi.NcParsers.Keywords Assembly HiMech.dll public class CsScript Inheritance object CsScript 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties BeginScript The script effect before the NC block excuting. public string BeginScript { get; set; } Property Value string EndScript The script effect after the NC block excuted. public string EndScript { get; set; } Property Value string" + "summary": "Class CsScript Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section-key holder for inline C# scripts attached to an NC block. Carries BeginScript (run before the block's acts) and EndScript (run after). Resolved by CsScriptBeginSemantic and CsScriptEndSemantic. public class CsScript Inheritance object CsScript 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties BeginScript The script effect before the NC block excuting. public string BeginScript { get; set; } Property Value string EndScript The script effect after the NC block excuted. public string EndScript { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.Dwell.html": { "href": "api/Hi.NcParsers.Keywords.Dwell.html", @@ -3794,6 +3809,11 @@ "title": "Namespace Hi.NcParsers.Keywords.Fanuc | HiAPI-C# 2025", "summary": "Namespace Hi.NcParsers.Keywords.Fanuc Classes FanucKeywords Fanuc-specific G-code and M-code constants. For ISO standard codes shared across brands, see IsoKeywords." }, + "api/Hi.NcParsers.Keywords.FanucPathSmoothing.html": { + "href": "api/Hi.NcParsers.Keywords.FanucPathSmoothing.html", + "title": "Class FanucPathSmoothing | HiAPI-C# 2025", + "summary": "Class FanucPathSmoothing Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section data holder for IFanucPathSmoothingDef. public class FanucPathSmoothing : PathSmoothing, IFanucPathSmoothingDef, IPathSmoothingDef Inheritance object PathSmoothing FanucPathSmoothing Implements IFanucPathSmoothingDef IPathSmoothingDef Inherited Members PathSmoothing.IsEnabled PathSmoothing.Term 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Level Fanuc G05.1 R precision / smoothness level number (typically 1..10). null when the source NC line did not specify R. Ignored when IsEnabled is false. public int? Level { get; set; } Property Value int?" + }, "api/Hi.NcParsers.Keywords.Feedrate.html": { "href": "api/Hi.NcParsers.Keywords.Feedrate.html", "title": "Class Feedrate | HiAPI-C# 2025", @@ -3817,12 +3837,12 @@ "api/Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html": { "href": "api/Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html", "title": "Interface ICyclDef | HiAPI-C# 2025", - "summary": "Interface ICyclDef Namespace Hi.NcParsers.Keywords.Heidenhain Assembly HiMech.dll public interface ICyclDef 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) Properties CyclHead Head content of the CYCL DEF (can be title like “DATUM SETTING” or parameters like “Q339=+1”). string CyclHead { get; set; } Property Value string" + "summary": "Interface ICyclDef Namespace Hi.NcParsers.Keywords.Heidenhain Assembly HiMech.dll JSON section schema for Heidenhain CYCL DEF blocks. The CyclHead string captures either the cycle title (e.g. “DATUM SETTING”) or a parameter line (e.g. “Q339=+1”). public interface ICyclDef 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) Properties CyclHead Head content of the CYCL DEF (can be title like “DATUM SETTING” or parameters like “Q339=+1”). string CyclHead { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.Heidenhain.html": { "href": "api/Hi.NcParsers.Keywords.Heidenhain.html", "title": "Namespace Hi.NcParsers.Keywords.Heidenhain | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Keywords.Heidenhain Interfaces ICyclDef" + "summary": "Namespace Hi.NcParsers.Keywords.Heidenhain Interfaces ICyclDef JSON section schema for Heidenhain CYCL DEF blocks. The CyclHead string captures either the cycle title (e.g. “DATUM SETTING”) or a parameter line (e.g. “Q339=+1”)." }, "api/Hi.NcParsers.Keywords.IArcMotionDef.html": { "href": "api/Hi.NcParsers.Keywords.IArcMotionDef.html", @@ -3849,6 +3869,11 @@ "title": "Interface IDwellDef | HiAPI-C# 2025", "summary": "Interface IDwellDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay. public interface IDwellDef 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) Examples { \"Dwell\": { \"Time\": 0.5 } } Properties Time Dwell time in seconds. double Time { get; set; } Property Value double" }, + "api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html": { + "href": "api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html", + "title": "Interface IFanucPathSmoothingDef | HiAPI-C# 2025", + "summary": "Interface IFanucPathSmoothingDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Fanuc-specific path smoothing state written by FanucPathSmoothingSyntax. Extends IPathSmoothingDef with the Fanuc G05.1 R argument (precision / smoothness level number, R1..R10 mapping to controller-internal tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / Q1 enable), so IsEnabled covers it directly — no raw Q field is stored. JSON section key remains nameof(PathSmoothing) so generic readers (cache dumps, modal carry, UI) can cast to IPathSmoothingDef across all controller brands; brand-specific readers cast to IFanucPathSmoothingDef for the extra fields. public interface IFanucPathSmoothingDef : IPathSmoothingDef Inherited Members IPathSmoothingDef.IsEnabled IPathSmoothingDef.Term 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) Examples \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\", \"Level\": 1 } Properties Level Fanuc G05.1 R precision / smoothness level number (typically 1..10). null when the source NC line did not specify R. Ignored when IsEnabled is false. int? Level { get; set; } Property Value int?" + }, "api/Hi.NcParsers.Keywords.IFeedrateDef.html": { "href": "api/Hi.NcParsers.Keywords.IFeedrateDef.html", "title": "Interface IFeedrateDef | HiAPI-C# 2025", @@ -3857,7 +3882,7 @@ "api/Hi.NcParsers.Keywords.IFlagsDef.html": { "href": "api/Hi.NcParsers.Keywords.IFlagsDef.html", "title": "Interface IFlagsDef | HiAPI-C# 2025", - "summary": "Interface IFlagsDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll public interface IFlagsDef 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) Properties Flags Known flags that it takes effect. List Flags { get; set; } Property Value List" + "summary": "Interface IFlagsDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll JSON section schema describing the modal/non-modal flags that take effect on an NC block. Each entry in Flags is a brand-specific keyword recognized by the soft-NC runtime. public interface IFlagsDef 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) Properties Flags Known flags that it takes effect. List Flags { get; set; } Property Value List" }, "api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html": { "href": "api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html", @@ -3877,12 +3902,12 @@ "api/Hi.NcParsers.Keywords.IParsingDef.html": { "href": "api/Hi.NcParsers.Keywords.IParsingDef.html", "title": "Interface IParsingDef | HiAPI-C# 2025", - "summary": "Interface IParsingDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll public interface IParsingDef 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) Properties Parsing JsonNode Parsing { get; set; } Property Value JsonNode" + "summary": "Interface IParsingDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll JSON section schema carrying the raw, brand-specific parsing trace for an NC block. The Parsing node holds intermediate parser output used by downstream syntaxes and diagnostics. public interface IParsingDef 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) Properties Parsing Raw parsing trace JSON for the current block. JsonNode Parsing { get; set; } Property Value JsonNode" }, "api/Hi.NcParsers.Keywords.IPathSmoothingDef.html": { "href": "api/Hi.NcParsers.Keywords.IPathSmoothingDef.html", "title": "Interface IPathSmoothingDef | HiAPI-C# 2025", - "summary": "Interface IPathSmoothingDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Path smoothing state written by PathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. public interface IPathSmoothingDef 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) Examples \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\" } Properties IsEnabled True when path smoothing is active (Q1), false when cancelled (Q0). bool IsEnabled { get; set; } Property Value bool Term CNC term that controls this feature (e.g., “G05.1”). string Term { get; set; } Property Value string" + "summary": "Interface IPathSmoothingDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Path smoothing state. The base interface is brand-agnostic; controller brands extend it with their own argument fields (e.g. IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). Fanuc-flavour writes are produced by FanucPathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. public interface IPathSmoothingDef 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) Examples \"PathSmoothing\": { \"IsEnabled\": true, \"Term\": \"G05.1\" } Properties IsEnabled True when path smoothing is active (Q1), false when cancelled (Q0). bool IsEnabled { get; set; } Property Value bool Term CNC term that controls this feature (e.g., “G05.1”). string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.IPlaneSelectDef.html": { "href": "api/Hi.NcParsers.Keywords.IPlaneSelectDef.html", @@ -3907,7 +3932,7 @@ "api/Hi.NcParsers.Keywords.IProgramXyzDef.html": { "href": "api/Hi.NcParsers.Keywords.IProgramXyzDef.html", "title": "Interface IProgramXyzDef | HiAPI-C# 2025", - "summary": "Interface IProgramXyzDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll public interface IProgramXyzDef 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) Properties ProgramXyz JsonObject ProgramXyz { get; set; } Property Value JsonObject" + "summary": "Interface IProgramXyzDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll JSON section schema carrying the program-coordinate position commanded on the current block. Written by ProgramXyzSyntax before the ProgramToMcTransform chain composes it into machine coordinates. public interface IProgramXyzDef 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) Properties ProgramXyz Program-coordinate XYZ (and optional ABC) for the current block. JsonObject ProgramXyz { get; set; } Property Value JsonObject" }, "api/Hi.NcParsers.Keywords.IRadiusCompensationDef.html": { "href": "api/Hi.NcParsers.Keywords.IRadiusCompensationDef.html", @@ -3942,7 +3967,7 @@ "api/Hi.NcParsers.Keywords.ITransformationDef.html": { "href": "api/Hi.NcParsers.Keywords.ITransformationDef.html", "title": "Interface ITransformationDef | HiAPI-C# 2025", - "summary": "Interface ITransformationDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. public interface ITransformationDef 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) Examples \"ProgramToMcTransform\": [ {\"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]}, {\"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1]}, {\"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1]}, {\"Source\": \"PivotTransform\", \"Kind\": \"Dynamic\", \"Mat4d\": [cosC,sinC,0,0, -sinC,cosC,0,0, 0,0,1,0, px,py,pz,1]} ] Properties ProgramToMcTransform JsonArray ProgramToMcTransform { get; set; } Property Value JsonArray" + "summary": "Interface ITransformationDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. public interface ITransformationDef 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) Examples \"ProgramToMcTransform\": [ {\"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]}, {\"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1]}, {\"Source\": \"CoordinateOffset\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1]}, {\"Source\": \"PivotTransform\", \"Kind\": \"Dynamic\", \"Mat4d\": [cosC,sinC,0,0, -sinC,cosC,0,0, 0,0,1,0, px,py,pz,1]} ] Properties ProgramToMcTransform Ordered chain of named ProgramXyz → MachineCoordinate transformation entries. See the type-level remarks for the entry schema and composition rule. JsonArray ProgramToMcTransform { get; set; } Property Value JsonArray" }, "api/Hi.NcParsers.Keywords.IUnitDef.html": { "href": "api/Hi.NcParsers.Keywords.IUnitDef.html", @@ -3952,12 +3977,12 @@ "api/Hi.NcParsers.Keywords.IUnparsedTextDef.html": { "href": "api/Hi.NcParsers.Keywords.IUnparsedTextDef.html", "title": "Interface IUnparsedTextDef | HiAPI-C# 2025", - "summary": "Interface IUnparsedTextDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll public interface IUnparsedTextDef 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) Properties UnparsedText string UnparsedText { get; set; } Property Value string" + "summary": "Interface IUnparsedTextDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll JSON section schema carrying the residual block text that was not consumed by any registered syntax. Used for diagnostics and round-trip preservation. public interface IUnparsedTextDef 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) Properties UnparsedText Residual NC block text not matched by any syntax. string UnparsedText { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.IndexNote.html": { "href": "api/Hi.NcParsers.Keywords.IndexNote.html", "title": "Class IndexNote | HiAPI-C# 2025", - "summary": "Class IndexNote Namespace Hi.NcParsers.Keywords Assembly HiMech.dll public class IndexNote Inheritance object IndexNote 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Number public int Number { get; set; } Property Value int Symbol public string Symbol { get; set; } Property Value string" + "summary": "Class IndexNote Namespace Hi.NcParsers.Keywords Assembly HiMech.dll JSON-section data shape pairing a single-character address symbol (e.g. ‘O’, ‘N’) with its numeric index, used to annotate program/sequence numbers on an NC block. public class IndexNote Inheritance object IndexNote 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Number Numeric value associated with Symbol. public int Number { get; set; } Property Value int Symbol Address symbol (e.g. “O” for program number, “N” for sequence number). public string Symbol { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html": { "href": "api/Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html", @@ -3982,12 +4007,12 @@ "api/Hi.NcParsers.Keywords.PathSmoothing.html": { "href": "api/Hi.NcParsers.Keywords.PathSmoothing.html", "title": "Class PathSmoothing | HiAPI-C# 2025", - "summary": "Class PathSmoothing Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section key holder for IPathSmoothingDef. public class PathSmoothing : IPathSmoothingDef Inheritance object PathSmoothing Implements IPathSmoothingDef 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties IsEnabled True when path smoothing is active (Q1), false when cancelled (Q0). public bool IsEnabled { get; set; } Property Value bool Term CNC term that controls this feature (e.g., “G05.1”). public string Term { get; set; } Property Value string" + "summary": "Class PathSmoothing Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section key holder for IPathSmoothingDef. public class PathSmoothing : IPathSmoothingDef Inheritance object PathSmoothing Implements IPathSmoothingDef Derived FanucPathSmoothing 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties IsEnabled True when path smoothing is active (Q1), false when cancelled (Q0). public bool IsEnabled { get; set; } Property Value bool Term CNC term that controls this feature (e.g., “G05.1”). public string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.PlaneSelect.html": { "href": "api/Hi.NcParsers.Keywords.PlaneSelect.html", "title": "Class PlaneSelect | HiAPI-C# 2025", - "summary": "Class PlaneSelect Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section key holder for IPlaneSelectDef. public class PlaneSelect : IPlaneSelectDef Inheritance object PlaneSelect Implements IPlaneSelectDef 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields XY public const string XY = \"XY\" Field Value string YZ public const string YZ = \"YZ\" Field Value string ZX public const string ZX = \"ZX\" Field Value string Properties Plane Active plane axis-pair (XY, ZX, or YZ). public string Plane { get; set; } Property Value string Term NC term of the plane-select code on this block (G17/G18/G19). public string Term { get; set; } Property Value string Methods GetNormalAxisIndex(string) Perpendicular (normal) axis index for the plane. XY→2 (Z normal), ZX→1 (Y normal), YZ→0 (X normal). public static int GetNormalAxisIndex(string plane) Parameters plane string Returns int" + "summary": "Class PlaneSelect Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section key holder for IPlaneSelectDef. public class PlaneSelect : IPlaneSelectDef Inheritance object PlaneSelect Implements IPlaneSelectDef 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields XY Plane identifier for the XY plane (Z normal). public const string XY = \"XY\" Field Value string YZ Plane identifier for the YZ plane (X normal). public const string YZ = \"YZ\" Field Value string ZX Plane identifier for the ZX plane (Y normal). public const string ZX = \"ZX\" Field Value string Properties Plane Active plane axis-pair (XY, ZX, or YZ). public string Plane { get; set; } Property Value string Term NC term of the plane-select code on this block (G17/G18/G19). public string Term { get; set; } Property Value string Methods GetNormalAxisIndex(string) Perpendicular (normal) axis index for the plane. XY→2 (Z normal), ZX→1 (Y normal), YZ→0 (X normal). public static int GetNormalAxisIndex(string plane) Parameters plane string Returns int" }, "api/Hi.NcParsers.Keywords.Positioning.html": { "href": "api/Hi.NcParsers.Keywords.Positioning.html", @@ -4047,7 +4072,7 @@ "api/Hi.NcParsers.Keywords.ToolHeightCompensation.html": { "href": "api/Hi.NcParsers.Keywords.ToolHeightCompensation.html", "title": "Class ToolHeightCompensation | HiAPI-C# 2025", - "summary": "Class ToolHeightCompensation Namespace Hi.NcParsers.Keywords Assembly HiMech.dll public class ToolHeightCompensation : IToolHeightCompensationDef Inheritance object ToolHeightCompensation Implements IToolHeightCompensationDef 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties OffsetId Generic offset selector: Fanuc H number, Heidenhain T number, Mazak/Okuma H number. For Siemens (T+D addressing), see ISiemensToolOffsetConfig. public int OffsetId { get; set; } Property Value int Offset_mm Derived effective tool height compensation in mm. Computed from Term and OffsetId: looks up the offset table for OffsetId, obtains the effective height (geometry minus wear), then applies sign from Term (positive for G43/G43.4, negative for G44, zero for G49). public double Offset_mm { get; set; } Property Value double Term CNC term for tool height compensation: “G43”, “G43.4”, “G44”, “G49”. Brand-specific syntaxes may write equivalent terms (e.g., “TRAORI” for Siemens, “M128” for Heidenhain). public string Term { get; set; } Property Value string" + "summary": "Class ToolHeightCompensation Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section key holder for IToolHeightCompensationDef. public class ToolHeightCompensation : IToolHeightCompensationDef Inheritance object ToolHeightCompensation Implements IToolHeightCompensationDef 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties OffsetId Generic offset selector: Fanuc H number, Heidenhain T number, Mazak/Okuma H number. For Siemens (T+D addressing), see ISiemensToolOffsetConfig. public int OffsetId { get; set; } Property Value int Offset_mm Derived effective tool height compensation in mm. Computed from Term and OffsetId: looks up the offset table for OffsetId, obtains the effective height (geometry minus wear), then applies sign from Term (positive for G43/G43.4, negative for G44, zero for G49). public double Offset_mm { get; set; } Property Value double Term CNC term for tool height compensation: “G43”, “G43.4”, “G44”, “G49”. Brand-specific syntaxes may write equivalent terms (e.g., “TRAORI” for Siemens, “M128” for Heidenhain). public string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.Unit.html": { "href": "api/Hi.NcParsers.Keywords.Unit.html", @@ -4057,42 +4082,42 @@ "api/Hi.NcParsers.Keywords.html": { "href": "api/Hi.NcParsers.Keywords.html", "title": "Namespace Hi.NcParsers.Keywords | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Keywords Classes BlockSkip Optional block skip marker extracted from the head of an NC block. ISO 6983 / Fanuc calls this feature Block Delete (BDT switch); Siemens / Syntec / Mazak use the same / prefix with matching behaviour. The section is only present on blocks that carry a / prefix. Whether the block's NC commands are actually skipped at runtime depends on IBlockSkipConfig: Config absent or the Layer bit OFF → the / prefix is consumed, Body is left null, and the rest of the line parses as a regular NC block (comments still take effect). Config present and the Layer bit ON → the rest of the line is moved into Body and cleared from UnparsedText, so downstream parsing syntaxes see nothing and no NC action is emitted. Comment syntaxes run before this one so comments (and any embedded CsScript) still take effect. Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. CannedCycle Section key holder + concrete implementation for ICannedCycleDef. Comment Comment extracted from an NC block. Symbol identifies the comment style; Text holds the content without the symbol. Downstream syntaxes (e.g., CsScript) may further trim Text after extracting embedded markers. CompoundMotion Section key holder + concrete implementation for ICompoundMotionDef. Coolant Section key holder + concrete implementation for ICoolantDef. CoordinateOffset Work coordinate offset state written by IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. Siemens: G54–G57 + G505–G599 (extended), G500 to cancel. Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift). CsScript Dwell Section key holder + concrete implementation for IDwellDef. Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote IsoLocalCoordinateOffset ISO/Fanuc-family local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. G52 X Y Z installs a local coordinate-system shift that stacks on top of the active G54-G59 work offset. The cancel mechanism is to write G52 X0 Y0 Z0 (or hit M30 / reset) — there is no separate G code for \"cancel\". The offset vector is therefore always modal: zero is a valid modal value, not a \"disabled\" state, so the section is recorded on every block. Brand-specific kin: Siemens TRANS/ATRANS (which can also carry rotation/scale/mirror) and Heidenhain TRANS DATUM are handled by their own syntaxes and write to their own sections — they do not share this key, because their data shapes are richer. MachineCoordinateState Section key holder for IMachineCoordinateStateDef. MotionEvent Section key holder + concrete implementation for IMotionEventDef. MotionState Section key holder + concrete implementation for IMotionStateDef. PathSmoothing Section key holder for IPathSmoothingDef. PlaneSelect Section key holder for IPlaneSelectDef. Positioning Section key holder + concrete implementation for IPositioningDef. ProgramBoundary Program start/end delimiter line (e.g., % in Fanuc/Mazak/Syntec, %_N_xxx_MPF in Siemens). Not a comment — the controller uses it as a tape/file boundary marker. ProgramEnd Section key holder for IProgramEndDef. ProgramStop Section key holder + concrete implementation for IProgramStopDef. RadiusCompensation Section key holder + concrete implementation for IRadiusCompensationDef. SpindleControl Section key holder + concrete implementation for ISpindleControlDef. SpindleOrientation Section key holder + concrete implementation for ISpindleOrientationDef. SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Unit Section key holder + concrete implementation for IUnitDef. Interfaces IArcMotionDef Arc motion data written by CircularMotionSyntax. Stored under the Hi.Motion JSON section alongside IMotionEventDef properties. ICannedCycleDef Canned cycle modal state (Group 09). Captures which cycle is currently active, its return mode (G98/G99), and the resolved absolute parameter set used for modal lookback. Written by CannedCycleResolveSyntax on every block that belongs to the canned-cycle group: cycle code present (G81/G82/G83/G73/G84/G74/G85/G86/G89/G76/G87), modal repeat (cycle still active, only coordinates given), or explicit cancel (G80). Term = \"G80\" is the explicit-cancel sentinel used by FindPreviousActiveCycle(LazyLinkedListNode, string[]) to terminate modal lookback without ambiguity; regular blocks (e.g. G00 X.. Y..) simply omit the section entirely. ICompoundMotionDef Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) ICoolantDef Coolant state (M07 mist / M08 flood / M09 off). Written by CoolantSyntax. Modal — persists until changed. IsOn is the on/off convenience flag (true for M07 and M08, false for M09). Mode carries the abstract kind (Flood / Mist / Off) for consumers that need to distinguish flood vs mist. IDwellDef Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay. IFeedrateDef Feedrate state written by FeedrateSyntax. Property names are used as JSON keys via nameof. ISO standard: F command + G94 (per minute) / G95 (per revolution). Supported by all major CNC brands. IFlagsDef IMachineCoordinateStateDef Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. IMotionEventDef One-shot motion event — present only on blocks that actually issue a motion command. Used by motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) as the trigger to emit motion IAct. NOT carried forward across blocks. Property names are used as JSON keys via nameof. IMotionStateDef Modal motion state — Group 01 G-code mode (G00 / G01 / G02 / G03 ...). Written on every block by LinearMotionSyntax / CircularMotionSyntax; carried across non-motion blocks by ModalCarrySyntax. Property names are used as JSON keys via nameof. Unlike sibling modal sections (Unit, PlaneSelect, Positioning) which carry both a brand-specific Term and a brand-neutral conventional field, MotionState intentionally keeps only Term: the brand-neutral semantic (\"what kind of motion happened\") lives on the sibling one-shot MotionEvent (Form = McLinear / McArc / ClLinear / ClArc). State here is purely the modal latch of the last Group-01 G-code so downstream FindPrevious* can resume motion-mode bookkeeping. IParsingDef IPathSmoothingDef Path smoothing state written by PathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. IPlaneSelectDef Active plane selection state written by PlaneSelectSyntax. Property names are used as JSON keys via nameof. ISO: G17/G18/G19. Heidenhain: implicit from L/CC syntax. Term carries the brand-specific G-code; Plane stores the conventional, brand-neutral axis-pair name (XY/ZX/YZ). IPositioningDef Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by PositioningSyntax, consumed by IncrementalResolveSyntax, canned cycle syntaxes, and MachineCoordSelectSyntax. Property names are used as JSON keys via nameof. Term is the brand-specific G-code (Fanuc/ISO G90/G91); Mode is the conventional, brand-neutral name (Absolute / Incremental). IProgramEndDef Program end marker (M02/M30). Written by ProgramEndSyntax. Other syntaxes (e.g. IsoLocalCoordinateOffsetSyntax) read this section to reset modal state instead of detecting M30 directly. IProgramStopDef Program-stop marker (M00 unconditional / M01 optional). Written by ProgramStopSyntax on each block that carries an M00/M01 flag. Non-modal: the section appears only on the exact block where the stop code is present. Distinct from IProgramEndDef (M02/M30, end of program). M00 halts execution unconditionally; the operator must press Cycle Start to resume. M01 is an optional stop gated by the operator's \"Optional Stop\" panel switch — ignored when the switch is off. This parsing-layer section records the NC intent; runtime / semantic layers decide whether to actually pause. IProgramXyzDef IRadiusCompensationDef Radius compensation state written by RadiusCompensationSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G41 (left), G42 (right), G40 (cancel). Heidenhain Klartext maps RL → G41, RR → G42, R0 → G40. When active, the tool path is offset perpendicular to the programmed path by Radius_mm; Side determines left vs right. The root ProgramXyz retains the user-programmed position; MachineCoordinate is overwritten to reflect the compensated path. ISpindleControlDef Spindle control item for use inside ItemsKey arrays. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleDirection. ISpindleOrientationDef Oriented spindle stop item for use inside ItemsKey arrays. Commands the spindle to stop at a specific angular position (OSS). Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleOrientation. ISpindleSpeedDef Spindle speed and direction state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO: S command for speed, M03/M04/M05 for direction. Heidenhain: M3/M4/M5. Siemens: M3/M4/M5 or SPOS. Direction is stored as the conventional SpindleDirection enum name (CW/CCW/STOP), not as brand-specific M-codes. ITiltTransformDef Tilt transform state written by tilt transform syntaxes. Property names are used as JSON keys via nameof. Managed commands (ISO/Fanuc): G68 (2D rotation), G68.2 (tilted work plane), G69 (cancel). Siemens equivalent: CYCLE800, ROT/AROT (handled by separate syntax). Heidenhain equivalent: PLANE SPATIAL / PLANE RESET (handled by separate syntax). IToolHeightCompensationDef 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). ITransformationDef Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. IUnitDef Unit-system state (ISO Group 06: G20 inch / G21 metric). Written by UnitModeSyntax. Modal. HiNC's NC pipeline works exclusively in millimetres. G21 is therefore a no-op confirmation of the default; G20 is reported as an Unsupported Error and callers are expected to pre-convert the NC program to metric before loading. IUnparsedTextDef" + "summary": "Namespace Hi.NcParsers.Keywords Classes BlockSkip Optional block skip marker extracted from the head of an NC block. ISO 6983 / Fanuc calls this feature Block Delete (BDT switch); Siemens / Syntec / Mazak use the same / prefix with matching behaviour. The section is only present on blocks that carry a / prefix. Whether the block's NC commands are actually skipped at runtime depends on IBlockSkipConfig: Config absent or the Layer bit OFF → the / prefix is consumed, Body is left null, and the rest of the line parses as a regular NC block (comments still take effect). Config present and the Layer bit ON → the rest of the line is moved into Body and cleared from UnparsedText, so downstream parsing syntaxes see nothing and no NC action is emitted. Comment syntaxes run before this one so comments (and any embedded CsScript) still take effect. Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. CannedCycle Section key holder + concrete implementation for ICannedCycleDef. Comment Comment extracted from an NC block. Symbol identifies the comment style; Text holds the content without the symbol. Downstream syntaxes (e.g., CsScript) may further trim Text after extracting embedded markers. CompoundMotion Section key holder + concrete implementation for ICompoundMotionDef. Coolant Section key holder + concrete implementation for ICoolantDef. CoordinateOffset Work coordinate offset state written by IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. Siemens: G54–G57 + G505–G599 (extended), G500 to cancel. Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift). CsScript Section-key holder for inline C# scripts attached to an NC block. Carries BeginScript (run before the block's acts) and EndScript (run after). Resolved by CsScriptBeginSemantic and CsScriptEndSemantic. Dwell Section key holder + concrete implementation for IDwellDef. FanucPathSmoothing Section data holder for IFanucPathSmoothingDef. Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote JSON-section data shape pairing a single-character address symbol (e.g. ‘O’, ‘N’) with its numeric index, used to annotate program/sequence numbers on an NC block. IsoLocalCoordinateOffset ISO/Fanuc-family local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. G52 X Y Z installs a local coordinate-system shift that stacks on top of the active G54-G59 work offset. The cancel mechanism is to write G52 X0 Y0 Z0 (or hit M30 / reset) — there is no separate G code for \"cancel\". The offset vector is therefore always modal: zero is a valid modal value, not a \"disabled\" state, so the section is recorded on every block. Brand-specific kin: Siemens TRANS/ATRANS (which can also carry rotation/scale/mirror) and Heidenhain TRANS DATUM are handled by their own syntaxes and write to their own sections — they do not share this key, because their data shapes are richer. MachineCoordinateState Section key holder for IMachineCoordinateStateDef. MotionEvent Section key holder + concrete implementation for IMotionEventDef. MotionState Section key holder + concrete implementation for IMotionStateDef. PathSmoothing Section key holder for IPathSmoothingDef. PlaneSelect Section key holder for IPlaneSelectDef. Positioning Section key holder + concrete implementation for IPositioningDef. ProgramBoundary Program start/end delimiter line (e.g., % in Fanuc/Mazak/Syntec, %_N_xxx_MPF in Siemens). Not a comment — the controller uses it as a tape/file boundary marker. ProgramEnd Section key holder for IProgramEndDef. ProgramStop Section key holder + concrete implementation for IProgramStopDef. RadiusCompensation Section key holder + concrete implementation for IRadiusCompensationDef. SpindleControl Section key holder + concrete implementation for ISpindleControlDef. SpindleOrientation Section key holder + concrete implementation for ISpindleOrientationDef. SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Section key holder for IToolHeightCompensationDef. Unit Section key holder + concrete implementation for IUnitDef. Interfaces IArcMotionDef Arc motion data written by CircularMotionSyntax. Stored under the Hi.Motion JSON section alongside IMotionEventDef properties. ICannedCycleDef Canned cycle modal state (Group 09). Captures which cycle is currently active, its return mode (G98/G99), and the resolved absolute parameter set used for modal lookback. Written by CannedCycleResolveSyntax on every block that belongs to the canned-cycle group: cycle code present (G81/G82/G83/G73/G84/G74/G85/G86/G89/G76/G87), modal repeat (cycle still active, only coordinates given), or explicit cancel (G80). Term = \"G80\" is the explicit-cancel sentinel used by FindPreviousActiveCycle(LazyLinkedListNode, string[]) to terminate modal lookback without ambiguity; regular blocks (e.g. G00 X.. Y..) simply omit the section entirely. ICompoundMotionDef Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) ICoolantDef Coolant state (M07 mist / M08 flood / M09 off). Written by CoolantSyntax. Modal — persists until changed. IsOn is the on/off convenience flag (true for M07 and M08, false for M09). Mode carries the abstract kind (Flood / Mist / Off) for consumers that need to distinguish flood vs mist. IDwellDef Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay. IFanucPathSmoothingDef Fanuc-specific path smoothing state written by FanucPathSmoothingSyntax. Extends IPathSmoothingDef with the Fanuc G05.1 R argument (precision / smoothness level number, R1..R10 mapping to controller-internal tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / Q1 enable), so IsEnabled covers it directly — no raw Q field is stored. JSON section key remains nameof(PathSmoothing) so generic readers (cache dumps, modal carry, UI) can cast to IPathSmoothingDef across all controller brands; brand-specific readers cast to IFanucPathSmoothingDef for the extra fields. IFeedrateDef Feedrate state written by FeedrateSyntax. Property names are used as JSON keys via nameof. ISO standard: F command + G94 (per minute) / G95 (per revolution). Supported by all major CNC brands. IFlagsDef JSON section schema describing the modal/non-modal flags that take effect on an NC block. Each entry in Flags is a brand-specific keyword recognized by the soft-NC runtime. IMachineCoordinateStateDef Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. IMotionEventDef One-shot motion event — present only on blocks that actually issue a motion command. Used by motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMotionSemantic) as the trigger to emit motion IAct. NOT carried forward across blocks. Property names are used as JSON keys via nameof. IMotionStateDef Modal motion state — Group 01 G-code mode (G00 / G01 / G02 / G03 ...). Written on every block by LinearMotionSyntax / CircularMotionSyntax; carried across non-motion blocks by ModalCarrySyntax. Property names are used as JSON keys via nameof. Unlike sibling modal sections (Unit, PlaneSelect, Positioning) which carry both a brand-specific Term and a brand-neutral conventional field, MotionState intentionally keeps only Term: the brand-neutral semantic (\"what kind of motion happened\") lives on the sibling one-shot MotionEvent (Form = McLinear / McArc / ClLinear / ClArc). State here is purely the modal latch of the last Group-01 G-code so downstream FindPrevious* can resume motion-mode bookkeeping. IParsingDef JSON section schema carrying the raw, brand-specific parsing trace for an NC block. The Parsing node holds intermediate parser output used by downstream syntaxes and diagnostics. IPathSmoothingDef Path smoothing state. The base interface is brand-agnostic; controller brands extend it with their own argument fields (e.g. IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). Fanuc-flavour writes are produced by FanucPathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. IPlaneSelectDef Active plane selection state written by PlaneSelectSyntax. Property names are used as JSON keys via nameof. ISO: G17/G18/G19. Heidenhain: implicit from L/CC syntax. Term carries the brand-specific G-code; Plane stores the conventional, brand-neutral axis-pair name (XY/ZX/YZ). IPositioningDef Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by PositioningSyntax, consumed by IncrementalResolveSyntax, canned cycle syntaxes, and MachineCoordSelectSyntax. Property names are used as JSON keys via nameof. Term is the brand-specific G-code (Fanuc/ISO G90/G91); Mode is the conventional, brand-neutral name (Absolute / Incremental). IProgramEndDef Program end marker (M02/M30). Written by ProgramEndSyntax. Other syntaxes (e.g. IsoLocalCoordinateOffsetSyntax) read this section to reset modal state instead of detecting M30 directly. IProgramStopDef Program-stop marker (M00 unconditional / M01 optional). Written by ProgramStopSyntax on each block that carries an M00/M01 flag. Non-modal: the section appears only on the exact block where the stop code is present. Distinct from IProgramEndDef (M02/M30, end of program). M00 halts execution unconditionally; the operator must press Cycle Start to resume. M01 is an optional stop gated by the operator's \"Optional Stop\" panel switch — ignored when the switch is off. This parsing-layer section records the NC intent; runtime / semantic layers decide whether to actually pause. IProgramXyzDef JSON section schema carrying the program-coordinate position commanded on the current block. Written by ProgramXyzSyntax before the ProgramToMcTransform chain composes it into machine coordinates. IRadiusCompensationDef Radius compensation state written by RadiusCompensationSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G41 (left), G42 (right), G40 (cancel). Heidenhain Klartext maps RL → G41, RR → G42, R0 → G40. When active, the tool path is offset perpendicular to the programmed path by Radius_mm; Side determines left vs right. The root ProgramXyz retains the user-programmed position; MachineCoordinate is overwritten to reflect the compensated path. ISpindleControlDef Spindle control item for use inside ItemsKey arrays. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleDirection. ISpindleOrientationDef Oriented spindle stop item for use inside ItemsKey arrays. Commands the spindle to stop at a specific angular position (OSS). Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleOrientation. ISpindleSpeedDef Spindle speed and direction state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO: S command for speed, M03/M04/M05 for direction. Heidenhain: M3/M4/M5. Siemens: M3/M4/M5 or SPOS. Direction is stored as the conventional SpindleDirection enum name (CW/CCW/STOP), not as brand-specific M-codes. ITiltTransformDef Tilt transform state written by tilt transform syntaxes. Property names are used as JSON keys via nameof. Managed commands (ISO/Fanuc): G68 (2D rotation), G68.2 (tilted work plane), G69 (cancel). Siemens equivalent: CYCLE800, ROT/AROT (handled by separate syntax). Heidenhain equivalent: PLANE SPATIAL / PLANE RESET (handled by separate syntax). IToolHeightCompensationDef 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). ITransformationDef Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. IUnitDef Unit-system state (ISO Group 06: G20 inch / G21 metric). Written by UnitModeSyntax. Modal. HiNC's NC pipeline works exclusively in millimetres. G21 is therefore a no-op confirmation of the default; G20 is reported as an Unsupported Error and callers are expected to pre-convert the NC program to metric before loading. IUnparsedTextDef JSON section schema carrying the residual block text that was not consumed by any registered syntax. Used for diagnostics and round-trip preservation." }, "api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html", "title": "Class BackBoringSyntax | HiAPI-C# 2025", - "summary": "Class BackBoringSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. public class BackBoringSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BackBoringSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BackBoringSyntax() public BackBoringSyntax() BackBoringSyntax(XElement) public BackBoringSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class BackBoringSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. public class BackBoringSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BackBoringSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BackBoringSyntax() Initializes a new instance with default settings. public BackBoringSyntax() BackBoringSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public BackBoringSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html", "title": "Class BoringCycleSyntax | HiAPI-C# 2025", - "summary": "Class BoringCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class BoringCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BoringCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G86 emits SpindleControl items for spindle stop (before retract) and spindle restart CW (after retract). The restart assumes the previous direction was CW (M03), which is the typical boring setup. Constructors BoringCycleSyntax() public BoringCycleSyntax() BoringCycleSyntax(XElement) public BoringCycleSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class BoringCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class BoringCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BoringCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G86 emits SpindleControl items for spindle stop (before retract) and spindle restart CW (after retract). The restart assumes the previous direction was CW (M03), which is the typical boring setup. Constructors BoringCycleSyntax() Initializes a new instance with default settings. public BoringCycleSyntax() BoringCycleSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public BoringCycleSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html", "title": "Class CannedCycleResolveSyntax | HiAPI-C# 2025", - "summary": "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 object CannedCycleResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Default 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 public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "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 object CannedCycleResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html", "title": "Class CircularMotionSyntax | HiAPI-C# 2025", - "summary": "Class CircularMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. public class CircularMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CircularMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CircularMotionSyntax() public CircularMotionSyntax() CircularMotionSyntax(XElement) public CircularMotionSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class CircularMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. public class CircularMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CircularMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CircularMotionSyntax() Initializes a new instance with default settings. public CircularMotionSyntax() CircularMotionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public CircularMotionSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html", "title": "Class CoolantSyntax | HiAPI-C# 2025", - "summary": "Class CoolantSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. public class CoolantSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CoolantSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CoolantSyntax() public CoolantSyntax() CoolantSyntax(XElement) public CoolantSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class CoolantSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. public class CoolantSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CoolantSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors CoolantSyntax() Initializes a new instance with default settings. public CoolantSyntax() CoolantSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public CoolantSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html", "title": "Class CoordinateOffsetUtil | HiAPI-C# 2025", - "summary": "Class CoordinateOffsetUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. public static class CoordinateOffsetUtil Inheritance object CoordinateOffsetUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields TransformSource public const string TransformSource = \"CoordinateOffset\" Field Value string Methods ComposeTranslation(JsonObject, Vec3d) public static void ComposeTranslation(JsonObject json, Vec3d offset) Parameters json JsonObject offset Vec3d FindPreviousCoordinateId(LazyLinkedListNode) public static string FindPreviousCoordinateId(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns string GetCurrentCoordinateId(JsonObject) Gets CoordinateId from the current node's existing CoordinateOffset section (e.g., set by StaticInitializer). public static string GetCurrentCoordinateId(JsonObject json) Parameters json JsonObject Returns string ResolveOffset(IEnumerable, string) Resolves the offset for coordId by scanning every IIsoCoordinateConfig in ncDependencyList and returning the first non-null result. Returns null when no provider has data for this id (callers should fall back to Zero). Multi-provider iteration lets a brand parameter table cover the hardware-mapped subset (e.g. Fanuc G54–G59, G54.1 P1–P48 backed by real parameter numbers) while a standalone IsoCoordinateTable covers HiNC-extension ids the brand table does not handle (e.g. G59.1–G59.9). public static Vec3d ResolveOffset(IEnumerable ncDependencyList, string coordId) Parameters ncDependencyList IEnumerable coordId string Returns Vec3d WriteSection(JsonObject, string, Vec3d) public static void WriteSection(JsonObject json, string coordId, Vec3d offset) Parameters json JsonObject coordId string offset Vec3d" + "summary": "Class CoordinateOffsetUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. public static class CoordinateOffsetUtil Inheritance object CoordinateOffsetUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields TransformSource Identifier used as the transform source key when composing the coordinate offset translation into ProgramToMcTransform. public const string TransformSource = \"CoordinateOffset\" Field Value string Methods ComposeTranslation(JsonObject, Vec3d) Composes a translation matrix from the given offset and registers it under TransformSource in the block's transform stack. public static void ComposeTranslation(JsonObject json, Vec3d offset) Parameters json JsonObject Block JSON object to update. offset Vec3d Translation offset to apply. FindPreviousCoordinateId(LazyLinkedListNode) Walks the previous node and returns its CoordinateId if any; used for modal lookback when the current block does not specify one. public static string FindPreviousCoordinateId(LazyLinkedListNode node) Parameters node LazyLinkedListNode Current node to look back from. Returns string GetCurrentCoordinateId(JsonObject) Gets CoordinateId from the current node's existing CoordinateOffset section (e.g., set by StaticInitializer). public static string GetCurrentCoordinateId(JsonObject json) Parameters json JsonObject Returns string ResolveOffset(IEnumerable, string) Resolves the offset for coordId by scanning every IIsoCoordinateConfig in ncDependencyList and returning the first non-null result. Returns null when no provider has data for this id (callers should fall back to Zero). Multi-provider iteration lets a brand parameter table cover the hardware-mapped subset (e.g. Fanuc G54–G59, G54.1 P1–P48 backed by real parameter numbers) while a standalone IsoCoordinateTable covers HiNC-extension ids the brand table does not handle (e.g. G59.1–G59.9). public static Vec3d ResolveOffset(IEnumerable ncDependencyList, string coordId) Parameters ncDependencyList IEnumerable coordId string Returns Vec3d WriteSection(JsonObject, string, Vec3d) Writes the CoordinateOffset section with the given coordinate id and XYZ offset components. public static void WriteSection(JsonObject json, string coordId, Vec3d offset) Parameters json JsonObject Block JSON object to update. coordId string Coordinate system identifier (e.g., G54). offset Vec3d Offset translation in machine coordinates." }, "api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html", "title": "Class DrillingCycleSyntax | HiAPI-C# 2025", - "summary": "Class DrillingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class DrillingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object DrillingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G85 (feed retract) and G86 (spindle-stop retract) have different retract behaviors and require separate syntax classes. Constructors DrillingCycleSyntax() public DrillingCycleSyntax() DrillingCycleSyntax(XElement) public DrillingCycleSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class DrillingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class DrillingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object DrillingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G85 (feed retract) and G86 (spindle-stop retract) have different retract behaviors and require separate syntax classes. Constructors DrillingCycleSyntax() Initializes a new instance with default settings. public DrillingCycleSyntax() DrillingCycleSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public DrillingCycleSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Evaluation.EvalResult.html", @@ -4169,30 +4194,35 @@ "title": "Namespace Hi.NcParsers.LogicSyntaxs.Evaluation | HiAPI-C# 2025", "summary": "Namespace Hi.NcParsers.LogicSyntaxs.Evaluation Classes NcBinaryExpr Binary arithmetic on two operands (+ - * / or MOD). NcExpr AST root for a Fanuc Custom Macro B value expression. Concrete leaves and combinators sit alongside NcExpressionParser; walking is the job of NcExpressionEvaluator. NcExpressionEvaluator Walks an NcExpr AST and produces an EvalResult. Resolves #nnn via an IVariableLookup; built-in function names are matched case-insensitively against a fixed table. Phase-1 supports: SIN COS TAN ASIN ACOS ATAN SQRT ABS ROUND FIX FUP LN EXP POW. Trigonometric arguments and results are in degrees, matching Fanuc Custom Macro B convention. Unknown function names surface as UnsupportedFunctionCode; arity mismatches as ArgumentMismatchCode; division / MOD by zero and domain errors (e.g. SQRT[-1]) as MathErrorCode; vacant operands as VacantErrorCode. NcExpressionParser Recursive-descent parser for Fanuc Custom Macro B value expressions. Pure: takes a string, produces an NcExpr AST. Performs no variable lookup and no evaluation. Grammar (highest precedence last): expr := term (('+' | '-') term)* term := factor (('*' | '/' | 'MOD') factor)* factor := ('+' | '-')? primary primary := number | '#' integer | '#' '[' expr ']' | '[' expr ']' | ident '[' arglist ']' ('/' '[' expr ']')? arglist := expr (',' expr)* Function names are case-insensitive (SIN = sin); whitespace is skipped between tokens. The '/' '[' expr ']' tail captures the dual-bracket form Fanuc uses for ATAN[a]/[b]; non-ATAN callers that happen to use it produce a function with an extra arg, which the evaluator rejects with an arity error. NcFunctionExpr Built-in function call like SIN[x], SQRT[x], ATAN[a]/[b]. NcIndirectVariableExpr Indirect variable reference #[expr]. The inner expression is evaluated and truncated toward zero to obtain an integer; the lookup key is then Prefix concatenated with that integer (e.g. Prefix=\"#\", computed 124 → \"#124\"). NcLiteralExpr Numeric literal (e.g. 1.5, 15., .5, 1e-3). NcUnaryExpr Unary + or - applied to an operand. NcVariableExpr Direct variable reference; Key is the raw source token (e.g. \"#124\") passed verbatim to Get(string). Structs EvalResult Outcome of evaluating an NcExpr. Either a successful numeric value, or a failure with an error code matching the diagnostic catalogue used by reading / evaluator syntaxes. Interfaces IRuntimeVariableLookup Stateless variable lookup that needs per-block runtime context — the current SyntaxPiece node (for Previous traceback into runtime-state sections like MachineCoordinateState / ProgramXyz) and the dependency list (so the lookup can read from sibling dependencies without holding a static reference). Distinguished from IVariableLookup: that one is for long-lived dependencies that already hold their own data (parameter tables, tool-offset wrappers, retained-variable tables) and need no block context. IRuntimeVariableLookup is for context-sensitive resolutions configured declaratively on RuntimeVariableLookups. Implementations should be brand-specific (e.g. Fanuc #5001-#5043 position reads) and return null for keys outside their range so the evaluator's chain can fall through to the next lookup. IVariableLookup Resolves a Custom Macro B variable reference to its current numeric value, or null for vacant (Fanuc ) and out-of-scope alike. The key is the raw source token — Fanuc \"#124\", Heidenhain \"Q1\", Siemens \"R1\" — so the interface itself is brand-agnostic. Implementations are typically narrow (one per id range / per brand prefix) and parse the prefix locally; chain them at the call site by trying each in priority order until one returns a non-null value. A returned null is treated by NcExpressionEvaluator as vacant and surfaces as a Variable--Vacant failure when the value is consumed in arithmetic context. Enums NcBinaryOp Binary operators allowed in Fanuc Custom Macro B value expressions. NcUnaryOp Unary operators allowed in Fanuc Custom Macro B value expressions." }, + "api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html": { + "href": "api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html", + "title": "Class FanucPathSmoothingSyntax | HiAPI-C# 2025", + "summary": "Class FanucPathSmoothingSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. public class FanucPathSmoothingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FanucPathSmoothingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FanucPathSmoothingSyntax() Initializes a new instance with default settings. public FanucPathSmoothingSyntax() FanucPathSmoothingSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FanucPathSmoothingSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + }, "api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html", "title": "Class FeedrateSyntax | HiAPI-C# 2025", - "summary": "Class FeedrateSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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 Inheritance object FeedrateSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FeedrateSyntax() public FeedrateSyntax() FeedrateSyntax(XElement) public FeedrateSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class FeedrateSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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 Inheritance object FeedrateSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FeedrateSyntax() Initializes a new instance with default settings. public FeedrateSyntax() FeedrateSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FeedrateSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html", "title": "Class FineBoringSyntax | HiAPI-C# 2025", - "summary": "Class FineBoringSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. public class FineBoringSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FineBoringSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FineBoringSyntax() public FineBoringSyntax() FineBoringSyntax(XElement) public FineBoringSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class FineBoringSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. public class FineBoringSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object FineBoringSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FineBoringSyntax() Initializes a new instance with default settings. public FineBoringSyntax() FineBoringSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FineBoringSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html", "title": "Class G43p4RtcpSyntax | HiAPI-C# 2025", - "summary": "Class G43p4RtcpSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). public class G43p4RtcpSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G43p4RtcpSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors G43p4RtcpSyntax() public G43p4RtcpSyntax() G43p4RtcpSyntax(XElement) public G43p4RtcpSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class G43p4RtcpSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). public class G43p4RtcpSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G43p4RtcpSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors G43p4RtcpSyntax() Initializes a new instance with default settings. public G43p4RtcpSyntax() G43p4RtcpSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public G43p4RtcpSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html", "title": "Class G53p1RotaryPositionSyntax | HiAPI-C# 2025", - "summary": "Class G53p1RotaryPositionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. public class G53p1RotaryPositionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G53p1RotaryPositionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks When IMachineKinematics is not available (3-axis config), G53.1 is silently consumed with no positional effect. When G68.2 is not active, a validation error is reported. Optional explicit A/B/C on the G53.1 line (post-processor hints) override the IK result. These are read from Parsing via ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) and consumed to prevent McAbcSyntax from double-processing. Constructors G53p1RotaryPositionSyntax() public G53p1RotaryPositionSyntax() G53p1RotaryPositionSyntax(XElement) public G53p1RotaryPositionSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class G53p1RotaryPositionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. public class G53p1RotaryPositionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G53p1RotaryPositionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks When IMachineKinematics is not available (3-axis config), G53.1 is silently consumed with no positional effect. When G68.2 is not active, a validation error is reported. Optional explicit A/B/C on the G53.1 line (post-processor hints) override the IK result. These are read from Parsing via ConsumeAxis(JsonObject, string, Sentence, NcDiagnosticProgress) and consumed to prevent McAbcSyntax from double-processing. Constructors G53p1RotaryPositionSyntax() Initializes a new instance with default settings. public G53p1RotaryPositionSyntax() G53p1RotaryPositionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public G53p1RotaryPositionSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html", "title": "Class HeidenhainCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "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 object HeidenhainCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainCoordinateOffsetSyntax() public HeidenhainCoordinateOffsetSyntax() HeidenhainCoordinateOffsetSyntax(XElement) public HeidenhainCoordinateOffsetSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "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 object HeidenhainCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.html", @@ -4202,87 +4232,82 @@ "api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html", "title": "Class HighSpeedPeckCycleSyntax | HiAPI-C# 2025", - "summary": "Class HighSpeedPeckCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class HighSpeedPeckCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HighSpeedPeckCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HighSpeedPeckCycleSyntax() public HighSpeedPeckCycleSyntax() HighSpeedPeckCycleSyntax(XElement) public HighSpeedPeckCycleSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HighSpeedPeckCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class HighSpeedPeckCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HighSpeedPeckCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HighSpeedPeckCycleSyntax() Initializes a new instance with default settings. public HighSpeedPeckCycleSyntax() HighSpeedPeckCycleSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HighSpeedPeckCycleSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html", "title": "Class IncrementalResolveSyntax | HiAPI-C# 2025", - "summary": "Class IncrementalResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. public class IncrementalResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IncrementalResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IncrementalResolveSyntax(List>) public IncrementalResolveSyntax(List> workingPathList) Parameters workingPathList List> IncrementalResolveSyntax(XElement) public IncrementalResolveSyntax(XElement src) Parameters src XElement Properties Default public static IncrementalResolveSyntax Default { get; } Property Value IncrementalResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z) to convert from incremental to absolute when G91 is active. Each path is a list of segments navigating nested JSON objects. All matching paths are converted. public List> WorkingPathList { get; } Property Value List> Examples [[\"Parsing\"]] → Parsing root (normal XYZ) [[\"Parsing\", \"G28\"]] → Parsing.G28 (G28 intermediate XYZ) XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class IncrementalResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. public class IncrementalResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IncrementalResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IncrementalResolveSyntax(List>) Initializes a new instance with the given working path list. public IncrementalResolveSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for incremental axis values; see WorkingPathList. IncrementalResolveSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public IncrementalResolveSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with working paths covering the Parsing root and the Parsing.G28 intermediate XYZ subsection. public static IncrementalResolveSyntax Default { get; } Property Value IncrementalResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z) to convert from incremental to absolute when G91 is active. Each path is a list of segments navigating nested JSON objects. All matching paths are converted. public List> WorkingPathList { get; } Property Value List> Examples [[\"Parsing\"]] → Parsing root (normal XYZ) [[\"Parsing\", \"G28\"]] → Parsing.G28 (G28 intermediate XYZ) XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html", "title": "Class IsoCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "Class IsoCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. public class IsoCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoCoordinateOffsetSyntax() public IsoCoordinateOffsetSyntax() IsoCoordinateOffsetSyntax(XElement) public IsoCoordinateOffsetSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class IsoCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. public class IsoCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoCoordinateOffsetSyntax() Initializes a new instance with default settings. public IsoCoordinateOffsetSyntax() IsoCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoCoordinateOffsetSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html", "title": "Class IsoG68RotationSyntax | HiAPI-C# 2025", - "summary": "Class IsoG68RotationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). public class IsoG68RotationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68RotationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks 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. Constructors IsoG68RotationSyntax() public IsoG68RotationSyntax() IsoG68RotationSyntax(XElement) public IsoG68RotationSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class IsoG68RotationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). public class IsoG68RotationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68RotationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks 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. Constructors IsoG68RotationSyntax() Initializes a new instance with default settings. public IsoG68RotationSyntax() IsoG68RotationSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoG68RotationSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html", "title": "Class IsoG68p2TiltSyntax | HiAPI-C# 2025", - "summary": "Class IsoG68p2TiltSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). public class IsoG68p2TiltSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68p2TiltSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G68.2 optionally uses IMachineKinematics dependency for IK refinement. The ZXZ euler convention is Fanuc-specific: Rz(K) * Rx(J) * Rz(I) * Translate(origin). Optional A/B/C parameters are post-processor rotary axis hints. When present and IMachineKinematics is available, the tilt is computed as: kinematicRotation(postAbc) * orientationDelta * Translate(origin) where orientationDelta = kinematicRotation(ijkAbc).Inverse * ijkRotation preserves the exact IJK orientation while aligning with the post-processor's solution. Constructors IsoG68p2TiltSyntax() public IsoG68p2TiltSyntax() IsoG68p2TiltSyntax(XElement) public IsoG68p2TiltSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class IsoG68p2TiltSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). public class IsoG68p2TiltSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68p2TiltSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G68.2 optionally uses IMachineKinematics dependency for IK refinement. The ZXZ euler convention is Fanuc-specific: Rz(K) * Rx(J) * Rz(I) * Translate(origin). Optional A/B/C parameters are post-processor rotary axis hints. When present and IMachineKinematics is available, the tilt is computed as: kinematicRotation(postAbc) * orientationDelta * Translate(origin) where orientationDelta = kinematicRotation(ijkAbc).Inverse * ijkRotation preserves the exact IJK orientation while aligning with the post-processor's solution. Constructors IsoG68p2TiltSyntax() Initializes a new instance with default settings. public IsoG68p2TiltSyntax() IsoG68p2TiltSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoG68p2TiltSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html", "title": "Class IsoLocalCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "Class IsoLocalCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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 IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. public class IsoLocalCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoLocalCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoLocalCoordinateOffsetSyntax() public IsoLocalCoordinateOffsetSyntax() IsoLocalCoordinateOffsetSyntax(XElement) public IsoLocalCoordinateOffsetSyntax(XElement src) Parameters src XElement Fields TransformSource public const string TransformSource = \"IsoLocalCoordinateOffset\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class IsoLocalCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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 IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. public class IsoLocalCoordinateOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoLocalCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IsoLocalCoordinateOffsetSyntax() Initializes a new instance with default settings. public IsoLocalCoordinateOffsetSyntax() IsoLocalCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoLocalCoordinateOffsetSyntax(XElement src) Parameters src XElement Source XML element. Fields TransformSource Identifier used as the transform source key when composing the local coordinate offset translation into the transform chain. public const string TransformSource = \"IsoLocalCoordinateOffset\" Field Value string 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html", "title": "Class LinearMotionSyntax | HiAPI-C# 2025", - "summary": "Class LinearMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. public class LinearMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object LinearMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors LinearMotionSyntax() public LinearMotionSyntax() LinearMotionSyntax(XElement) public LinearMotionSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class LinearMotionSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. public class LinearMotionSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object LinearMotionSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors LinearMotionSyntax() Initializes a new instance with default settings. public LinearMotionSyntax() LinearMotionSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public LinearMotionSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html", "title": "Class MachineCoordSelectSyntax | HiAPI-C# 2025", - "summary": "Class MachineCoordSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Handles G53 (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, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 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 object MachineCoordSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G53 with full axes (G54 offset = 100,50,-200): Input: G53 G00 X0. Y0. Z0. Output: MachineCoordinate = (0, 0, 0) ProgramXyz = (-100, -50, 200) [mc * inverse(transform)] G53 with partial axes (only Z specified): Input: G53 Z0. Output: MachineCoordinate = (prevMcX, prevMcY, 0) ProgramXyz derived from MC * inverse(transform) Constructors MachineCoordSelectSyntax() public MachineCoordSelectSyntax() MachineCoordSelectSyntax(XElement) public MachineCoordSelectSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class MachineCoordSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Handles G53 (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, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 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 object MachineCoordSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G53 with full axes (G54 offset = 100,50,-200): Input: G53 G00 X0. Y0. Z0. Output: MachineCoordinate = (0, 0, 0) ProgramXyz = (-100, -50, 200) [mc * inverse(transform)] G53 with partial axes (only Z specified): Input: G53 Z0. Output: MachineCoordinate = (prevMcX, prevMcY, 0) ProgramXyz derived from MC * inverse(transform) 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 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html", "title": "Class McAbcCyclicPathSyntax | HiAPI-C# 2025", - "summary": "Class McAbcCyclicPathSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. public class McAbcCyclicPathSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcCyclicPathSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors McAbcCyclicPathSyntax() public McAbcCyclicPathSyntax() McAbcCyclicPathSyntax(XElement) public McAbcCyclicPathSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class McAbcCyclicPathSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. public class McAbcCyclicPathSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcCyclicPathSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors McAbcCyclicPathSyntax() Initializes a new instance with default settings. public McAbcCyclicPathSyntax() McAbcCyclicPathSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public McAbcCyclicPathSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html", "title": "Class McAbcSyntax | HiAPI-C# 2025", - "summary": "Class McAbcSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. public class McAbcSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class McAbcSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. public class McAbcSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html", "title": "Class McAbcXyzFallbackSyntax | HiAPI-C# 2025", - "summary": "Class McAbcXyzFallbackSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. public class McAbcXyzFallbackSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcXyzFallbackSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class McAbcXyzFallbackSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. public class McAbcXyzFallbackSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcXyzFallbackSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html", "title": "Class McXyzSyntax | HiAPI-C# 2025", - "summary": "Class McXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). public class McXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." - }, - "api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html": { - "href": "api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html", - "title": "Class PathSmoothingSyntax | HiAPI-C# 2025", - "summary": "Class PathSmoothingSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes G05.1 (high-precision contour / path smoothing) and records its modal state. Q1 enables, Q0 disables. The simulation does not alter the tool path — this is a controller-internal interpolation black box. public class PathSmoothingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PathSmoothingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors PathSmoothingSyntax() public PathSmoothingSyntax() PathSmoothingSyntax(XElement) public PathSmoothingSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class McXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). public class McXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html", "title": "Class PeckDrillingCycleSyntax | HiAPI-C# 2025", - "summary": "Class PeckDrillingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class PeckDrillingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PeckDrillingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G73 (high-speed peck) retracts only a small distance instead of fully back to R — see HighSpeedPeckCycleSyntax. Constructors PeckDrillingCycleSyntax() public PeckDrillingCycleSyntax() PeckDrillingCycleSyntax(XElement) public PeckDrillingCycleSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class PeckDrillingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class PeckDrillingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PeckDrillingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks G73 (high-speed peck) retracts only a small distance instead of fully back to R — see HighSpeedPeckCycleSyntax. Constructors PeckDrillingCycleSyntax() Initializes a new instance with default settings. public PeckDrillingCycleSyntax() PeckDrillingCycleSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public PeckDrillingCycleSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html", "title": "Class PivotTransformationSyntax | HiAPI-C# 2025", - "summary": "Class PivotTransformationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes the PivotTransformSource entry into ProgramToMcTransform on every block, capturing the Pn→MC kinematic rigid transform for the block's endpoint rotary state. Mirrors legacy HardNcLine.GetProgramXyz's use of McToPn(DVec3d) — without this entry, the transform chain would miss the rotary rotation on any block whose MachineCoordinate.ABC is non-zero, and McXyzSyntax (and ProgramXyzSyntax's inverse lookback) would silently drift. Scope is not limited to RTCP modal: as long as rotary axes are physically at a non-zero position (e.g. after a non-RTCP G00 B90 plus any subsequent motion), the kinematic chain still contributes a non-identity rigid transform that must appear in the endpoint chain. G43p4RtcpSyntax is orthogonal and only governs the dynamic-rotary KindKey tagging used by LinearMotionSyntax to pick the motion form. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the PivotTransform entry naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). public class PivotTransformationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PivotTransformationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors PivotTransformationSyntax() public PivotTransformationSyntax() PivotTransformationSyntax(XElement) public PivotTransformationSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class PivotTransformationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes the PivotTransformSource entry into ProgramToMcTransform on every block, capturing the Pn→MC kinematic rigid transform for the block's endpoint rotary state. Mirrors legacy HardNcLine.GetProgramXyz's use of McToPn(DVec3d) — without this entry, the transform chain would miss the rotary rotation on any block whose MachineCoordinate.ABC is non-zero, and McXyzSyntax (and ProgramXyzSyntax's inverse lookback) would silently drift. Scope is not limited to RTCP modal: as long as rotary axes are physically at a non-zero position (e.g. after a non-RTCP G00 B90 plus any subsequent motion), the kinematic chain still contributes a non-identity rigid transform that must appear in the endpoint chain. G43p4RtcpSyntax is orthogonal and only governs the dynamic-rotary KindKey tagging used by LinearMotionSyntax to pick the motion form. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the PivotTransform entry naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). public class PivotTransformationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PivotTransformationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors PivotTransformationSyntax() Initializes a new instance with default settings. public PivotTransformationSyntax() PivotTransformationSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public PivotTransformationSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html", "title": "Class PlaneSelectSyntax | HiAPI-C# 2025", - "summary": "Class PlaneSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. public class PlaneSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PlaneSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Default public static PlaneSelectSyntax Default { get; } Property Value PlaneSelectSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress GetPlaneNormalDir(JsonObject) Reads the PlaneSelect section and returns the perpendicular (normal) axis index: XY→2(Z), ZX→1(Y), YZ→0(X). public static int GetPlaneNormalDir(JsonObject json) Parameters json JsonObject Returns int 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." + "summary": "Class PlaneSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. public class PlaneSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PlaneSelectSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Default Default instance with standard settings. public static PlaneSelectSyntax Default { get; } Property Value PlaneSelectSyntax 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress GetPlaneNormalDir(JsonObject) Reads the PlaneSelect section and returns the perpendicular (normal) axis index: XY→2(Z), ZX→1(Y), YZ→0(X). public static int GetPlaneNormalDir(JsonObject json) Parameters json JsonObject Returns int 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." }, "api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html", "title": "Class PositioningSyntax | HiAPI-C# 2025", - "summary": "Class PositioningSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. 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. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. public class PositioningSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PositioningSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Default public static PositioningSyntax Default { get; } Property Value PositioningSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class PositioningSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. 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. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. public class PositioningSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PositioningSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Default Default instance with standard settings. public static PositioningSyntax Default { get; } Property Value PositioningSyntax 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html", @@ -4292,27 +4317,27 @@ "api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html", "title": "Class ProgramEndSyntax | HiAPI-C# 2025", - "summary": "Class ProgramEndSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. public class ProgramEndSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramEndSyntax() public ProgramEndSyntax() ProgramEndSyntax(XElement) public ProgramEndSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ProgramEndSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. public class ProgramEndSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramEndSyntax() Initializes a new instance with default settings. public ProgramEndSyntax() ProgramEndSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ProgramEndSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html", "title": "Class ProgramStopSyntax | HiAPI-C# 2025", - "summary": "Class ProgramStopSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). public class ProgramStopSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramStopSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramStopSyntax() public ProgramStopSyntax() ProgramStopSyntax(XElement) public ProgramStopSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ProgramStopSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). public class ProgramStopSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramStopSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ProgramStopSyntax() Initializes a new instance with default settings. public ProgramStopSyntax() ProgramStopSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ProgramStopSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html", "title": "Class ProgramXyzSyntax | HiAPI-C# 2025", - "summary": "Class ProgramXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. public class ProgramXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks 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. Constructors ProgramXyzSyntax(List>) public ProgramXyzSyntax(List> workingPathList) Parameters workingPathList List> ProgramXyzSyntax(XElement) public ProgramXyzSyntax(XElement src) Parameters src XElement Properties Default public static ProgramXyzSyntax Default { get; } Property Value ProgramXyzSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z). Each path is a list of segments navigating nested JSON objects. First match is used. Empty list means root level. public List> WorkingPathList { get; } Property Value List> Examples [[\"L\"]] → fullJsonSrc[\"L\"] [[]] → fullJsonSrc (root) [[\"L\"], []] → try fullJsonSrc[\"L\"], fallback to root XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ProgramXyzSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. public class ProgramXyzSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramXyzSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks 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. Constructors ProgramXyzSyntax(List>) Initializes a new instance with the given working path list. public ProgramXyzSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for axis values; see WorkingPathList. ProgramXyzSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public ProgramXyzSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with the working path resolving to the Parsing root. public static ProgramXyzSyntax Default { get; } Property Value ProgramXyzSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z). Each path is a list of segments navigating nested JSON objects. First match is used. Empty list means root level. public List> WorkingPathList { get; } Property Value List> Examples [[\"L\"]] → fullJsonSrc[\"L\"] [[]] → fullJsonSrc (root) [[\"L\"], []] → try fullJsonSrc[\"L\"], fallback to root XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html", "title": "Class ProgramXyzUtil | HiAPI-C# 2025", - "summary": "Class ProgramXyzUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). public static class ProgramXyzUtil Inheritance object ProgramXyzUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) Strategy: by corresponding-state transform. Recovers the ProgramXyz that nodeCarryingMc was originally commanded at, by inverting that same node's ProgramToMcTransform on its own MachineCoordinateState. Modal invariant: ProgramXyz carries forward (RTCP rotary modal) — the workpiece-frame anchor survives downstream rotary motion regardless of how the next block's PivotTransform differs, so the next rotary-dynamic block can adopt this Vec3d unchanged as its modal ProgramXyz. Returns null when nodeCarryingMc has no usable MC. Called from the RTCP branch of GetLastProgramXyz(LazyLinkedListNode) and from ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) when the dispatched node has its own MC. public static Vec3d ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode nodeCarryingMc) Parameters nodeCarryingMc LazyLinkedListNode Returns Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) Strategy: by current-state transform. Re-expresses mc into currentNode's program frame by inverting currentNode's own ProgramToMcTransform chain. Modal invariant: MachineCoordinateState carries forward — between the source of mc and currentNode, the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame. Result is the program coordinate that, when transformed by currentNode's chain, yields mc back. Mirrors legacy HardNcLine.RebuildProgramXyzByMc; called from the non-RTCP branch of GetLastProgramXyz(LazyLinkedListNode). public static Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode currentNode, Vec3d mc) Parameters currentNode LazyLinkedListNode mc Vec3d Returns Vec3d FindPreviousMc(LazyLinkedListNode) Finds the most recent MachineCoordinateState from previous SyntaxPiece nodes. Returns null if no previous position found. public static Vec3d FindPreviousMc(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d FindPreviousMcXyzabc(LazyLinkedListNode, IMachineAxisConfig) Finds the most recent MachineCoordinateState XYZABC from previous nodes as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). XYZ is taken from the first previous block whose MC has any of X/Y/Z set (typical motion-emitting block). ABC is then backfilled per axis for axes the machine actually has: if the XYZ-carrying block lacks a particular rotary value, we continue walking back to find the last block that wrote that axis (modal rotary state). This matches NC semantics — unchanged rotary axes carry forward silently — and prevents NaN rotary deltas from stopping ClLinearMotionSemantic's duration computation in RTCP contours where the XYZ block right before the current one didn't record ABC. axisConfig scopes the rotary-backfill to the machine's declared rotary axes (via GetRotaryAxes(IMachineAxisConfig)): non-rotary axes stay NaN and skip backward walking entirely. When axisConfig is null (callers without the dependency — e.g. legacy tests), all three A/B/C are attempted, matching the pre-axisConfig behaviour. Returns null if no previous MC with XYZ is found at all. Axes that have never been set stay NaN. public static DVec3d FindPreviousMcXyzabc(LazyLinkedListNode node, IMachineAxisConfig axisConfig = null) Parameters node LazyLinkedListNode axisConfig IMachineAxisConfig Returns DVec3d FindPreviousStoredProgramXyz(LazyLinkedListNode) Finds the most recent stored ProgramXyz from previous SyntaxPiece nodes — a raw-value lookback that returns whatever was written on disk, without MC-inversion or frame-change reconstruction. Contrast with GetLastProgramXyz(LazyLinkedListNode), which reconstructs the inherited program position as prev.MC × inverse(transform) and is sensitive to RTCP / chain-change boundaries. This helper is the simple parallel of FindPreviousMc(LazyLinkedListNode) — use it when a caller specifically needs \"what ProgramXyz did the last block write\" (e.g. the ProgramXyzBackfillSyntax change check). Returns null if no predecessor has ProgramXyz. public static Vec3d FindPreviousStoredProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d GetLastProgramXyz(LazyLinkedListNode) Gets the modal ProgramXyz inherited by node from the most recent predecessor with an MachineCoordinateState. Dispatches between the two strategies documented on the class summary based on whether node's ProgramToMcTransform chain carries any KindDynamic entry (queried via HasDynamicEntry(JsonObject)): Has a Dynamic entry (RTCP rotary modal) → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on the predecessor (recover prev's commanded ProgramXyz; carries forward unchanged because workpiece-frame tool tip is the modal anchor). All entries Static (chain-change / non-RTCP) → ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) with node's own transform on the predecessor's MC (re-express prev MC in current program frame; MC is the modal anchor while the chain re-frames around it). When prev and current share the same chain modal state both strategies agree, so the discriminator only matters at chain boundaries / rotary motion. Returns Zero only when no predecessor has a usable MC (i.e. the start of the program with no motion emitted). public static Vec3d GetLastProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d ReadMcXyzabc(JsonObject) Reads XYZABC from a MachineCoordinateState section as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). Missing axes are NaN. Returns null if the section doesn't exist or has no XYZ. public static DVec3d ReadMcXyzabc(JsonObject ncBlock) Parameters ncBlock JsonObject Returns DVec3d ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) Resolves the ProgramXyz at node's endpoint — i.e. what ProgramXyzBackfillSyntax would write on node. Dispatcher; the actual inversion math runs inside one of the two strategy helpers documented on the class summary: node has its own MachineCoordinateState XYZ → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on node itself (its own MC and own transform; the \"current\" / \"corresponding\" distinction collapses since both come from the same node). node has no own MC and prevStored is non-null → GetLastProgramXyz(LazyLinkedListNode) walks back to the most recent predecessor with MC and dispatches strategy from node's HasDynamicEntry(JsonObject) result. Both empty → return null; callers must not fabricate a spurious origin on the very first block. Shared by ProgramXyzBackfillSyntax (computing the snapshot value to write on node) and McAbcXyzFallbackSyntax (computing Previous's would-be snapshot to inherit on the current rotary-dynamic block — the Logic-stage caller cannot read prev's stored ProgramXyz because PostSyntaxs run after the whole Logic chain finishes). prevStored for the second use is taken from FindPreviousStoredProgramXyz(LazyLinkedListNode) on node's predecessor — the predecessor-of-predecessor's stored ProgramXyz — only as a guard against the spurious-origin case. public static Vec3d ResolveBlockProgramXyz(LazyLinkedListNode node, Vec3d prevStored) Parameters node LazyLinkedListNode prevStored Vec3d Returns Vec3d ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress) Resolves X/Y/Z from a JSON section into absolute program coordinates. Fills missing axes from last program position via lookback. public static Vec3d ResolveProgramXyz(JsonNode xyzSource, LazyLinkedListNode syntaxPieceNode, Sentence sentence, NcDiagnosticProgress diag) Parameters xyzSource JsonNode JSON node containing X/Y/Z keys (e.g., Parsing root, Parsing.G28, Parsing.L). syntaxPieceNode LazyLinkedListNode Current node for lookback. sentence Sentence diag NcDiagnosticProgress Returns Vec3d Absolute program coordinates, or null if no X/Y/Z found in xyzSource." + "summary": "Class ProgramXyzUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). public static class ProgramXyzUtil Inheritance object ProgramXyzUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) Strategy: by corresponding-state transform. Recovers the ProgramXyz that nodeCarryingMc was originally commanded at, by inverting that same node's ProgramToMcTransform on its own MachineCoordinateState. Modal invariant: ProgramXyz carries forward (RTCP rotary modal) — the workpiece-frame anchor survives downstream rotary motion regardless of how the next block's PivotTransform differs, so the next rotary-dynamic block can adopt this Vec3d unchanged as its modal ProgramXyz. Returns null when nodeCarryingMc has no usable MC. Called from the RTCP branch of GetLastProgramXyz(LazyLinkedListNode) and from ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) when the dispatched node has its own MC. public static Vec3d ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode nodeCarryingMc) Parameters nodeCarryingMc LazyLinkedListNode Returns Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) Strategy: by current-state transform. Re-expresses mc into currentNode's program frame by inverting currentNode's own ProgramToMcTransform chain. Modal invariant: MachineCoordinateState carries forward — between the source of mc and currentNode, the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame. Result is the program coordinate that, when transformed by currentNode's chain, yields mc back. Mirrors legacy HardNcLine.RebuildProgramXyzByMc; called from the non-RTCP branch of GetLastProgramXyz(LazyLinkedListNode). public static Vec3d ComputeProgramXyzByCurrentTransform(LazyLinkedListNode currentNode, Vec3d mc) Parameters currentNode LazyLinkedListNode mc Vec3d Returns Vec3d FindPreviousMc(LazyLinkedListNode) Finds the most recent MachineCoordinateState from previous SyntaxPiece nodes. Returns null if no previous position found. public static Vec3d FindPreviousMc(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d FindPreviousMcXyzabc(LazyLinkedListNode, IMachineAxisConfig) Finds the most recent MachineCoordinateState XYZABC from previous nodes as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). XYZ is taken from the first previous block whose MC has any of X/Y/Z set (typical motion-emitting block). ABC is then backfilled per axis for axes the machine actually has: if the XYZ-carrying block lacks a particular rotary value, we continue walking back to find the last block that wrote that axis (modal rotary state). This matches NC semantics — unchanged rotary axes carry forward silently — and prevents NaN rotary deltas from stopping ClLinearMotionSemantic's duration computation in RTCP contours where the XYZ block right before the current one didn't record ABC. axisConfig scopes the rotary-backfill to the machine's declared rotary axes (via GetRotaryAxes(IMachineAxisConfig)): non-rotary axes stay NaN and skip backward walking entirely. When axisConfig is null (callers without the dependency — e.g. legacy tests), all three A/B/C are attempted, matching the pre-axisConfig behaviour. Returns null if no previous MC with XYZ is found at all. Axes that have never been set stay NaN. public static DVec3d FindPreviousMcXyzabc(LazyLinkedListNode node, IMachineAxisConfig axisConfig = null) Parameters node LazyLinkedListNode axisConfig IMachineAxisConfig Returns DVec3d FindPreviousStoredProgramXyz(LazyLinkedListNode) Finds the most recent stored ProgramXyz from previous SyntaxPiece nodes — a raw-value lookback that returns whatever was written on disk, without MC-inversion or frame-change reconstruction. Contrast with GetLastProgramXyz(LazyLinkedListNode), which reconstructs the inherited program position as prev.MC × inverse(transform) and is sensitive to RTCP / chain-change boundaries. This helper is the simple parallel of FindPreviousMc(LazyLinkedListNode) — use it when a caller specifically needs \"what ProgramXyz did the last block write\" (e.g. the ProgramXyzBackfillSyntax change check). Returns null if no predecessor has ProgramXyz. public static Vec3d FindPreviousStoredProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d GetLastProgramXyz(LazyLinkedListNode) Gets the modal ProgramXyz inherited by node from the most recent predecessor with an MachineCoordinateState. Dispatches between the two strategies documented on the class summary based on whether node's ProgramToMcTransform chain carries any KindDynamic entry (queried via HasDynamicEntry(JsonObject)): Has a Dynamic entry (RTCP rotary modal) → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on the predecessor (recover prev's commanded ProgramXyz; carries forward unchanged because workpiece-frame tool tip is the modal anchor). All entries Static (chain-change / non-RTCP) → ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d) with node's own transform on the predecessor's MC (re-express prev MC in current program frame; MC is the modal anchor while the chain re-frames around it). When prev and current share the same chain modal state both strategies agree, so the discriminator only matters at chain boundaries / rotary motion. Returns Zero only when no predecessor has a usable MC (i.e. the start of the program with no motion emitted). public static Vec3d GetLastProgramXyz(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Vec3d ReadMcXyzabc(JsonObject) Reads XYZABC from a MachineCoordinateState section as DVec3d. Point = XYZ (mm), Normal = ABC (radians, converted from degrees in JSON). Missing axes are NaN. Returns null if the section doesn't exist or has no XYZ. public static DVec3d ReadMcXyzabc(JsonObject ncBlock) Parameters ncBlock JsonObject Returns DVec3d ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) Resolves the ProgramXyz at node's endpoint — i.e. what ProgramXyzBackfillSyntax would write on node. Dispatcher; the actual inversion math runs inside one of the two strategy helpers documented on the class summary: node has its own MachineCoordinateState XYZ → ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode) on node itself (its own MC and own transform; the \"current\" / \"corresponding\" distinction collapses since both come from the same node). node has no own MC and prevStored is non-null → GetLastProgramXyz(LazyLinkedListNode) walks back to the most recent predecessor with MC and dispatches strategy from node's HasDynamicEntry(JsonObject) result. Both empty → return null; callers must not fabricate a spurious origin on the very first block. Shared by ProgramXyzBackfillSyntax (computing the snapshot value to write on node) and McAbcXyzFallbackSyntax (computing Previous's would-be snapshot to inherit on the current rotary-dynamic block — the Logic-stage caller cannot read prev's stored ProgramXyz because PostSyntaxs run after the whole Logic chain finishes). prevStored for the second use is taken from FindPreviousStoredProgramXyz(LazyLinkedListNode) on node's predecessor — the predecessor-of-predecessor's stored ProgramXyz — only as a guard against the spurious-origin case. public static Vec3d ResolveBlockProgramXyz(LazyLinkedListNode node, Vec3d prevStored) Parameters node LazyLinkedListNode prevStored Vec3d Returns Vec3d ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress) Resolves X/Y/Z from a JSON section into absolute program coordinates. Fills missing axes from last program position via lookback. public static Vec3d ResolveProgramXyz(JsonNode xyzSource, LazyLinkedListNode syntaxPieceNode, Sentence sentence, NcDiagnosticProgress diag) Parameters xyzSource JsonNode JSON node containing X/Y/Z keys (e.g., Parsing root, Parsing.G28, Parsing.L). syntaxPieceNode LazyLinkedListNode Current node for lookback. sentence Sentence Source sentence used to attach diagnostics to the offending text span. diag NcDiagnosticProgress Diagnostic sink that receives parse errors for malformed X/Y/Z values. Returns Vec3d Absolute program coordinates, or null if no X/Y/Z found in xyzSource." }, "api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html", "title": "Class ReferenceReturnSyntax | HiAPI-C# 2025", - "summary": "Class ReferenceReturnSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. public class ReferenceReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ReferenceReturnSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: G91 G28 Z0.0 (only Z specified → only Z goes to home) \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"ProgramXyz\": { \"X\": prevX, \"Y\": prevY, \"Z\": intermediate }, \"Motion\": { \"Form\": \"McLinear\", \"IsRapid\": true } }, { \"MachineCoordinate\": { \"X\": prevMcX, \"Y\": prevMcY, \"Z\": 0 }, \"Motion\": { \"Form\": \"McLinear\", \"IsRapid\": true } } ] } Only axes present in the G28 block move to home; others keep previous MC value. Item 0 uses ProgramXyz (intermediate point from NC program); McXyzSyntax derives its MachineCoordinate. Item 1 uses MachineCoordinate directly (selective home per axis). Root ProgramXyz is overwritten to the final position; McXyzSyntax derives the root MachineCoordinate. Constructors ReferenceReturnSyntax() public ReferenceReturnSyntax() ReferenceReturnSyntax(XElement) public ReferenceReturnSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ReferenceReturnSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. public class ReferenceReturnSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ReferenceReturnSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: G91 G28 Z0.0 (only Z specified → only Z goes to home) \"CompoundMotion\": { \"Term\": \"G28\", \"Items\": [ { \"ProgramXyz\": { \"X\": prevX, \"Y\": prevY, \"Z\": intermediate }, \"Motion\": { \"Form\": \"McLinear\", \"IsRapid\": true } }, { \"MachineCoordinate\": { \"X\": prevMcX, \"Y\": prevMcY, \"Z\": 0 }, \"Motion\": { \"Form\": \"McLinear\", \"IsRapid\": true } } ] } Only axes present in the G28 block move to home; others keep previous MC value. Item 0 uses ProgramXyz (intermediate point from NC program); McXyzSyntax derives its MachineCoordinate. Item 1 uses MachineCoordinate directly (selective home per axis). Root ProgramXyz is overwritten to the final position; McXyzSyntax derives the root MachineCoordinate. Constructors ReferenceReturnSyntax() Initializes a new instance with default settings. public ReferenceReturnSyntax() ReferenceReturnSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ReferenceReturnSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.RetainedCommonVariableReadingSyntax.html", @@ -4327,7 +4352,7 @@ "api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html", "title": "Class SiemensCoordinateOffsetSyntax | HiAPI-C# 2025", - "summary": "Class SiemensCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs.Siemens Assembly HiMech.dll 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 Inheritance object SiemensCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SiemensCoordinateOffsetSyntax() public SiemensCoordinateOffsetSyntax() SiemensCoordinateOffsetSyntax(XElement) public SiemensCoordinateOffsetSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class SiemensCoordinateOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs.Siemens Assembly HiMech.dll 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 Inheritance object SiemensCoordinateOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SiemensCoordinateOffsetSyntax() Initializes a new instance with default settings. public SiemensCoordinateOffsetSyntax() SiemensCoordinateOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public SiemensCoordinateOffsetSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.Siemens.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.Siemens.html", @@ -4337,32 +4362,32 @@ "api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html", "title": "Class SpindleSpeedSyntax | HiAPI-C# 2025", - "summary": "Class SpindleSpeedSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. public class SpindleSpeedSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SpindleSpeedSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SpindleSpeedSyntax() public SpindleSpeedSyntax() SpindleSpeedSyntax(XElement) public SpindleSpeedSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class SpindleSpeedSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. public class SpindleSpeedSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object SpindleSpeedSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SpindleSpeedSyntax() Initializes a new instance with default settings. public SpindleSpeedSyntax() SpindleSpeedSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public SpindleSpeedSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html", "title": "Class TappingCycleSyntax | HiAPI-C# 2025", - "summary": "Class TappingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class TappingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TappingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors TappingCycleSyntax() public TappingCycleSyntax() TappingCycleSyntax(XElement) public TappingCycleSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class TappingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class TappingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TappingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors TappingCycleSyntax() Initializes a new instance with default settings. public TappingCycleSyntax() TappingCycleSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public TappingCycleSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html", "title": "Class TiltTransformUtil | HiAPI-C# 2025", - "summary": "Class TiltTransformUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. public static class TiltTransformUtil Inheritance object TiltTransformUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields TransformSource public const string TransformSource = \"TiltTransform\" Field Value string Methods CarryForwardFromPrevious(LazyLinkedListNode, JsonObject) 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 syntaxPieceNode, JsonObject json) Parameters syntaxPieceNode LazyLinkedListNode json JsonObject ComposeRotation(JsonObject, Mat4d) Composes the tilt rotation into ProgramToMcTransform. Tilt is a fixed geometric rotation per block, so the entry is always KindStatic. public static void ComposeRotation(JsonObject json, Mat4d tiltMat) Parameters json JsonObject tiltMat Mat4d FindPreviousMode(LazyLinkedListNode) Returns the tilt mode written on the immediately previous block, or null when none. Each prior block is guaranteed to carry a TiltTransform section (LogicSyntax-stage authored, or PostSyntax-stage carried by ModalCarrySyntax), so a single-step lookup replaces the legacy EnumerateBack() walk. public static string FindPreviousMode(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns string FindPreviousTiltMat(LazyLinkedListNode) Returns the tilt Mat4d stored on the immediately previous block's transform list, or Idt when none. public static Mat4d FindPreviousTiltMat(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Mat4d GetCurrentMode(JsonObject) Gets the current node's existing tilt mode (e.g., from initializer). public static string GetCurrentMode(JsonObject json) Parameters json JsonObject Returns string TryHandleG69(JsonObject, JsonObject) 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) Parameters json JsonObject parsing JsonObject Returns bool WriteSection(JsonObject, string, JsonObject) Writes the TiltTransform debug section to the JsonObject. public static void WriteSection(JsonObject json, string mode, JsonObject additionalParams = null) Parameters json JsonObject The target JsonObject. mode string Active tilt mode string (e.g., “G68.2”, “G69”). additionalParams JsonObject Optional G-code parameters (I,J,K,X,Y,Z etc.) for debug output." + "summary": "Class TiltTransformUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. public static class TiltTransformUtil Inheritance object TiltTransformUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields TransformSource Identifier used as the transform source key when composing the tilt rotation into ProgramToMcTransform. public const string TransformSource = \"TiltTransform\" Field Value string Methods CarryForwardFromPrevious(LazyLinkedListNode, JsonObject) 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 syntaxPieceNode, JsonObject json) Parameters syntaxPieceNode LazyLinkedListNode json JsonObject ComposeRotation(JsonObject, Mat4d) Composes the tilt rotation into ProgramToMcTransform. Tilt is a fixed geometric rotation per block, so the entry is always KindStatic. public static void ComposeRotation(JsonObject json, Mat4d tiltMat) Parameters json JsonObject tiltMat Mat4d FindPreviousMode(LazyLinkedListNode) Returns the tilt mode written on the immediately previous block, or null when none. Each prior block is guaranteed to carry a TiltTransform section (LogicSyntax-stage authored, or PostSyntax-stage carried by ModalCarrySyntax), so a single-step lookup replaces the legacy EnumerateBack() walk. public static string FindPreviousMode(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns string FindPreviousTiltMat(LazyLinkedListNode) Returns the tilt Mat4d stored on the immediately previous block's transform list, or Idt when none. public static Mat4d FindPreviousTiltMat(LazyLinkedListNode node) Parameters node LazyLinkedListNode Returns Mat4d GetCurrentMode(JsonObject) Gets the current node's existing tilt mode (e.g., from initializer). public static string GetCurrentMode(JsonObject json) Parameters json JsonObject Returns string TryHandleG69(JsonObject, JsonObject) 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) Parameters json JsonObject parsing JsonObject Returns bool WriteSection(JsonObject, string, JsonObject) Writes the TiltTransform debug section to the JsonObject. public static void WriteSection(JsonObject json, string mode, JsonObject additionalParams = null) Parameters json JsonObject The target JsonObject. mode string Active tilt mode string (e.g., “G68.2”, “G69”). additionalParams JsonObject Optional G-code parameters (I,J,K,X,Y,Z etc.) for debug output." }, "api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html", "title": "Class ToolChangeSyntax | HiAPI-C# 2025", - "summary": "Class ToolChangeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. public class ToolChangeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolChangeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields IsChangeKey public const string IsChangeKey = \"IsChange\" Field Value string SectionName public const string SectionName = \"ToolChange\" Field Value string TermKey public const string TermKey = \"Term\" Field Value string ToolIdKey public const string ToolIdKey = \"ToolId\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ToolChangeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. public class ToolChangeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolChangeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields IsChangeKey Section key indicating whether the current block actually triggers a tool change. public const string IsChangeKey = \"IsChange\" Field Value string SectionName JSON section name where the resolved tool-change state is written. public const string SectionName = \"ToolChange\" Field Value string TermKey Section key recording the trigger command (e.g., M06) when IsChangeKey is true. public const string TermKey = \"Term\" Field Value string ToolIdKey Section key holding the active tool number (modal). public const string ToolIdKey = \"ToolId\" Field Value string 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html", "title": "Class ToolHeightOffsetSyntax | HiAPI-C# 2025", - "summary": "Class ToolHeightOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). public class ToolHeightOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolHeightOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Input data locations in JsonObject: Parsing.G43 / Parsing.G44 → from ParameterizedFlagSyntax, {\"H\": \"5\"} Parsing.H → from IntegerTagSetupSyntax, standalone modal H (int) Parsing.Flags → from NumberedFlagSyntax, \"G49\" for cancellation ToolOrientation → from a prior syntax (optional, default = Transformation.AxialNormal or UnitZ) Modal state is persisted in the IToolHeightCompensationDef section (not syntax fields) and recovered from backward node traversal. Constructors ToolHeightOffsetSyntax() public ToolHeightOffsetSyntax() ToolHeightOffsetSyntax(XElement) public ToolHeightOffsetSyntax(XElement src) Parameters src XElement Fields ToolOrientationKey public const string ToolOrientationKey = \"ToolOrientation\" Field Value string TransformSource public const string TransformSource = \"ToolHeightCompensation\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ToolHeightOffsetSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). public class ToolHeightOffsetSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ToolHeightOffsetSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Input data locations in JsonObject: Parsing.G43 / Parsing.G44 → from ParameterizedFlagSyntax, {\"H\": \"5\"} Parsing.H → from IntegerTagSetupSyntax, standalone modal H (int) Parsing.Flags → from NumberedFlagSyntax, \"G49\" for cancellation ToolOrientation → from a prior syntax (optional, default = Transformation.AxialNormal or UnitZ) Modal state is persisted in the IToolHeightCompensationDef section (not syntax fields) and recovered from backward node traversal. Constructors ToolHeightOffsetSyntax() Initializes a new instance with default settings. public ToolHeightOffsetSyntax() ToolHeightOffsetSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ToolHeightOffsetSyntax(XElement src) Parameters src XElement Source XML element. Fields ToolOrientationKey JSON key under which the upstream tool orientation vector is read. public const string ToolOrientationKey = \"ToolOrientation\" Field Value string TransformSource Identifier used as the transform source key when composing the tool-height translation into ProgramToMcTransform. public const string TransformSource = \"ToolHeightCompensation\" Field Value string 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html", "title": "Class UnitModeSyntax | HiAPI-C# 2025", - "summary": "Class UnitModeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default. public class UnitModeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnitModeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors UnitModeSyntax() public UnitModeSyntax() UnitModeSyntax(XElement) public UnitModeSyntax(XElement src) Parameters src XElement Properties Default public static UnitModeSyntax Default { get; } Property Value UnitModeSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class UnitModeSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default. public class UnitModeSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object UnitModeSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors UnitModeSyntax() Initializes a new instance with default settings. public UnitModeSyntax() UnitModeSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public UnitModeSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with standard settings. public static UnitModeSyntax Default { get; } Property Value UnitModeSyntax 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.VariableEvaluatorSyntax.html", @@ -4377,12 +4402,12 @@ "api/Hi.NcParsers.LogicSyntaxs.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.html", "title": "Namespace Hi.NcParsers.LogicSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.LogicSyntaxs Classes BackBoringSyntax G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. BoringCycleSyntax G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. CannedCycleResolveSyntax 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. CircularMotionSyntax Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. CoolantSyntax Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. CoordinateOffsetUtil Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. DrillingCycleSyntax G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. FeedrateSyntax 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. FineBoringSyntax G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. G43p4RtcpSyntax Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). G53p1RotaryPositionSyntax G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. HighSpeedPeckCycleSyntax G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. IncrementalResolveSyntax Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. IsoCoordinateOffsetSyntax ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. IsoG68RotationSyntax 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. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). IsoG68p2TiltSyntax 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. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). IsoLocalCoordinateOffsetSyntax 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 IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. LinearMotionSyntax Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. MachineCoordSelectSyntax Handles G53 (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, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates. McAbcCyclicPathSyntax Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. McAbcSyntax Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. McAbcXyzFallbackSyntax Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. McXyzSyntax Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). PathSmoothingSyntax Consumes G05.1 (high-precision contour / path smoothing) and records its modal state. Q1 enables, Q0 disables. The simulation does not alter the tool path — this is a controller-internal interpolation black box. PeckDrillingCycleSyntax G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. PivotTransformationSyntax Writes the PivotTransformSource entry into ProgramToMcTransform on every block, capturing the Pn→MC kinematic rigid transform for the block's endpoint rotary state. Mirrors legacy HardNcLine.GetProgramXyz's use of McToPn(DVec3d) — without this entry, the transform chain would miss the rotary rotation on any block whose MachineCoordinate.ABC is non-zero, and McXyzSyntax (and ProgramXyzSyntax's inverse lookback) would silently drift. Scope is not limited to RTCP modal: as long as rotary axes are physically at a non-zero position (e.g. after a non-RTCP G00 B90 plus any subsequent motion), the kinematic chain still contributes a non-identity rigid transform that must appear in the endpoint chain. G43p4RtcpSyntax is orthogonal and only governs the dynamic-rotary KindKey tagging used by LinearMotionSyntax to pick the motion form. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the PivotTransform entry naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). PlaneSelectSyntax Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. PositioningSyntax Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. 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. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. ProgramEndCleanSyntax Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. ProgramEndSyntax Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. ProgramStopSyntax Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). ProgramXyzSyntax Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. ProgramXyzUtil Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). ReferenceReturnSyntax Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. RetainedCommonVariableReadingSyntax Obtains values for Fanuc-style retained common variables (#500-#999) by consuming literal numeric assignments from Parsing.Assignments.#nnn and writing them straight to a registered RetainedCommonVariableTable. No SyntaxPiece JSON mirror is created — the table is the single source of truth for retained values, and VariableEvaluatorSyntax reads from the table directly. The hincproj round-trip preserves writes across project sessions. Only literal numeric RHS values are consumed by this syntax (#500 = 1.234 ✓; #600 = #500 + 1 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result through the same table. The two syntaxes are decoupled. If no RetainedCommonVariableTable is registered on the runner's NcDependencyList, this syntax is a no-op. RotaryAxisUtil Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. SpindleSpeedSyntax Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. TappingCycleSyntax G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. TiltTransformUtil Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. ToolChangeSyntax Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. ToolHeightOffsetSyntax Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). UnitModeSyntax Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default. VariableEvaluatorSyntax Resolves Custom Macro B variable references and bracket expressions on a single block by walking the parser-stage residue and replacing each reference with its evaluated numeric value. Two passes per block: Parsing.Assignments.#nnn entries with a non-literal RHS are evaluated in iteration order. Successful results are written to Vars.Volatile for #100-#499 or to the registered RetainedCommonVariableTable for #500-#999, and the entry is removed. Iteration order matters: an earlier RHS may set a variable that a later RHS reads. Failures (vacant operand, unsupported function, parse error) emit a VariableExpression--Unevaluated error and leave the entry in place; out-of-range ids are likewise left in place. Every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects like Parsing.G81, Parsing.G54.1, etc.) is parsed; on a successful evaluation the string is replaced with a numeric JsonValue. Failures silently leave the original string and rely on downstream GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins): Block-local Vars.Local with Previous traceback (#1-#33). Block-local Vars.Volatile with traceback (#100-#499). Each IVariableLookup in the runner's NcDependencyList, in registration order (e.g. RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetTable). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order (e.g. FanucPositionVariableLookup). Each lookup is responsible for its own id-range gating — id ranges are not hard-coded inside this syntax. Adding a new variable surface (Heidenhain Q parameters, Siemens GUDs, modal G/F/T reads) is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. VolatileVariableReadingSyntax Obtains values for Fanuc-style non-retained common variables (#100-#499). Reads literal numeric assignments from Parsing.Assignments.#nnn, dict-merges them with the previous block's volatile state, and writes the resulting per-block dictionary into Vars.Volatile. Lifetime is bounded by MachiningSession: within one session the dictionary carries forward block-by-block via this syntax; session restart abandons the SyntaxPiece JSON dataflow and starts fresh. Program-end (M02/M30) clearing is handled by ProgramEndCleanSyntax. Only literal numeric RHS values are consumed by this syntax (#124 = 15. ✓; #100 = #1 + 5 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result into the same per-block dictionary. The two syntaxes are decoupled — the evaluator's lookup tracebacks via SyntaxPiece linkage so it does not depend on having run before or after this syntax." + "summary": "Namespace Hi.NcParsers.LogicSyntaxs Classes BackBoringSyntax G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. BoringCycleSyntax G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. CannedCycleResolveSyntax 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. CircularMotionSyntax Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. CoolantSyntax Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. CoordinateOffsetUtil Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. DrillingCycleSyntax G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. FanucPathSmoothingSyntax Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. FeedrateSyntax 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. FineBoringSyntax G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. G43p4RtcpSyntax Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). G53p1RotaryPositionSyntax G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. HighSpeedPeckCycleSyntax G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. IncrementalResolveSyntax Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]. All matching paths are converted. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. IsoCoordinateOffsetSyntax ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54–G59.9 work coordinate offset. Reads G54/G55/.../G59.9 from Flags, looks up offset Vec3d via IIsoCoordinateConfig dependencies (e.g. brand parameter table or IsoCoordinateTable), composes into ProgramToMcTransform. Modal — active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. IsoG68RotationSyntax 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. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). IsoG68p2TiltSyntax 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. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). IsoLocalCoordinateOffsetSyntax 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 IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. LinearMotionSyntax Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. MachineCoordSelectSyntax Handles G53 (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, G53 is ignored per ISO standard. Must be placed before ProgramXyzSyntax in the syntax chain. When G53 is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates. McAbcCyclicPathSyntax Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. McAbcSyntax Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. McAbcXyzFallbackSyntax Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. McXyzSyntax Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). PeckDrillingCycleSyntax G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. PivotTransformationSyntax Writes the PivotTransformSource entry into ProgramToMcTransform on every block, capturing the Pn→MC kinematic rigid transform for the block's endpoint rotary state. Mirrors legacy HardNcLine.GetProgramXyz's use of McToPn(DVec3d) — without this entry, the transform chain would miss the rotary rotation on any block whose MachineCoordinate.ABC is non-zero, and McXyzSyntax (and ProgramXyzSyntax's inverse lookback) would silently drift. Scope is not limited to RTCP modal: as long as rotary axes are physically at a non-zero position (e.g. after a non-RTCP G00 B90 plus any subsequent motion), the kinematic chain still contributes a non-identity rigid transform that must appear in the endpoint chain. G43p4RtcpSyntax is orthogonal and only governs the dynamic-rotary KindKey tagging used by LinearMotionSyntax to pick the motion form. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the PivotTransform entry naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). PlaneSelectSyntax Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. PositioningSyntax Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. 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. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. ProgramEndCleanSyntax Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. ProgramEndSyntax Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. Must be placed before syntaxes that depend on the ProgramEnd section. ProgramStopSyntax Consumes M00 (unconditional stop) and M01 (optional stop) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). ProgramXyzSyntax Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. ProgramXyzUtil Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence on DemoPmcAirPlane/NC/02-ED6L20.NC.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). ReferenceReturnSyntax Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, Sentence, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. RetainedCommonVariableReadingSyntax Obtains values for Fanuc-style retained common variables (#500-#999) by consuming literal numeric assignments from Parsing.Assignments.#nnn and writing them straight to a registered RetainedCommonVariableTable. No SyntaxPiece JSON mirror is created — the table is the single source of truth for retained values, and VariableEvaluatorSyntax reads from the table directly. The hincproj round-trip preserves writes across project sessions. Only literal numeric RHS values are consumed by this syntax (#500 = 1.234 ✓; #600 = #500 + 1 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result through the same table. The two syntaxes are decoupled. If no RetainedCommonVariableTable is registered on the runner's NcDependencyList, this syntax is a no-op. RotaryAxisUtil Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. SpindleSpeedSyntax Consumes S (spindle speed) and M03/M04/M05 (spindle direction) from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from ISO M-codes to the conventional SpindleDirection enum at this layer. TappingCycleSyntax G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. TiltTransformUtil Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. ToolChangeSyntax Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. ToolHeightOffsetSyntax Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). UnitModeSyntax Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The HiNC pipeline works exclusively in millimetres. When G20 is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric. G21 is accepted as a no-op confirmation of the default. VariableEvaluatorSyntax Resolves Custom Macro B variable references and bracket expressions on a single block by walking the parser-stage residue and replacing each reference with its evaluated numeric value. Two passes per block: Parsing.Assignments.#nnn entries with a non-literal RHS are evaluated in iteration order. Successful results are written to Vars.Volatile for #100-#499 or to the registered RetainedCommonVariableTable for #500-#999, and the entry is removed. Iteration order matters: an earlier RHS may set a variable that a later RHS reads. Failures (vacant operand, unsupported function, parse error) emit a VariableExpression--Unevaluated error and leave the entry in place; out-of-range ids are likewise left in place. Every string-typed value reachable from Parsing. (axis tags, canned-cycle sub-objects like Parsing.G81, Parsing.G54.1, etc.) is parsed; on a successful evaluation the string is replaced with a numeric JsonValue. Failures silently leave the original string and rely on downstream GetParsedDouble(JsonObject, string, Sentence, NcDiagnosticProgress) at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins): Block-local Vars.Local with Previous traceback (#1-#33). Block-local Vars.Volatile with traceback (#100-#499). Each IVariableLookup in the runner's NcDependencyList, in registration order (e.g. RetainedCommonVariableTable, FanucParameterTable, FanucToolOffsetTable). Each IRuntimeVariableLookup in RuntimeVariableLookups, in list order (e.g. FanucPositionVariableLookup). Each lookup is responsible for its own id-range gating — id ranges are not hard-coded inside this syntax. Adding a new variable surface (Heidenhain Q parameters, Siemens GUDs, modal G/F/T reads) is additive: register an IVariableLookup on a dependency or push an IRuntimeVariableLookup onto the per-preset list. VolatileVariableReadingSyntax Obtains values for Fanuc-style non-retained common variables (#100-#499). Reads literal numeric assignments from Parsing.Assignments.#nnn, dict-merges them with the previous block's volatile state, and writes the resulting per-block dictionary into Vars.Volatile. Lifetime is bounded by MachiningSession: within one session the dictionary carries forward block-by-block via this syntax; session restart abandons the SyntaxPiece JSON dataflow and starts fresh. Program-end (M02/M30) clearing is handled by ProgramEndCleanSyntax. Only literal numeric RHS values are consumed by this syntax (#124 = 15. ✓; #100 = #1 + 5 ✗). Non-literal RHS entries are left untouched in Parsing.Assignments; VariableEvaluatorSyntax resolves them and writes the result into the same per-block dictionary. The two syntaxes are decoupled — the evaluator's lookup tracebacks via SyntaxPiece linkage so it does not depend on having run before or after this syntax." }, "api/Hi.NcParsers.NcDiagnostic.html": { "href": "api/Hi.NcParsers.NcDiagnostic.html", "title": "Class NcDiagnostic | HiAPI-C# 2025", - "summary": "Class NcDiagnostic Namespace Hi.NcParsers Assembly HiMech.dll A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. public class NcDiagnostic Inheritance object NcDiagnostic 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 NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, Sentence) public NcDiagnostic(NcDiagnosticSeverity severity, NcDiagnosticCategory category, string id, string text, object detail = null, Sentence sentence = null) Parameters severity NcDiagnosticSeverity category NcDiagnosticCategory id string text string detail object sentence Sentence Properties Category Diagnostic category. public NcDiagnosticCategory Category { get; } Property Value NcDiagnosticCategory Detail Optional detail data or exception. Null if not applicable. public object Detail { get; } Property Value object Id Structured diagnostic ID for filtering and suppression. Normally {Primary}-{Secondary}–{Serial:000}. public string Id { get; } Property Value string Sentence The NC source block that triggered this diagnostic. Null for pipeline-level messages (e.g., lifecycle start/done). public Sentence Sentence { get; } Property Value Sentence Severity Importance level. public NcDiagnosticSeverity Severity { get; } Property Value NcDiagnosticSeverity Text End-user friendly message text. public string Text { get; } Property Value string Methods ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class NcDiagnostic Namespace Hi.NcParsers Assembly HiMech.dll A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. public class NcDiagnostic Inheritance object NcDiagnostic 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 NcDiagnostic(NcDiagnosticSeverity, NcDiagnosticCategory, string, string, object, Sentence) Creates a fully-populated NcDiagnostic. public NcDiagnostic(NcDiagnosticSeverity severity, NcDiagnosticCategory category, string id, string text, object detail = null, Sentence sentence = null) Parameters severity NcDiagnosticSeverity Importance level — see NcDiagnosticSeverity. category NcDiagnosticCategory Diagnostic category — see NcDiagnosticCategory. id string Structured diagnostic ID (see Id). text string End-user friendly message text. detail object Optional detail data or exception. Null if not applicable. sentence Sentence The NC source block that triggered this diagnostic; null for pipeline-level messages. Properties Category Diagnostic category. public NcDiagnosticCategory Category { get; } Property Value NcDiagnosticCategory Detail Optional detail data or exception. Null if not applicable. public object Detail { get; } Property Value object Id Structured diagnostic ID for filtering and suppression. Normally {Primary}-{Secondary}–{Serial:000}. public string Id { get; } Property Value string Sentence The NC source block that triggered this diagnostic. Null for pipeline-level messages (e.g., lifecycle start/done). public Sentence Sentence { get; } Property Value Sentence Severity Importance level. public NcDiagnosticSeverity Severity { get; } Property Value NcDiagnosticSeverity Text End-user friendly message text. public string Text { get; } Property Value string Methods ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.NcParsers.NcDiagnosticCategory.html": { "href": "api/Hi.NcParsers.NcDiagnosticCategory.html", @@ -4392,7 +4417,7 @@ "api/Hi.NcParsers.NcDiagnosticProgress.html": { "href": "api/Hi.NcParsers.NcDiagnosticProgress.html", "title": "Class NcDiagnosticProgress | HiAPI-C# 2025", - "summary": "Class NcDiagnosticProgress Namespace Hi.NcParsers Assembly HiMech.dll public class NcDiagnosticProgress : IProgress Inheritance object NcDiagnosticProgress Implements IProgress 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcDiagnosticProgress(IProgress) public NcDiagnosticProgress(IProgress progress) Parameters progress IProgress Methods ConfigurationError(Sentence, string, string, object) public void ConfigurationError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ConfigurationError(string, string, object) public void ConfigurationError(string id, string text, object detail = null) Parameters id string text string detail object ConfigurationMessage(Sentence, string, string) public void ConfigurationMessage(Sentence sentence, string id, string text) Parameters sentence Sentence id string text string ConfigurationMessage(string, string) public void ConfigurationMessage(string id, string text) Parameters id string text string ConfigurationWarning(Sentence, string, string, object) public void ConfigurationWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ConfigurationWarning(string, string, object) public void ConfigurationWarning(string id, string text, object detail = null) Parameters id string text string detail object Report(NcDiagnostic) Reports a progress update. public void Report(NcDiagnostic value) Parameters value NcDiagnostic The value of the updated progress. SystemError(Sentence, string, string, object) public void SystemError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object SystemError(string, string, object) public void SystemError(string id, string text, object detail = null) Parameters id string text string detail object SystemMessage(Sentence, string, string) public void SystemMessage(Sentence sentence, string id, string text) Parameters sentence Sentence id string text string SystemMessage(string, string) public void SystemMessage(string id, string text) Parameters id string text string UnsupportedError(Sentence, string, string, object) public void UnsupportedError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object UnsupportedError(string, string, object) public void UnsupportedError(string id, string text, object detail = null) Parameters id string text string detail object UnsupportedWarning(Sentence, string, string, object) public void UnsupportedWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object UnsupportedWarning(string, string, object) public void UnsupportedWarning(string id, string text, object detail = null) Parameters id string text string detail object ValidationError(Sentence, string, string, object) public void ValidationError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ValidationError(string, string, object) public void ValidationError(string id, string text, object detail = null) Parameters id string text string detail object ValidationWarning(Sentence, string, string, object) public void ValidationWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ValidationWarning(string, string, object) public void ValidationWarning(string id, string text, object detail = null) Parameters id string text string detail object" + "summary": "Class NcDiagnosticProgress Namespace Hi.NcParsers Assembly HiMech.dll Helper that emits NcDiagnostic records via an IProgress sink. Provides one method per (NcDiagnosticCategory, NcDiagnosticSeverity) pair, each with an optional Sentence overload locating the issue in the NC source. public class NcDiagnosticProgress : IProgress Inheritance object NcDiagnosticProgress Implements IProgress 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors NcDiagnosticProgress(IProgress) Creates a NcDiagnosticProgress that forwards every reported NcDiagnostic to progress. public NcDiagnosticProgress(IProgress progress) Parameters progress IProgress Sink that receives each diagnostic as object. Methods ConfigurationError(Sentence, string, string, object) Emits Configuration + Error located at sentence. public void ConfigurationError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ConfigurationError(string, string, object) Emits Configuration + Error (dependency/config missing, cannot proceed). public void ConfigurationError(string id, string text, object detail = null) Parameters id string text string detail object ConfigurationMessage(Sentence, string, string) Emits Configuration + Message located at sentence. public void ConfigurationMessage(Sentence sentence, string id, string text) Parameters sentence Sentence id string text string ConfigurationMessage(string, string) Emits Configuration + Message (dependency/config applied, informational event). public void ConfigurationMessage(string id, string text) Parameters id string text string ConfigurationWarning(Sentence, string, string, object) Emits Configuration + Warning located at sentence. public void ConfigurationWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ConfigurationWarning(string, string, object) Emits Configuration + Warning (dependency/config missing, using fallback). public void ConfigurationWarning(string id, string text, object detail = null) Parameters id string text string detail object Report(NcDiagnostic) Reports a progress update. public void Report(NcDiagnostic value) Parameters value NcDiagnostic The value of the updated progress. SystemError(Sentence, string, string, object) Emits System + Error located at sentence. public void SystemError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object SystemError(string, string, object) Emits System + Error (pipeline exception or unconsidered case). public void SystemError(string id, string text, object detail = null) Parameters id string text string detail object SystemMessage(Sentence, string, string) Emits System + Message located at sentence. public void SystemMessage(Sentence sentence, string id, string text) Parameters sentence Sentence id string text string SystemMessage(string, string) Emits System + Message (pipeline lifecycle / informational). public void SystemMessage(string id, string text) Parameters id string text string UnsupportedError(Sentence, string, string, object) Emits Unsupported + Error located at sentence. public void UnsupportedError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object UnsupportedError(string, string, object) Emits Unsupported + Error (recognized but unimplemented, likely matters). public void UnsupportedError(string id, string text, object detail = null) Parameters id string text string detail object UnsupportedWarning(Sentence, string, string, object) Emits Unsupported + Warning located at sentence. public void UnsupportedWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object UnsupportedWarning(string, string, object) Emits Unsupported + Warning (recognized but unimplemented, likely harmless). public void UnsupportedWarning(string id, string text, object detail = null) Parameters id string text string detail object ValidationError(Sentence, string, string, object) Emits Validation + Error located at sentence. public void ValidationError(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ValidationError(string, string, object) Emits Validation + Error (manufacturing/physics is unfeasible). public void ValidationError(string id, string text, object detail = null) Parameters id string text string detail object ValidationWarning(Sentence, string, string, object) Emits Validation + Warning located at sentence. public void ValidationWarning(Sentence sentence, string id, string text, object detail = null) Parameters sentence Sentence id string text string detail object ValidationWarning(string, string, object) Emits Validation + Warning (manufacturing/physics may be unfeasible). public void ValidationWarning(string id, string text, object detail = null) Parameters id string text string detail object" }, "api/Hi.NcParsers.NcDiagnosticSeverity.html": { "href": "api/Hi.NcParsers.NcDiagnosticSeverity.html", @@ -4402,12 +4427,12 @@ "api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html", "title": "Class BlockSkipSyntax | HiAPI-C# 2025", - "summary": "Class BlockSkipSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses the ISO 6983 / Fanuc Block Delete (a.k.a. Block Skip) prefix / or /N (N = 1..9) at the head of an NC block. Behaviour: No leading / → no-op, no BlockSkip section is written. / with IBlockSkipConfig layer OFF (or the dependency absent) → prefix is consumed, BlockSkip Symbol/Layer recorded for audit, Body stays null; the rest of the block stays in UnparsedText and parses normally. / with layer ON → the remaining block text is moved from UnparsedText into Body and UnparsedText is cleared. Downstream parsing syntaxes see no NC text so they emit nothing; semantics therefore produce no act. Must run after comment / CsScript syntaxes so that comments (and CsScript embedded in comments) continue to take effect regardless of the skip switch. public class BlockSkipSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BlockSkipSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BlockSkipSyntax() public BlockSkipSyntax() BlockSkipSyntax(XElement) public BlockSkipSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class BlockSkipSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Parses the ISO 6983 / Fanuc Block Delete (a.k.a. Block Skip) prefix / or /N (N = 1..9) at the head of an NC block. Behaviour: No leading / → no-op, no BlockSkip section is written. / with IBlockSkipConfig layer OFF (or the dependency absent) → prefix is consumed, BlockSkip Symbol/Layer recorded for audit, Body stays null; the rest of the block stays in UnparsedText and parses normally. / with layer ON → the remaining block text is moved from UnparsedText into Body and UnparsedText is cleared. Downstream parsing syntaxes see no NC text so they emit nothing; semantics therefore produce no act. Must run after comment / CsScript syntaxes so that comments (and CsScript embedded in comments) continue to take effect regardless of the skip switch. public class BlockSkipSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object BlockSkipSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors BlockSkipSyntax() Initializes a new instance with default settings. public BlockSkipSyntax() BlockSkipSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public BlockSkipSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html", "title": "Class QuoteCommentSyntax | HiAPI-C# 2025", - "summary": "Class QuoteCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll public class QuoteCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object QuoteCommentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors QuoteCommentSyntax() public QuoteCommentSyntax() QuoteCommentSyntax(XElement) public QuoteCommentSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class QuoteCommentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Assembly HiMech.dll Parses parenthesized comments such as (comment text) from the remaining unparsed text and emits a Comment section with the () symbol. public class QuoteCommentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object QuoteCommentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors QuoteCommentSyntax() Initializes a new instance with default settings. public QuoteCommentSyntax() QuoteCommentSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public QuoteCommentSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html", @@ -4417,7 +4442,7 @@ "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html", "title": "Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Classes QuoteCommentSyntax TailCommentSyntax In-situ syntax that strips a trailing comment from the NC line: text from a configured TailSymbol to end-of-line is moved into Comment on the block JSON." + "summary": "Namespace Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs Classes QuoteCommentSyntax Parses parenthesized comments such as (comment text) from the remaining unparsed text and emits a Comment section with the () symbol. TailCommentSyntax In-situ syntax that strips a trailing comment from the NC line: text from a configured TailSymbol to end-of-line is moved into Comment on the block JSON." }, "api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html", @@ -4432,7 +4457,7 @@ "api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html", "title": "Class FloatTagValueSyntax | HiAPI-C# 2025", - "summary": "Class FloatTagValueSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll TagValueSyntax that parses numeric literal values to double. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. public class FloatTagValueSyntax : TagValueSyntax, ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagValueSyntax FloatTagValueSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members TagValueSyntax.MakeXmlSource(string, string, bool) TagValueSyntax.VariableTag TagValueSyntax.CategoryPath TagValueSyntax.TagList TagValueSyntax.Name TagValueSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FloatTagValueSyntax(IEnumerable, IEnumerable, string) public FloatTagValueSyntax(IEnumerable categoryPath, IEnumerable tags, string variableTag) Parameters categoryPath IEnumerable tags IEnumerable variableTag string FloatTagValueSyntax(XElement) public FloatTagValueSyntax(XElement src) Parameters src XElement Properties XName public static string XName { get; } Property Value string Methods ToFloat(string) Parses a numeric literal to double; returns the original string for variable text. public static JsonNode ToFloat(string setup) Parameters setup string Returns JsonNode ToValueJsonNode(string) Converts a tag setup string value to a JsonNode. Override in derived classes for typed parsing (int, double). Variable text (e.g. Q2, #1, [#1+#2]) is kept as string. protected override JsonNode ToValueJsonNode(string setup) Parameters setup string Returns JsonNode" + "summary": "Class FloatTagValueSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll TagValueSyntax that parses numeric literal values to double. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. public class FloatTagValueSyntax : TagValueSyntax, ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagValueSyntax FloatTagValueSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members TagValueSyntax.MakeXmlSource(string, string, bool) TagValueSyntax.VariableTag TagValueSyntax.CategoryPath TagValueSyntax.TagList TagValueSyntax.Name TagValueSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors FloatTagValueSyntax(IEnumerable, IEnumerable, string) Initializes a new instance with the given category path, tag list, and variable-tag pattern. public FloatTagValueSyntax(IEnumerable categoryPath, IEnumerable tags, string variableTag) Parameters categoryPath IEnumerable JSON path under Parsing where matches are written. tags IEnumerable Single-letter tag names whose values are grabbed. variableTag string Regex/literal recognizing a variable reference as a value. FloatTagValueSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public FloatTagValueSyntax(XElement src) Parameters src XElement Source XML element. Properties XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods ToFloat(string) Parses a numeric literal to double; returns the original string for variable text. public static JsonNode ToFloat(string setup) Parameters setup string Returns JsonNode ToValueJsonNode(string) Converts a tag setup string value to a JsonNode. Override in derived classes for typed parsing (int, double). Variable text (e.g. Q2, #1, [#1+#2]) is kept as string. protected override JsonNode ToValueJsonNode(string setup) Parameters setup string Returns JsonNode" }, "api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html", @@ -4442,12 +4467,12 @@ "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html", "title": "Class HeidenhainDatumSettingSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainDatumSettingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs Assembly HiMech.dll Heidenhain syntax of CYCL DEF 247 DATUM SETTING . public class HeidenhainDatumSettingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainDatumSettingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainDatumSettingSyntax() public HeidenhainDatumSettingSyntax() HeidenhainDatumSettingSyntax(XElement) public HeidenhainDatumSettingSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList public List TagList { get; set; } Property Value List XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainDatumSettingSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs Assembly HiMech.dll Heidenhain syntax of CYCL DEF 247 DATUM SETTING . public class HeidenhainDatumSettingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainDatumSettingSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainDatumSettingSyntax() Initializes a new instance with default settings. public HeidenhainDatumSettingSyntax() HeidenhainDatumSettingSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainDatumSettingSyntax(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 TagList Tags to grab as float-valued coordinates within the cycle body. public List TagList { get; set; } Property Value List XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html", "title": "Class HeidenhainDatumShiftSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainDatumShiftSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs Assembly HiMech.dll Heidenhain syntax of CYCL DEF 7 DATUM SHIFT . public class HeidenhainDatumShiftSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainDatumShiftSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainDatumShiftSyntax() public HeidenhainDatumShiftSyntax() HeidenhainDatumShiftSyntax(XElement) public HeidenhainDatumShiftSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList public List TagList { get; set; } Property Value List XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainDatumShiftSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs Assembly HiMech.dll Heidenhain syntax of CYCL DEF 7 DATUM SHIFT . public class HeidenhainDatumShiftSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainDatumShiftSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainDatumShiftSyntax() Initializes a new instance with default settings. public HeidenhainDatumShiftSyntax() HeidenhainDatumShiftSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainDatumShiftSyntax(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 TagList Tags to grab as float-valued coordinates within the cycle body. public List TagList { get; set; } Property Value List XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html", @@ -4457,47 +4482,47 @@ "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html", "title": "Class HeidenhainBlkFormSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainBlkFormSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BLK FORM command (workpiece blank definition). public class HeidenhainBlkFormSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainBlkFormSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: BLK FORM 0.1 Z X+0 Y+0 Z-40 Output: { \"BLK FORM\": { \"Type\": \"0.1\", \"Axis\": \"Z\", \"X\": \"+0\", \"Y\": \"+0\", \"Z\": \"-40\" } } Input: BLK FORM 0.2 X+100 Y+100 Z+0 Output: { \"BLK FORM\": { \"Type\": \"0.2\", \"X\": \"+100\", \"Y\": \"+100\", \"Z\": \"+0\" } } Input: BLK FORM CYLINDER Z R50 L105 Output: { \"BLK FORM\": { \"Type\": \"CYLINDER\", \"Axis\": \"Z\", \"R\": \"50\", \"L\": \"105\" } } Constructors HeidenhainBlkFormSyntax() public HeidenhainBlkFormSyntax() HeidenhainBlkFormSyntax(XElement) public HeidenhainBlkFormSyntax(XElement src) Parameters src XElement Fields BlkFormTagList Tags for BLK FORM coordinate/dimension values. public static readonly string[] BlkFormTagList Field Value string[] Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainBlkFormSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BLK FORM command (workpiece blank definition). public class HeidenhainBlkFormSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainBlkFormSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: BLK FORM 0.1 Z X+0 Y+0 Z-40 Output: { \"BLK FORM\": { \"Type\": \"0.1\", \"Axis\": \"Z\", \"X\": \"+0\", \"Y\": \"+0\", \"Z\": \"-40\" } } Input: BLK FORM 0.2 X+100 Y+100 Z+0 Output: { \"BLK FORM\": { \"Type\": \"0.2\", \"X\": \"+100\", \"Y\": \"+100\", \"Z\": \"+0\" } } Input: BLK FORM CYLINDER Z R50 L105 Output: { \"BLK FORM\": { \"Type\": \"CYLINDER\", \"Axis\": \"Z\", \"R\": \"50\", \"L\": \"105\" } } Constructors HeidenhainBlkFormSyntax() Initializes a new instance with default settings. public HeidenhainBlkFormSyntax() HeidenhainBlkFormSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainBlkFormSyntax(XElement src) Parameters src XElement Source XML element. Fields BlkFormTagList Tags for BLK FORM coordinate/dimension values. public static readonly string[] BlkFormTagList Field Value string[] 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html", "title": "Class HeidenhainCallSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain CALL commands (CALL PGM and CALL LBL). public class HeidenhainCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: CALL PGM SubProg Output: { \"CALL\": { \"Target\": \"PGM\", \"Name\": \"SubProg\" } } Input: CALL LBL 5 Output: { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"5\" } } Input: CALL LBL MyLabel REP 3 Output: { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"MyLabel\", \"REP\": \"3\" } } Constructors HeidenhainCallSyntax() public HeidenhainCallSyntax() HeidenhainCallSyntax(XElement) public HeidenhainCallSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain CALL commands (CALL PGM and CALL LBL). public class HeidenhainCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: CALL PGM SubProg Output: { \"CALL\": { \"Target\": \"PGM\", \"Name\": \"SubProg\" } } Input: CALL LBL 5 Output: { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"5\" } } Input: CALL LBL MyLabel REP 3 Output: { \"CALL\": { \"Target\": \"LBL\", \"Name\": \"MyLabel\", \"REP\": \"3\" } } Constructors HeidenhainCallSyntax() Initializes a new instance with default settings. public HeidenhainCallSyntax() HeidenhainCallSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCallSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html", "title": "Class HeidenhainCyclDefSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainCyclDefSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Initialization Syntax of Heidenhain fixed head block for CYCL DEF . public class HeidenhainCyclDefSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCyclDefSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainCyclDefSyntax() public HeidenhainCyclDefSyntax() HeidenhainCyclDefSyntax(XElement) public HeidenhainCyclDefSyntax(XElement src) Parameters src XElement Fields CyclDefConst public const string CyclDefConst = \"CYCL DEF\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainCyclDefSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Initialization Syntax of Heidenhain fixed head block for CYCL DEF . public class HeidenhainCyclDefSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainCyclDefSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainCyclDefSyntax() Initializes a new instance with default settings. public HeidenhainCyclDefSyntax() HeidenhainCyclDefSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainCyclDefSyntax(XElement src) Parameters src XElement Source XML element. Fields CyclDefConst JSON key under Parsing that holds the parsed cycle number (e.g. 247 for CYCL DEF 247). public const string CyclDefConst = \"CYCL DEF\" Field Value string 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html", "title": "Class HeidenhainFnAssignmentSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainFnAssignmentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain FN variable assignment syntax. Extends TagAssignmentSyntax with FN opcode prefix. public class HeidenhainFnAssignmentSyntax : TagAssignmentSyntax, ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagAssignmentSyntax HeidenhainFnAssignmentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members TagAssignmentSyntax.DefaultCategoryPath TagAssignmentSyntax.MakeXmlSource(string, string, bool) TagAssignmentSyntax.CategoryPath TagAssignmentSyntax.TagList TagAssignmentSyntax.VarPrefix TagAssignmentSyntax.TerminateWords TagAssignmentSyntax.Name TagAssignmentSyntax.ToAssignmentJsonNode(string) TagAssignmentSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks FN 0: Q5 = +60 (assignment) FN 1: Q1 = -Q2 + -5 (addition) FN 2: Q1 = Q2 - Q3 (subtraction) FN 3: Q1 = Q2 * Q3 (multiplication) FN 4: Q1 = Q2 / Q3 (division) Constructors HeidenhainFnAssignmentSyntax() public HeidenhainFnAssignmentSyntax() HeidenhainFnAssignmentSyntax(XElement) public HeidenhainFnAssignmentSyntax(XElement src) Parameters src XElement Properties XName public static string XName { get; } Property Value string Methods TryStripPrefix(ref string) 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). protected override bool TryStripPrefix(ref string unparsedText) Parameters unparsedText string Returns bool" + "summary": "Class HeidenhainFnAssignmentSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain FN variable assignment syntax. Extends TagAssignmentSyntax with FN opcode prefix. public class HeidenhainFnAssignmentSyntax : TagAssignmentSyntax, ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagAssignmentSyntax HeidenhainFnAssignmentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members TagAssignmentSyntax.DefaultCategoryPath TagAssignmentSyntax.MakeXmlSource(string, string, bool) TagAssignmentSyntax.CategoryPath TagAssignmentSyntax.TagList TagAssignmentSyntax.VarPrefix TagAssignmentSyntax.TerminateWords TagAssignmentSyntax.Name TagAssignmentSyntax.ToAssignmentJsonNode(string) TagAssignmentSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks FN 0: Q5 = +60 (assignment) FN 1: Q1 = -Q2 + -5 (addition) FN 2: Q1 = Q2 - Q3 (subtraction) FN 3: Q1 = Q2 * Q3 (multiplication) FN 4: Q1 = Q2 / Q3 (division) Constructors HeidenhainFnAssignmentSyntax() Initializes a new instance with default settings. public HeidenhainFnAssignmentSyntax() HeidenhainFnAssignmentSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainFnAssignmentSyntax(XElement src) Parameters src XElement Source XML element. Properties XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods TryStripPrefix(ref string) 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). protected override bool TryStripPrefix(ref string unparsedText) Parameters unparsedText string Returns bool" }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html", "title": "Class HeidenhainLSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainLSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain linear movement (the leading L) syntax. public class HeidenhainLSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainLSyntax() public HeidenhainLSyntax() HeidenhainLSyntax(XElement) public HeidenhainLSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList public List TagList { get; set; } Property Value List XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainLSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain linear movement (the leading L) syntax. public class HeidenhainLSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainLSyntax() Initializes a new instance with default settings. public HeidenhainLSyntax() HeidenhainLSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainLSyntax(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 TagList Axis tags grabbed as float-valued coordinates after the leading L. public List TagList { get; set; } Property Value List XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html", "title": "Class HeidenhainLblSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainLblSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll 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. public class HeidenhainLblSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLblSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: LBL 1 Output: { \"LBL\": { \"Name\": \"1\" } } Input: LBL MyLabel Output: { \"LBL\": { \"Name\": \"MyLabel\" } } Input: LBL 0 Output: { \"LBL\": { \"Name\": \"0\" } } Constructors HeidenhainLblSyntax() public HeidenhainLblSyntax() HeidenhainLblSyntax(XElement) public HeidenhainLblSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainLblSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll 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. public class HeidenhainLblSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainLblSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: LBL 1 Output: { \"LBL\": { \"Name\": \"1\" } } Input: LBL MyLabel Output: { \"LBL\": { \"Name\": \"MyLabel\" } } Input: LBL 0 Output: { \"LBL\": { \"Name\": \"0\" } } Constructors HeidenhainLblSyntax() Initializes a new instance with default settings. public HeidenhainLblSyntax() HeidenhainLblSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainLblSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html", "title": "Class HeidenhainPlaneSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainPlaneSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain PLANE command. Handles: PLANE RESET PLANE SPATIAL SPA SPB SPC SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] PLANE PROJECTED PROPR PROMIN ROT SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] public class HeidenhainPlaneSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainPlaneSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN Output: { \"PLANE\": { \"Mode\": \"SPATIAL\", \"SPA\": \"+30\", \"SPB\": \"+0\", \"SPC\": \"-10\", \"SEQ\": \"+\", \"Rot\": \"COORD\", \"Positioning\": \"TURN\" } } Input: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE Output: { \"PLANE\": { \"Mode\": \"PROJECTED\", \"PROPR\": \"+30\", \"PROMIN\": \"+0\", \"ROT\": \"+45\", \"SEQ\": \"-\", \"Rot\": \"TABLE\", \"Positioning\": \"MOVE\" } } Input: PLANE RESET Output: { \"PLANE\": { \"Mode\": \"RESET\" } } Constructors HeidenhainPlaneSyntax() public HeidenhainPlaneSyntax() HeidenhainPlaneSyntax(XElement) public HeidenhainPlaneSyntax(XElement src) Parameters src XElement Fields ProjectedTagList Projected tags for PLANE PROJECTED command. PROPR: projection angle, PROMIN: minimum angle, ROT: rotation of tilted plane. public static readonly string[] ProjectedTagList Field Value string[] SpatialTagList Spatial axis tags for PLANE SPATIAL command. public static readonly string[] SpatialTagList Field Value string[] Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainPlaneSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain PLANE command. Handles: PLANE RESET PLANE SPATIAL SPA SPB SPC SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] PLANE PROJECTED PROPR PROMIN ROT SEQ+/- [COORD ROT|TABLE ROT] [MOVE|TURN|STAY] public class HeidenhainPlaneSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainPlaneSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: PLANE SPATIAL SPA+30 SPB+0 SPC-10 SEQ+ COORD ROT TURN Output: { \"PLANE\": { \"Mode\": \"SPATIAL\", \"SPA\": \"+30\", \"SPB\": \"+0\", \"SPC\": \"-10\", \"SEQ\": \"+\", \"Rot\": \"COORD\", \"Positioning\": \"TURN\" } } Input: PLANE PROJECTED PROPR+30 PROMIN+0 ROT+45 SEQ- TABLE ROT MOVE Output: { \"PLANE\": { \"Mode\": \"PROJECTED\", \"PROPR\": \"+30\", \"PROMIN\": \"+0\", \"ROT\": \"+45\", \"SEQ\": \"-\", \"Rot\": \"TABLE\", \"Positioning\": \"MOVE\" } } Input: PLANE RESET Output: { \"PLANE\": { \"Mode\": \"RESET\" } } Constructors HeidenhainPlaneSyntax() Initializes a new instance with default settings. public HeidenhainPlaneSyntax() HeidenhainPlaneSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainPlaneSyntax(XElement src) Parameters src XElement Source XML element. Fields ProjectedTagList Projected tags for PLANE PROJECTED command. PROPR: projection angle, PROMIN: minimum angle, ROT: rotation of tilted plane. public static readonly string[] ProjectedTagList Field Value string[] SpatialTagList Spatial axis tags for PLANE SPATIAL command. public static readonly string[] SpatialTagList Field Value string[] 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html", "title": "Class HeidenhainProgramSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainProgramSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BEGIN PGM and END PGM commands. public class HeidenhainProgramSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainProgramSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: BEGIN PGM DEMO MM Output: { \"PGM\": { \"Command\": \"BEGIN\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } Input: END PGM DEMO MM Output: { \"PGM\": { \"Command\": \"END\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } Constructors HeidenhainProgramSyntax() public HeidenhainProgramSyntax() HeidenhainProgramSyntax(XElement) public HeidenhainProgramSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainProgramSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain BEGIN PGM and END PGM commands. public class HeidenhainProgramSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainProgramSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: BEGIN PGM DEMO MM Output: { \"PGM\": { \"Command\": \"BEGIN\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } Input: END PGM DEMO MM Output: { \"PGM\": { \"Command\": \"END\", \"Name\": \"DEMO\", \"Unit\": \"MM\" } } Constructors HeidenhainProgramSyntax() Initializes a new instance with default settings. public HeidenhainProgramSyntax() HeidenhainProgramSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainProgramSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html", "title": "Class HeidenhainToolCallSyntax | HiAPI-C# 2025", - "summary": "Class HeidenhainToolCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain TOOL CALL command. Handles: TOOL CALL [ToolId|“ToolName”] [X|Y|Z] [S…] [DL…] [DR…] public class HeidenhainToolCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainToolCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: TOOL CALL 1 Z S5000 Output: { \"TOOL CALL\": { \"T\": \"1\", \"Axis\": \"Z\", \"S\": \"5000\" } } Input: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 Output: { \"TOOL CALL\": { \"T\": \"MyTool\", \"Axis\": \"Z\", \"S\": \"3000\", \"DL\": \"+0.5\", \"DR\": \"-0.1\" } } Constructors HeidenhainToolCallSyntax() public HeidenhainToolCallSyntax() HeidenhainToolCallSyntax(XElement) public HeidenhainToolCallSyntax(XElement src) Parameters src XElement Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class HeidenhainToolCallSyntax Namespace Hi.NcParsers.ParsingSyntaxs.Heidenhain Assembly HiMech.dll Syntax for Heidenhain TOOL CALL command. Handles: TOOL CALL [ToolId|“ToolName”] [X|Y|Z] [S…] [DL…] [DR…] public class HeidenhainToolCallSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainToolCallSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Input: TOOL CALL 1 Z S5000 Output: { \"TOOL CALL\": { \"T\": \"1\", \"Axis\": \"Z\", \"S\": \"5000\" } } Input: TOOL CALL “MyTool” Z S3000 DL+0.5 DR-0.1 Output: { \"TOOL CALL\": { \"T\": \"MyTool\", \"Axis\": \"Z\", \"S\": \"3000\", \"DL\": \"+0.5\", \"DR\": \"-0.1\" } } Constructors HeidenhainToolCallSyntax() Initializes a new instance with default settings. public HeidenhainToolCallSyntax() HeidenhainToolCallSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainToolCallSyntax(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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.Heidenhain.html", @@ -4507,12 +4532,12 @@ "api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html", "title": "Class IntegerTagValueSyntax | HiAPI-C# 2025", - "summary": "Class IntegerTagValueSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll TagValueSyntax that parses numeric literal values to int. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. public class IntegerTagValueSyntax : TagValueSyntax, ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagValueSyntax IntegerTagValueSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members TagValueSyntax.MakeXmlSource(string, string, bool) TagValueSyntax.VariableTag TagValueSyntax.CategoryPath TagValueSyntax.TagList TagValueSyntax.Name TagValueSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IntegerTagValueSyntax(IEnumerable, IEnumerable, string) public IntegerTagValueSyntax(IEnumerable categoryPath, IEnumerable tags, string variableTag) Parameters categoryPath IEnumerable tags IEnumerable variableTag string IntegerTagValueSyntax(XElement) public IntegerTagValueSyntax(XElement src) Parameters src XElement Properties XName public static string XName { get; } Property Value string Methods ToInteger(string) Parses a numeric literal to int; returns the original string for variable text. public static JsonNode ToInteger(string setup) Parameters setup string Returns JsonNode ToValueJsonNode(string) Converts a tag setup string value to a JsonNode. Override in derived classes for typed parsing (int, double). Variable text (e.g. Q2, #1, [#1+#2]) is kept as string. protected override JsonNode ToValueJsonNode(string setup) Parameters setup string Returns JsonNode" + "summary": "Class IntegerTagValueSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll TagValueSyntax that parses numeric literal values to int. Variable text (e.g. Q2, #1, [#1+#2]) remains as string. public class IntegerTagValueSyntax : TagValueSyntax, ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagValueSyntax IntegerTagValueSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members TagValueSyntax.MakeXmlSource(string, string, bool) TagValueSyntax.VariableTag TagValueSyntax.CategoryPath TagValueSyntax.TagList TagValueSyntax.Name TagValueSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors IntegerTagValueSyntax(IEnumerable, IEnumerable, string) Initializes a new instance with the given category path, tag list, and variable-tag pattern. public IntegerTagValueSyntax(IEnumerable categoryPath, IEnumerable tags, string variableTag) Parameters categoryPath IEnumerable JSON path under Parsing where matches are written. tags IEnumerable Single-letter tag names whose values are grabbed. variableTag string Regex/literal recognizing a variable reference as a value. IntegerTagValueSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IntegerTagValueSyntax(XElement src) Parameters src XElement Source XML element. Properties XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods ToInteger(string) Parses a numeric literal to int; returns the original string for variable text. public static JsonNode ToInteger(string setup) Parameters setup string Returns JsonNode ToValueJsonNode(string) Converts a tag setup string value to a JsonNode. Override in derived classes for typed parsing (int, double). Variable text (e.g. Q2, #1, [#1+#2]) is kept as string. protected override JsonNode ToValueJsonNode(string setup) Parameters setup string Returns JsonNode" }, "api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html", "title": "Class NamedVarAssignmentSyntax | HiAPI-C# 2025", - "summary": "Class NamedVarAssignmentSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll 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 Inheritance object NamedVarAssignmentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Siemens GUD: _X_HOME = 100, _MY_VAR = R1 + R2 Siemens LUD: DEF REAL MY_LOCAL; MY_LOCAL = 50 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. Constructors NamedVarAssignmentSyntax(IEnumerable, IEnumerable, string) public NamedVarAssignmentSyntax(IEnumerable categoryPath, IEnumerable terminateWords = null, string identPattern = \"[A-Za-z_]\\\\w+\") Parameters categoryPath IEnumerable terminateWords IEnumerable identPattern string NamedVarAssignmentSyntax(XElement) public NamedVarAssignmentSyntax(XElement src) Parameters src XElement Fields DefaultIdentPattern public const string DefaultIdentPattern = \"[A-Za-z_]\\\\w+\" Field Value string Properties CategoryPath public List CategoryPath { get; set; } Property Value List IdentPattern Regex pattern for matching variable identifiers. Default: [A-Za-z_]\\w+ (at least 2 characters). public string IdentPattern { get; set; } Property Value string Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TerminateWords public List TerminateWords { get; set; } Property Value List XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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. ToAssignmentJsonNode(string) Converts an assignment expression string to a JsonNode. Override in derived classes for typed parsing. protected virtual JsonNode ToAssignmentJsonNode(string setup) Parameters setup string Returns JsonNode" + "summary": "Class NamedVarAssignmentSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll 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 Inheritance object NamedVarAssignmentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Siemens GUD: _X_HOME = 100, _MY_VAR = R1 + R2 Siemens LUD: DEF REAL MY_LOCAL; MY_LOCAL = 50 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. Constructors NamedVarAssignmentSyntax(IEnumerable, IEnumerable, string) Initializes a new instance with the given category path, optional terminator keywords, and an identifier regex pattern. public NamedVarAssignmentSyntax(IEnumerable categoryPath, IEnumerable terminateWords = null, string identPattern = \"[A-Za-z_]\\\\w+\") Parameters categoryPath IEnumerable JSON path under Parsing where assignments are written. terminateWords IEnumerable Optional keywords that end the right-hand expression. identPattern string Regex matching the variable identifier; defaults to DefaultIdentPattern. NamedVarAssignmentSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public NamedVarAssignmentSyntax(XElement src) Parameters src XElement Source XML element. Fields DefaultIdentPattern Default identifier regex (at least 2 characters; first char letter or underscore). Used when IdentPattern is not overridden. public const string DefaultIdentPattern = \"[A-Za-z_]\\\\w+\" Field Value string Properties CategoryPath JSON path under Parsing where matched assignments are written. public List CategoryPath { get; set; } Property Value List IdentPattern Regex pattern for matching variable identifiers. Default: [A-Za-z_]\\w+ (at least 2 characters). public string IdentPattern { get; set; } Property Value string Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TerminateWords Optional words (e.g. block-end keywords) that terminate the right-hand expression so the remainder is left in UnparsedText. public List TerminateWords { get; set; } Property Value List XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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. ToAssignmentJsonNode(string) Converts an assignment expression string to a JsonNode. Override in derived classes for typed parsing. protected virtual JsonNode ToAssignmentJsonNode(string setup) Parameters setup string Returns JsonNode" }, "api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html", @@ -4537,12 +4562,12 @@ "api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html", "title": "Class TagAssignmentSyntax | HiAPI-C# 2025", - "summary": "Class TagAssignmentSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Assignment syntax with = sign. Unlike TagValueSyntax which handles concatenated tag-value pairs (no = sign), this class handles explicit assignment statements. public class TagAssignmentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagAssignmentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Derived HeidenhainFnAssignmentSyntax 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Fanuc: #1 = 100, #100 = [#1 + #2] Siemens: R1 = 100, R1 = R2 + R3 Heidenhain: via derived HeidenhainFnAssignmentSyntax which adds FN prefix handling Wraps GrabTagAssignment(ref string, IEnumerable, string, IEnumerable) as an INcSyntax. Constructors TagAssignmentSyntax(IEnumerable, IEnumerable, string, IEnumerable) Creates an assignment syntax. Pass null for categoryPath to use DefaultCategoryPath (Parsing.Assignments). Pass an empty collection only if assignments should land at the Parsing root. public TagAssignmentSyntax(IEnumerable categoryPath, IEnumerable tags, string varPrefix, IEnumerable terminateWords = null) Parameters categoryPath IEnumerable tags IEnumerable varPrefix string terminateWords IEnumerable TagAssignmentSyntax(XElement) public TagAssignmentSyntax(XElement src) Parameters src XElement Properties CategoryPath public List CategoryPath { get; set; } Property Value List DefaultCategoryPath Default CategoryPath assigned when the caller passes null (or omits the element in saved XML). Routes assignment outputs into Parsing.Assignments so that variable-reading syntaxes can target a single well-defined subtree. public static IReadOnlyList DefaultCategoryPath { get; } Property Value IReadOnlyList Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList public List TagList { get; set; } Property Value List TerminateWords public List TerminateWords { get; set; } Property Value List VarPrefix public string VarPrefix { get; set; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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 virtual 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. ToAssignmentJsonNode(string) Converts an assignment expression string to a JsonNode. Override in derived classes for typed parsing. protected virtual JsonNode ToAssignmentJsonNode(string setup) Parameters setup string Returns JsonNode TryStripPrefix(ref string) 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). protected virtual bool TryStripPrefix(ref string unparsedText) Parameters unparsedText string Returns bool" + "summary": "Class TagAssignmentSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Assignment syntax with = sign. Unlike TagValueSyntax which handles concatenated tag-value pairs (no = sign), this class handles explicit assignment statements. public class TagAssignmentSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagAssignmentSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Derived HeidenhainFnAssignmentSyntax 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks Fanuc: #1 = 100, #100 = [#1 + #2] Siemens: R1 = 100, R1 = R2 + R3 Heidenhain: via derived HeidenhainFnAssignmentSyntax which adds FN prefix handling Wraps GrabTagAssignment(ref string, IEnumerable, string, IEnumerable) as an INcSyntax. Constructors TagAssignmentSyntax(IEnumerable, IEnumerable, string, IEnumerable) Creates an assignment syntax. Pass null for categoryPath to use DefaultCategoryPath (Parsing.Assignments). Pass an empty collection only if assignments should land at the Parsing root. public TagAssignmentSyntax(IEnumerable categoryPath, IEnumerable tags, string varPrefix, IEnumerable terminateWords = null) Parameters categoryPath IEnumerable tags IEnumerable varPrefix string terminateWords IEnumerable TagAssignmentSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public TagAssignmentSyntax(XElement src) Parameters src XElement Source XML element. Properties CategoryPath JSON path under Parsing where matched assignments are written. public List CategoryPath { get; set; } Property Value List DefaultCategoryPath Default CategoryPath assigned when the caller passes null (or omits the element in saved XML). Routes assignment outputs into Parsing.Assignments so that variable-reading syntaxes can target a single well-defined subtree. public static IReadOnlyList DefaultCategoryPath { get; } Property Value IReadOnlyList Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList Numeric tag suffixes accepted (e.g. 1, 100) when paired with VarPrefix. public List TagList { get; set; } Property Value List TerminateWords Optional keywords that terminate the right-hand expression so the remainder is left in UnparsedText. public List TerminateWords { get; set; } Property Value List VarPrefix Variable prefix (e.g. #, R, Q) preceding the numeric tag. public string VarPrefix { get; set; } 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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 virtual 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. ToAssignmentJsonNode(string) Converts an assignment expression string to a JsonNode. Override in derived classes for typed parsing. protected virtual JsonNode ToAssignmentJsonNode(string setup) Parameters setup string Returns JsonNode TryStripPrefix(ref string) 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). protected virtual bool TryStripPrefix(ref string unparsedText) Parameters unparsedText string Returns bool" }, "api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html", "title": "Class TagValueSyntax | HiAPI-C# 2025", - "summary": "Class TagValueSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Concatenated tag-value syntax (no = sign). ex. Heidenhain: L X Q2 Y33.4 FQ1 ISO: X100.3Y3.3 public class TagValueSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagValueSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Derived FloatTagValueSyntax IntegerTagValueSyntax 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors TagValueSyntax(IEnumerable, IEnumerable, string) public TagValueSyntax(IEnumerable categoryPath, IEnumerable tags, string variableTag) Parameters categoryPath IEnumerable tags IEnumerable variableTag string TagValueSyntax(XElement) public TagValueSyntax(XElement src) Parameters src XElement Properties CategoryPath public List CategoryPath { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList public List TagList { get; set; } Property Value List VariableTag public string VariableTag { get; set; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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 virtual 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. ToValueJsonNode(string) Converts a tag setup string value to a JsonNode. Override in derived classes for typed parsing (int, double). Variable text (e.g. Q2, #1, [#1+#2]) is kept as string. protected virtual JsonNode ToValueJsonNode(string setup) Parameters setup string Returns JsonNode" + "summary": "Class TagValueSyntax Namespace Hi.NcParsers.ParsingSyntaxs Assembly HiMech.dll Concatenated tag-value syntax (no = sign). ex. Heidenhain: L X Q2 Y33.4 FQ1 ISO: X100.3Y3.3 public class TagValueSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object TagValueSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Derived FloatTagValueSyntax IntegerTagValueSyntax 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors TagValueSyntax(IEnumerable, IEnumerable, string) Initializes a new instance with the given category path, tag list, and variable-tag pattern. public TagValueSyntax(IEnumerable categoryPath, IEnumerable tags, string variableTag) Parameters categoryPath IEnumerable JSON path under Parsing where matches are written. tags IEnumerable Single-letter tag names whose values are grabbed. variableTag string Regex/literal recognizing a variable reference as a value. TagValueSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public TagValueSyntax(XElement src) Parameters src XElement Source XML element. Properties CategoryPath JSON path under Parsing where matched tag-values are written. public List CategoryPath { get; set; } Property Value List Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TagList Single-letter tag names whose values are grabbed (e.g. X, Y, Z, F). public List TagList { get; set; } Property Value List VariableTag Regex (or literal) that recognizes a variable reference token (e.g. Q2, #1, [#1+#2]) as the value of a tag. public string VariableTag { get; set; } 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, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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 virtual 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. ToValueJsonNode(string) Converts a tag setup string value to a JsonNode. Override in derived classes for typed parsing (int, double). Variable text (e.g. Q2, #1, [#1+#2]) is kept as string. protected virtual JsonNode ToValueJsonNode(string setup) Parameters setup string Returns JsonNode" }, "api/Hi.NcParsers.ParsingSyntaxs.html": { "href": "api/Hi.NcParsers.ParsingSyntaxs.html", @@ -4552,12 +4577,12 @@ "api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html": { "href": "api/Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html", "title": "Class ModalCarrySyntax | HiAPI-C# 2025", - "summary": "Class ModalCarrySyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Per-block modal-section carry. For each key in TrackedKeys, if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set AddedByKey = AddedByValue inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state. This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files. public class ModalCarrySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ModalCarrySyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ModalCarrySyntax() public ModalCarrySyntax() ModalCarrySyntax(XElement) public ModalCarrySyntax(XElement src) Parameters src XElement Fields AddedByValue Value written under AddedByKey on each section this syntax deep-clones from the previous block. Mirrors AddedByValue's role for its own synthesis — both let cache-file readers distinguish post-Logic / Inspection stage injections from LogicSyntaxs-stage authored values (the latter have no AddedByKey). public const string AddedByValue = \"ModalCarry\" Field Value string Properties Default public static ModalCarrySyntax Default { get; } Property Value ModalCarrySyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TrackedKeys Section keys to carry. Order-insensitive; duplicates ignored. public List TrackedKeys { get; set; } Property Value List XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode node, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters node LazyLinkedListNode ncDependencyList List 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." + "summary": "Class ModalCarrySyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Per-block modal-section carry. For each key in TrackedKeys, if the current block has no section for that key, deep-clone the same section from the immediately previous block (which is itself guaranteed to carry it because every block is processed by this syntax) and set AddedByKey = AddedByValue inside the cloned section. Lets every block stand alone with its full modal context, so downstream readers (cache-file dumps, semantics, UI jumping to a single block) do not need EnumerateBack() to resolve modal state. This replaces the earlier CacheSyntax design (which sampled every Pace blocks). The legacy CacheSyntax XName is still recognised on load for backward compatibility with previously-saved project files. public class ModalCarrySyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ModalCarrySyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors ModalCarrySyntax() Creates an empty ModalCarrySyntax; populate TrackedKeys before use. public ModalCarrySyntax() ModalCarrySyntax(XElement) Reconstructs a ModalCarrySyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). public ModalCarrySyntax(XElement src) Parameters src XElement XML element carrying a TrackedKeys child with one Key per entry; null is treated as defaults. Fields AddedByValue Value written under AddedByKey on each section this syntax deep-clones from the previous block. Mirrors AddedByValue's role for its own synthesis — both let cache-file readers distinguish post-Logic / Inspection stage injections from LogicSyntaxs-stage authored values (the latter have no AddedByKey). public const string AddedByValue = \"ModalCarry\" Field Value string Properties Default Default-configured ModalCarrySyntax with the standard modal sections (TiltTransform, PathSmoothing, IsoLocalCoordinateOffset, CannedCycle, MotionState, MachineCoordinateState) tracked. public static ModalCarrySyntax Default { get; } Property Value ModalCarrySyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string TrackedKeys Section keys to carry. Order-insensitive; duplicates ignored. public List TrackedKeys { get; set; } Property Value List XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode node, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters node LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html": { "href": "api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html", "title": "Class RadiusCompensationSyntax | HiAPI-C# 2025", - "summary": "Class RadiusCompensationSyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Resolves cutter radius compensation (G41/G42/G40) by offsetting the tool path perpendicular to the programmed direction. Must be placed after motion syntaxes (CircularMotionSyntax, LinearMotionSyntax) because it reads the Hi.Motion section. Must NOT be placed inside BundleSyntax because it requires look-forward (Next). For simple cases (line-line, no transient), the syntax overwrites MachineCoordinate with the offset position. For arc blocks that need transient bridging segments, the Motion section is replaced with a CompoundMotion containing sub-items. public class RadiusCompensationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RadiusCompensationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RadiusCompensationSyntax() public RadiusCompensationSyntax() RadiusCompensationSyntax(XElement) public RadiusCompensationSyntax(XElement src) Parameters src XElement Fields ArcBeginProgramXyzKey JSON key for the arc begin program position inside CompoundMotion arc items. public const string ArcBeginProgramXyzKey = \"ArcBeginProgramXyz\" Field Value string MotionProgramXyzKey JSON key for the compensated program position inside Motion sections and CompoundMotion arc items. public const string MotionProgramXyzKey = \"MotionProgramXyz\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." + "summary": "Class RadiusCompensationSyntax Namespace Hi.NcParsers.PostLogicSyntaxs Assembly HiMech.dll Resolves cutter radius compensation (G41/G42/G40) by offsetting the tool path perpendicular to the programmed direction. Must be placed after motion syntaxes (CircularMotionSyntax, LinearMotionSyntax) because it reads the Hi.Motion section. Must NOT be placed inside BundleSyntax because it requires look-forward (Next). For simple cases (line-line, no transient), the syntax overwrites MachineCoordinate with the offset position. For arc blocks that need transient bridging segments, the Motion section is replaced with a CompoundMotion containing sub-items. public class RadiusCompensationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object RadiusCompensationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors RadiusCompensationSyntax() Creates a default RadiusCompensationSyntax. public RadiusCompensationSyntax() RadiusCompensationSyntax(XElement) Reconstructs a RadiusCompensationSyntax from a project XML element previously produced by MakeXmlSource(string, string, bool). The element carries no fields, so src is used only for factory dispatch. public RadiusCompensationSyntax(XElement src) Parameters src XElement XML element previously produced by MakeXmlSource(string, string, bool). Fields ArcBeginProgramXyzKey JSON key for the arc begin program position inside CompoundMotion arc items. public const string ArcBeginProgramXyzKey = \"ArcBeginProgramXyz\" Field Value string MotionProgramXyzKey JSON key for the compensated program position inside Motion sections and CompoundMotion arc items. public const string MotionProgramXyzKey = \"MotionProgramXyz\" Field Value string Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List 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." }, "api/Hi.NcParsers.PostLogicSyntaxs.html": { "href": "api/Hi.NcParsers.PostLogicSyntaxs.html", @@ -4567,7 +4592,7 @@ "api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html": { "href": "api/Hi.NcParsers.Segmenters.HeidenhainSegmenter.html", "title": "Class HeidenhainSegmenter | HiAPI-C# 2025", - "summary": "Class HeidenhainSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Heidenhain NC block builder. Also support single line NC block. public class HeidenhainSegmenter : ISegmenter, IToXElement Inheritance object HeidenhainSegmenter Implements ISegmenter IToXElement 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainSegmenter() public HeidenhainSegmenter() Properties Name Display name of this segmenter. public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods GetSentences(LazyLinkedList, NcDiagnosticProgress) Segments the indexed file lines into Sentences. public IEnumerable GetSentences(LazyLinkedList indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress) Parameters indexedFileLines LazyLinkedList The lazy linked list of indexed file lines. ncDiagnosticProgress NcDiagnosticProgress Diagnostic progress reporter. Returns IEnumerable A sequence of Sentences. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class HeidenhainSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Heidenhain NC block builder. Also support single line NC block. public class HeidenhainSegmenter : ISegmenter, IToXElement Inheritance object HeidenhainSegmenter Implements ISegmenter IToXElement 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HeidenhainSegmenter() Creates a HeidenhainSegmenter with the default block-keyword list. public HeidenhainSegmenter() Properties Name Display name of this segmenter. public string Name { get; } Property Value string XName XML element name used to register and serialize this segmenter. public static string XName { get; } Property Value string Methods GetSentences(LazyLinkedList, NcDiagnosticProgress) Segments the indexed file lines into Sentences. public IEnumerable GetSentences(LazyLinkedList indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress) Parameters indexedFileLines LazyLinkedList The lazy linked list of indexed file lines. ncDiagnosticProgress NcDiagnosticProgress Diagnostic progress reporter. Returns IEnumerable A sequence of Sentences. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcParsers.Segmenters.ISegmenter.html": { "href": "api/Hi.NcParsers.Segmenters.ISegmenter.html", @@ -4577,7 +4602,7 @@ "api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html": { "href": "api/Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html", "title": "Class InlineDelimiterSegmenter | HiAPI-C# 2025", - "summary": "Class InlineDelimiterSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Segments NC lines by an inline delimiter (e.g. ';'). A line containing the delimiter produces multiple Sentences, each with a precise FileLineCharIndexSegment. Lines without the delimiter produce a single Sentence. public class InlineDelimiterSegmenter : ISegmenter, IToXElement Inheritance object InlineDelimiterSegmenter Implements ISegmenter IToXElement 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors InlineDelimiterSegmenter() public InlineDelimiterSegmenter() InlineDelimiterSegmenter(char) public InlineDelimiterSegmenter(char delimiter) Parameters delimiter char Fields DefaultDelimiter Default delimiter: ';'. public static readonly char DefaultDelimiter Field Value char Properties Delimiter The inline delimiter character. public char Delimiter { get; } Property Value char Name Display name of this segmenter. public string Name { get; } Property Value string XName public static string XName { get; } Property Value string Methods GetSentences(LazyLinkedList, NcDiagnosticProgress) Segments the indexed file lines into Sentences. public IEnumerable GetSentences(LazyLinkedList indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress) Parameters indexedFileLines LazyLinkedList The lazy linked list of indexed file lines. ncDiagnosticProgress NcDiagnosticProgress Diagnostic progress reporter. Returns IEnumerable A sequence of Sentences. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." + "summary": "Class InlineDelimiterSegmenter Namespace Hi.NcParsers.Segmenters Assembly HiMech.dll Segments NC lines by an inline delimiter (e.g. ';'). A line containing the delimiter produces multiple Sentences, each with a precise FileLineCharIndexSegment. Lines without the delimiter produce a single Sentence. public class InlineDelimiterSegmenter : ISegmenter, IToXElement Inheritance object InlineDelimiterSegmenter Implements ISegmenter IToXElement 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors InlineDelimiterSegmenter() Creates an InlineDelimiterSegmenter using DefaultDelimiter. public InlineDelimiterSegmenter() InlineDelimiterSegmenter(char) Creates an InlineDelimiterSegmenter with a custom delimiter character. public InlineDelimiterSegmenter(char delimiter) Parameters delimiter char Fields DefaultDelimiter Default delimiter: ';'. public static readonly char DefaultDelimiter Field Value char Properties Delimiter The inline delimiter character. public char Delimiter { get; } Property Value char Name Display name of this segmenter. public string Name { get; } Property Value string XName XML element name used to register and serialize this segmenter. public static string XName { get; } Property Value string Methods GetSentences(LazyLinkedList, NcDiagnosticProgress) Segments the indexed file lines into Sentences. public IEnumerable GetSentences(LazyLinkedList indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress) Parameters indexedFileLines LazyLinkedList The lazy linked list of indexed file lines. ncDiagnosticProgress NcDiagnosticProgress Diagnostic progress reporter. Returns IEnumerable A sequence of Sentences. ToXElement() Get the XElement to represent the object. public XElement ToXElement() Returns XElement XElement to represent the object." }, "api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html": { "href": "api/Hi.NcParsers.Segmenters.SingleLineSegmenter.html", @@ -4592,32 +4617,32 @@ "api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html": { "href": "api/Hi.NcParsers.Semantics.ClLinearMotionSemantic.html", "title": "Class ClLinearMotionSemantic | HiAPI-C# 2025", - "summary": "Class ClLinearMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ClLinear motion into CL-level linear interpolation with per-step inverse kinematics. Used when RTCP (G43.4/TRAORI/M128) is active and rotary axes change, producing ActClDerivedMcXyzabcContour. The CL (cutter location) endpoints are derived from MC endpoints via forward kinematics, then interpolated linearly. The MC path is non-linear because the tool orientation changes during the move. public class ClLinearMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object ClLinearMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class ClLinearMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ClLinear motion into CL-level linear interpolation with per-step inverse kinematics. Used when RTCP (G43.4/TRAORI/M128) is active and rotary axes change, producing ActClDerivedMcXyzabcContour. The CL (cutter location) endpoints are derived from MC endpoints via forward kinematics, then interpolated linearly. The MC path is non-linear because the tool orientation changes during the move. public class ClLinearMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object ClLinearMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CompoundMotionSemantic.html", "title": "Class CompoundMotionSemantic | HiAPI-C# 2025", - "summary": "Class CompoundMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ICompoundMotionDef into acts by delegating ItemsKey to ResolveItems(JsonArray, LazyLinkedListNode, Vec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig). public class CompoundMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object CompoundMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class CompoundMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ICompoundMotionDef into acts by delegating ItemsKey to ResolveItems(JsonArray, LazyLinkedListNode, Vec3d, IRapidFeedrateConfig, NcDiagnosticProgress, IMachineAxisConfig). public class CompoundMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object CompoundMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.CoolantSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CoolantSemantic.html", "title": "Class CoolantSemantic | HiAPI-C# 2025", - "summary": "Class CoolantSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves the ICoolantDef JSON section (written by CoolantSyntax from M07/M08/M09) into an ActCooling act. Only emits when the coolant mode changes from the previous block — modal state is suppressed so downstream consumers (e.g. StateActRunner) see one act per real transition rather than one per block. public class CoolantSemantic : INcSemantic, IMakeXmlSource Inheritance object CoolantSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class CoolantSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves the ICoolantDef JSON section (written by CoolantSyntax from M07/M08/M09) into an ActCooling act. Only emits when the coolant mode changes from the previous block — modal state is suppressed so downstream consumers (e.g. StateActRunner) see one act per real transition rather than one per block. public class CoolantSemantic : INcSemantic, IMakeXmlSource Inheritance object CoolantSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CsScriptBeginSemantic.html", "title": "Class CsScriptBeginSemantic | HiAPI-C# 2025", - "summary": "Class CsScriptBeginSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves BeginScript into ActLineCsScript. Must be placed at the beginning of NcSemanticList so that the script runs before motion and other acts. public class CsScriptBeginSemantic : CsScriptSemantic, INcSemantic, IMakeXmlSource Inheritance object CsScriptSemantic CsScriptBeginSemantic Implements INcSemantic IMakeXmlSource Inherited Members CsScriptSemantic.ExternalScripts CsScriptSemantic.Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public override string DisplayName { get; } Property Value string ScriptKey protected override string ScriptKey { get; } Property Value string XName public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." + "summary": "Class CsScriptBeginSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves BeginScript into ActLineCsScript. Must be placed at the beginning of NcSemanticList so that the script runs before motion and other acts. public class CsScriptBeginSemantic : CsScriptSemantic, INcSemantic, IMakeXmlSource Inheritance object CsScriptSemantic CsScriptBeginSemantic Implements INcSemantic IMakeXmlSource Inherited Members CsScriptSemantic.ExternalScripts CsScriptSemantic.Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public override string DisplayName { get; } Property Value string ScriptKey JSON property key on the CsScript section to read for this semantic (typically BeginScript or EndScript). protected override string ScriptKey { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." }, "api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CsScriptEndSemantic.html", "title": "Class CsScriptEndSemantic | HiAPI-C# 2025", - "summary": "Class CsScriptEndSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves EndScript into ActLineCsScript. Must be placed at the end of NcSemanticList so that the script runs after motion and other acts. public class CsScriptEndSemantic : CsScriptSemantic, INcSemantic, IMakeXmlSource Inheritance object CsScriptSemantic CsScriptEndSemantic Implements INcSemantic IMakeXmlSource Inherited Members CsScriptSemantic.ExternalScripts CsScriptSemantic.Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public override string DisplayName { get; } Property Value string ScriptKey protected override string ScriptKey { get; } Property Value string XName public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." + "summary": "Class CsScriptEndSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves EndScript into ActLineCsScript. Must be placed at the end of NcSemanticList so that the script runs after motion and other acts. public class CsScriptEndSemantic : CsScriptSemantic, INcSemantic, IMakeXmlSource Inheritance object CsScriptSemantic CsScriptEndSemantic Implements INcSemantic IMakeXmlSource Inherited Members CsScriptSemantic.ExternalScripts CsScriptSemantic.Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public override string DisplayName { get; } Property Value string ScriptKey JSON property key on the CsScript section to read for this semantic (typically BeginScript or EndScript). protected override string ScriptKey { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public override 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." }, "api/Hi.NcParsers.Semantics.CsScriptSemantic.html": { "href": "api/Hi.NcParsers.Semantics.CsScriptSemantic.html", "title": "Class CsScriptSemantic | HiAPI-C# 2025", - "summary": "Class CsScriptSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Base class for resolving CsScript JSON entries into ActLineCsScript. Subclasses specify which script key to read (BeginScript or EndScript). Also supports an external script dictionary via ExternalScripts. When set, each NC block's FileLineIndex is looked up in the dictionary and the matched script is emitted as an additional ActLineCsScript. This allows runtime injection of per-line scripts without modifying the NC file. public abstract class CsScriptSemantic : INcSemantic, IMakeXmlSource Inheritance object CsScriptSemantic Implements INcSemantic IMakeXmlSource Derived CsScriptBeginSemantic CsScriptEndSemantic 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public abstract string DisplayName { get; } Property Value string ExternalScripts Optional external script source keyed by FileLineIndex. Set at session start to inject per-line scripts without editing NC files. The Func is evaluated each resolve call so the dictionary can be modified at runtime. public Func> ExternalScripts { get; set; } Property Value Func> ScriptKey protected abstract string ScriptKey { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public abstract 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class CsScriptSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Base class for resolving CsScript JSON entries into ActLineCsScript. Subclasses specify which script key to read (BeginScript or EndScript). Also supports an external script dictionary via ExternalScripts. When set, each NC block's FileLineIndex is looked up in the dictionary and the matched script is emitted as an additional ActLineCsScript. This allows runtime injection of per-line scripts without modifying the NC file. public abstract class CsScriptSemantic : INcSemantic, IMakeXmlSource Inheritance object CsScriptSemantic Implements INcSemantic IMakeXmlSource Derived CsScriptBeginSemantic CsScriptEndSemantic 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public abstract string DisplayName { get; } Property Value string ExternalScripts Optional external script source keyed by FileLineIndex. Set at session start to inject per-line scripts without editing NC files. The Func is evaluated each resolve call so the dictionary can be modified at runtime. public Func> ExternalScripts { get; set; } Property Value Func> ScriptKey JSON property key on the CsScript section to read for this semantic (typically BeginScript or EndScript). protected abstract string ScriptKey { get; } Property Value string Methods MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public abstract 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.INcSemantic.html": { "href": "api/Hi.NcParsers.Semantics.INcSemantic.html", @@ -4627,32 +4652,32 @@ "api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html": { "href": "api/Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html", "title": "Class MachineCoordinateStepSemantic | HiAPI-C# 2025", - "summary": "Class MachineCoordinateStepSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Read MachineCoordinate from MachineCoordinateState in JsonObject and produce ActMcXyzStep. Requires ProgramXyzSyntax to have computed McXyz first. public class MachineCoordinateStepSemantic : INcSemantic, IMakeXmlSource Inheritance object MachineCoordinateStepSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class MachineCoordinateStepSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Read MachineCoordinate from MachineCoordinateState in JsonObject and produce ActMcXyzStep. Requires ProgramXyzSyntax to have computed McXyz first. public class MachineCoordinateStepSemantic : INcSemantic, IMakeXmlSource Inheritance object MachineCoordinateStepSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.McArcMotionSemantic.html": { "href": "api/Hi.NcParsers.Semantics.McArcMotionSemantic.html", "title": "Class McArcMotionSemantic | HiAPI-C# 2025", - "summary": "Class McArcMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves McArc motion into ActFeedrate + ActMcXyzSpiralContour. Reads arc center, plane normal, and direction from the Hi.Motion section written by CircularMotionSyntax. public class McArcMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object McArcMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class McArcMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves McArc motion into ActFeedrate + ActMcXyzSpiralContour. Reads arc center, plane normal, and direction from the Hi.Motion section written by CircularMotionSyntax. public class McArcMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object McArcMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html": { "href": "api/Hi.NcParsers.Semantics.McLinearMotionSemantic.html", "title": "Class McLinearMotionSemantic | HiAPI-C# 2025", - "summary": "Class McLinearMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves McLinear motion into ActFeedrate/ActRapid + ActMcXyzLinearContour or ActMcXyzabcLinearContour. Discriminates by checking whether rotary axis values (A/B/C) are present in MachineCoordinateState: XYZ only → ActMcXyzLinearContour XYZABC → ActMcXyzabcLinearContour with Fanuc composite feedrate: d = √(ΔX² + ΔY² + ΔZ² + ΔA_deg² + ΔB_deg² + ΔC_deg²) public class McLinearMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object McLinearMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class McLinearMotionSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves McLinear motion into ActFeedrate/ActRapid + ActMcXyzLinearContour or ActMcXyzabcLinearContour. Discriminates by checking whether rotary axis values (A/B/C) are present in MachineCoordinateState: XYZ only → ActMcXyzLinearContour XYZABC → ActMcXyzabcLinearContour with Fanuc composite feedrate: d = √(ΔX² + ΔY² + ΔZ² + ΔA_deg² + ΔB_deg² + ΔC_deg²) public class McLinearMotionSemantic : INcSemantic, IMakeXmlSource Inheritance object McLinearMotionSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html": { "href": "api/Hi.NcParsers.Semantics.SpindleSpeedSemantic.html", "title": "Class SpindleSpeedSemantic | HiAPI-C# 2025", - "summary": "Class SpindleSpeedSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ISpindleSpeedDef section into ActSpindleSpeed and ActSpindleDirection. Only emits when spindle speed or direction actually changes from the previous block. public class SpindleSpeedSemantic : INcSemantic, IMakeXmlSource Inheritance object SpindleSpeedSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class SpindleSpeedSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves ISpindleSpeedDef section into ActSpindleSpeed and ActSpindleDirection. Only emits when spindle speed or direction actually changes from the previous block. public class SpindleSpeedSemantic : INcSemantic, IMakeXmlSource Inheritance object SpindleSpeedSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html": { "href": "api/Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html", "title": "Class StrokeLimitCheckSemantic | HiAPI-C# 2025", - "summary": "Class StrokeLimitCheckSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Reports a diagnostic error when MachineCoordinateState exceeds the stroke limits defined in IStrokeLimitConfig. Does not emit any IAct; only produces diagnostics. public class StrokeLimitCheckSemantic : INcSemantic, IMakeXmlSource Inheritance object StrokeLimitCheckSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class StrokeLimitCheckSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Reports a diagnostic error when MachineCoordinateState exceeds the stroke limits defined in IStrokeLimitConfig. Does not emit any IAct; only produces diagnostics. public class StrokeLimitCheckSemantic : INcSemantic, IMakeXmlSource Inheritance object StrokeLimitCheckSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.ToolChangeSemantic.html": { "href": "api/Hi.NcParsers.Semantics.ToolChangeSemantic.html", "title": "Class ToolChangeSemantic | HiAPI-C# 2025", - "summary": "Class ToolChangeSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves SectionName section into ActToolingStep (when M06 is present) or ActToolingTeleport (T-code only, no M06). Reads ToolingTime for the change duration. public class ToolChangeSemantic : INcSemantic, IMakeXmlSource Inheritance object ToolChangeSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" + "summary": "Class ToolChangeSemantic Namespace Hi.NcParsers.Semantics Assembly HiMech.dll Resolves SectionName section into ActToolingStep (when M06 is present) or ActToolingTeleport (T-code only, no M06). Reads ToolingTime for the change duration. public class ToolChangeSemantic : INcSemantic, IMakeXmlSource Inheritance object ToolChangeSemantic Implements INcSemantic IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties DisplayName The process name shown on UI. public string DisplayName { get; } Property Value string XName XML element name used to register and serialize this semantic. public static string XName { get; } Property Value string Methods 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. Resolve(LazyLinkedListNode, List, NcDiagnosticProgress) Resolve the syntaxPieceNode into a sequence of IAct. May also mutate SyntaxPiece.JsonObject for downstream semantics. public IEnumerable Resolve(LazyLinkedListNode syntaxPieceNode, List dependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode dependencyList List ncDiagnosticProgress NcDiagnosticProgress Returns IEnumerable" }, "api/Hi.NcParsers.Semantics.html": { "href": "api/Hi.NcParsers.Semantics.html", @@ -4662,12 +4687,12 @@ "api/Hi.NcParsers.Sentence.html": { "href": "api/Hi.NcParsers.Sentence.html", "title": "Class Sentence | HiAPI-C# 2025", - "summary": "Class Sentence Namespace Hi.NcParsers Assembly HiMech.dll A small NC block for one or several lines. public class Sentence : IGetSentence Inheritance object Sentence Implements IGetSentence 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors Sentence(IndexedFileLine) Creates a Sentence from a single IndexedFileLine. public Sentence(IndexedFileLine indexedFileLine) Parameters indexedFileLine IndexedFileLine Sentence(List) Creates a Sentence from multiple IndexedFileLines. [Obsolete(\"Use the (blockText, charSegment, filePath) constructor.\")] public Sentence(List indexedFileLineList) Parameters indexedFileLineList List Sentence(string, FileLineCharIndexSegment, string) Initializes a new instance of the Sentence class. public Sentence(string blockText, FileLineCharIndexSegment charIndexSegment, string filePath = null) Parameters blockText string The source text of this block. charIndexSegment FileLineCharIndexSegment The character-level segment [Begin, End). filePath string The file path of the source file. Properties BlockText The source text of this block. May contain line breaks for multi-line blocks. public string BlockText { get; } Property Value string CharIndexSegment Character-level segment within the source file(s). [Begin, End). public FileLineCharIndexSegment CharIndexSegment { get; set; } Property Value FileLineCharIndexSegment FilePath File path of the source file. public string FilePath { get; set; } Property Value string FirstIndexedFileLine Derives a IndexedFileLine from CharIndexSegment, FilePath, and BlockText. public IndexedFileLine FirstIndexedFileLine { get; } Property Value IndexedFileLine Methods GetSentence() public Sentence GetSentence() Returns Sentence" + "summary": "Class Sentence Namespace Hi.NcParsers Assembly HiMech.dll A small NC block for one or several lines. public class Sentence : IGetSentence Inheritance object Sentence Implements IGetSentence 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors Sentence(IndexedFileLine) Creates a Sentence from a single IndexedFileLine. public Sentence(IndexedFileLine indexedFileLine) Parameters indexedFileLine IndexedFileLine Sentence(List) Creates a Sentence from multiple IndexedFileLines. [Obsolete(\"Use the (blockText, charSegment, filePath) constructor.\")] public Sentence(List indexedFileLineList) Parameters indexedFileLineList List Sentence(string, FileLineCharIndexSegment, string) Initializes a new instance of the Sentence class. public Sentence(string blockText, FileLineCharIndexSegment charIndexSegment, string filePath = null) Parameters blockText string The source text of this block. charIndexSegment FileLineCharIndexSegment The character-level segment [Begin, End). filePath string The file path of the source file. Properties BlockText The source text of this block. May contain line breaks for multi-line blocks. public string BlockText { get; } Property Value string CharIndexSegment Character-level segment within the source file(s). [Begin, End). public FileLineCharIndexSegment CharIndexSegment { get; set; } Property Value FileLineCharIndexSegment FilePath File path of the source file. public string FilePath { get; set; } Property Value string FirstIndexedFileLine Derives a IndexedFileLine from CharIndexSegment, FilePath, and BlockText. public IndexedFileLine FirstIndexedFileLine { get; } Property Value IndexedFileLine Methods GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence" }, "api/Hi.NcParsers.SoftNcRunner.html": { "href": "api/Hi.NcParsers.SoftNcRunner.html", "title": "Class SoftNcRunner | HiAPI-C# 2025", - "summary": "Class SoftNcRunner Namespace Hi.NcParsers Assembly HiMech.dll Configurable NC Runner. public class SoftNcRunner : IControlRunner, IMakeXmlSource Inheritance object SoftNcRunner Implements IControlRunner IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SoftNcRunner() public SoftNcRunner() SoftNcRunner(XElement, string, string, IProgress, object[]) public SoftNcRunner(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res = null) Parameters src XElement baseDirectory string relFile string progress IProgress res object[] Properties FanucNcRunner public static SoftNcRunner FanucNcRunner { get; } Property Value SoftNcRunner HeidenhainNcRunner public static SoftNcRunner HeidenhainNcRunner { get; } Property Value SoftNcRunner MazakNcRunner public static SoftNcRunner MazakNcRunner { get; } Property Value SoftNcRunner NcDependencyList public List NcDependencyList { get; set; } Property Value List NcInitializationList public List NcInitializationList { get; set; } Property Value List NcSemanticList public List NcSemanticList { get; set; } Property Value List NcSyntaxList public List NcSyntaxList { get; set; } Property Value List Segmenter public ISegmenter Segmenter { get; set; } Property Value ISegmenter SiemensNcRunner public static SoftNcRunner SiemensNcRunner { get; } Property Value SoftNcRunner SyntecNcRunner public static SoftNcRunner SyntecNcRunner { get; } Property Value SoftNcRunner XName public static string XName { get; } Property Value string Methods ConfigureByMachiningChain(IMachiningChain) Configures this SoftNcRunner to match the kinematic chain of a machine tool. Registers every axis present on the chain into the IMachineAxisConfig in NcDependencyList (linear or rotary, derived from whether the chain's transformer implements IDynamicRotation). When the chain carries any rotary axis, a NcKinematicsDependency is appended so that downstream syntaxes / semantics (e.g. G53.1, G68.2, McLinearMotionSemantic) can resolve orientation; its KinematicsProvider is intentionally left null — the owning project service wires it up after the solver instance is available (see LocalProjectService.BuildCoordinateConverter). public void ConfigureByMachiningChain(IMachiningChain chain) Parameters chain IMachiningChain The machining chain whose axes and kinematics the runner should match. No-op when null. EnumerateSnapshotSyntaxs() Enumerates every SnapshotSyntax reachable from NcSyntaxList, including those nested inside any top-level BundleSyntax's inner list. Yields in pipeline-execution order: each top-level slot in turn, and within a bundle slot the bundle's SyntaxList order. public IEnumerable EnumerateSnapshotSyntaxs() Returns IEnumerable FromLegacyNcEnvXml(XElement, IMachiningChain) Creates a SoftNcRunner from legacy HardNcEnv XML. Picks the brand-specific runner by the CncBrand element and populates dependencies from the legacy XML values. When a chain is provided, also calls ConfigureByMachiningChain(IMachiningChain) so the runner's axis configuration and kinematics dependency reflect the machine tool loaded alongside the legacy project. Remove this region when HardNcEnv is fully replaced. public static SoftNcRunner FromLegacyNcEnvXml(XElement ncEnvXml, IMachiningChain chain = null) Parameters ncEnvXml XElement The inner XML element of the legacy HardNcEnv. chain IMachiningChain Optional machining chain for axis/kinematics configuration. Returns SoftNcRunner A configured SoftNcRunner. GetSourcedActEntrysFromNode(LazyLinkedListNode, NcDiagnosticProgress, CancellationToken) public IEnumerable GetSourcedActEntrysFromNode(LazyLinkedListNode startNode, NcDiagnosticProgress ncDiagnosticProgress, CancellationToken cancellationToken) Parameters startNode LazyLinkedListNode ncDiagnosticProgress NcDiagnosticProgress cancellationToken CancellationToken Returns IEnumerable 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. RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) Runs raw Control lines and yields source sentence and Act pairs. public IEnumerable RunControlLines(string relFilePath, IEnumerable lines, MachiningSession machiningSession, SessionProgress sessionProgress, CancellationToken cancellationToken) Parameters relFilePath string The relative path of the control file lines IEnumerable The enumerable collection of command (control code) lines machiningSession MachiningSession Session-scoped state shared across multiple RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls (e.g. lazy-initialized pipeline state, file-index counter). sessionProgress SessionProgress cancellationToken CancellationToken Cancellation token to cancel the operation Returns IEnumerable Enumerable of source sentence and Act pairs SetAllSnapshotSyntaxEnabled(bool) Sets IsEnabled on every SnapshotSyntax reachable from NcSyntaxList (including those nested inside top-level BundleSyntax) to isEnabled. Callers that need finer control (per-section toggling, instance inspection) should iterate EnumerateSnapshotSyntaxs() directly. public void SetAllSnapshotSyntaxEnabled(bool isEnabled) Parameters isEnabled bool" + "summary": "Class SoftNcRunner Namespace Hi.NcParsers Assembly HiMech.dll Configurable NC Runner. public class SoftNcRunner : IControlRunner, IMakeXmlSource Inheritance object SoftNcRunner Implements IControlRunner IMakeXmlSource 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors SoftNcRunner() Creates an empty runner; populate the pipeline lists before use. public SoftNcRunner() SoftNcRunner(XElement, string, string, IProgress, object[]) Reconstructs a SoftNcRunner from a project XML element. Each pipeline list (NcDependencyList, Segmenter, NcInitializationList, NcSyntaxList, NcSemanticList) is rehydrated via XFactory. public SoftNcRunner(XElement src, string baseDirectory, string relFile, IProgress progress, object[] res = null) Parameters src XElement XML element previously produced by MakeXmlSource(string, string, bool). baseDirectory string Project base directory for resolving relative paths. relFile string Project file path relative to baseDirectory. progress IProgress Diagnostic sink propagated to nested factories. res object[] Optional ambient resources (e.g. ProjectApiVersion for legacy patches). Properties FanucNcRunner Brand preset for Fanuc — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner FanucNcRunner { get; } Property Value SoftNcRunner HeidenhainNcRunner Brand preset for Heidenhain — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner HeidenhainNcRunner { get; } Property Value SoftNcRunner MazakNcRunner Brand preset for Mazak — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner MazakNcRunner { get; } Property Value SoftNcRunner NcDependencyList External configuration providers consumed by syntaxes/semantics (machine axes, tool offsets, coordinate tables, block-skip flags, etc.). public List NcDependencyList { get; set; } Property Value List NcInitializationList Seeds the initial SyntaxPiece JSON state (e.g. home position, defaults). public List NcInitializationList { get; set; } Property Value List NcSemanticList Final-stage semantics that turn the last syntax layer into SourcedActEntry records consumed by the runtime. public List NcSemanticList { get; set; } Property Value List NcSyntaxList Ordered syntax pipeline. Each entry consumes the previous layer's SyntaxPiece stream and emits the next layer. public List NcSyntaxList { get; set; } Property Value List Segmenter Splits raw NC text into Sentence blocks. public ISegmenter Segmenter { get; set; } Property Value ISegmenter SiemensNcRunner Brand preset for Siemens — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner SiemensNcRunner { get; } Property Value SoftNcRunner SyntecNcRunner Brand preset for Syntec — composes a SoftNcRunner whose NcSyntaxList comes from DefaultSyntaxList. public static SoftNcRunner SyntecNcRunner { get; } Property Value SoftNcRunner XName XML element name for Regs registration. public static string XName { get; } Property Value string Methods ConfigureByMachiningChain(IMachiningChain) Configures this SoftNcRunner to match the kinematic chain of a machine tool. Registers every axis present on the chain into the IMachineAxisConfig in NcDependencyList (linear or rotary, derived from whether the chain's transformer implements IDynamicRotation). When the chain carries any rotary axis, a NcKinematicsDependency is appended so that downstream syntaxes / semantics (e.g. G53.1, G68.2, McLinearMotionSemantic) can resolve orientation; its KinematicsProvider is intentionally left null — the owning project service wires it up after the solver instance is available (see LocalProjectService.BuildCoordinateConverter). public void ConfigureByMachiningChain(IMachiningChain chain) Parameters chain IMachiningChain The machining chain whose axes and kinematics the runner should match. No-op when null. EnumerateSnapshotSyntaxs() Enumerates every SnapshotSyntax reachable from NcSyntaxList, including those nested inside any top-level BundleSyntax's inner list. Yields in pipeline-execution order: each top-level slot in turn, and within a bundle slot the bundle's SyntaxList order. public IEnumerable EnumerateSnapshotSyntaxs() Returns IEnumerable FromLegacyNcEnvXml(XElement, IMachiningChain) Creates a SoftNcRunner from legacy HardNcEnv XML. Picks the brand-specific runner by the CncBrand element and populates dependencies from the legacy XML values. When a chain is provided, also calls ConfigureByMachiningChain(IMachiningChain) so the runner's axis configuration and kinematics dependency reflect the machine tool loaded alongside the legacy project. Remove this region when HardNcEnv is fully replaced. public static SoftNcRunner FromLegacyNcEnvXml(XElement ncEnvXml, IMachiningChain chain = null) Parameters ncEnvXml XElement The inner XML element of the legacy HardNcEnv. chain IMachiningChain Optional machining chain for axis/kinematics configuration. Returns SoftNcRunner A configured SoftNcRunner. GetSourcedActEntrysFromNode(LazyLinkedListNode, NcDiagnosticProgress, CancellationToken) Drives the NcSemanticList over the post-syntax SyntaxPiece stream starting at startNode, yielding a SourcedActEntry for each emitted IAct (or a single null-act entry when a semantic produces no acts but still updates the source SyntaxPiece). public IEnumerable GetSourcedActEntrysFromNode(LazyLinkedListNode startNode, NcDiagnosticProgress ncDiagnosticProgress, CancellationToken cancellationToken) Parameters startNode LazyLinkedListNode First node to evaluate; iteration walks Next. ncDiagnosticProgress NcDiagnosticProgress Sink for semantic exceptions. cancellationToken CancellationToken Cancellation token (checked between blocks). Returns IEnumerable 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. RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) Runs raw Control lines and yields source sentence and Act pairs. public IEnumerable RunControlLines(string relFilePath, IEnumerable lines, MachiningSession machiningSession, SessionProgress sessionProgress, CancellationToken cancellationToken) Parameters relFilePath string The relative path of the control file lines IEnumerable The enumerable collection of command (control code) lines machiningSession MachiningSession Session-scoped state shared across multiple RunControlLines(string, IEnumerable, MachiningSession, SessionProgress, CancellationToken) calls (e.g. lazy-initialized pipeline state, file-index counter). sessionProgress SessionProgress cancellationToken CancellationToken Cancellation token to cancel the operation Returns IEnumerable Enumerable of source sentence and Act pairs SetAllSnapshotSyntaxEnabled(bool) Sets IsEnabled on every SnapshotSyntax reachable from NcSyntaxList (including those nested inside top-level BundleSyntax) to isEnabled. Callers that need finer control (per-section toggling, instance inspection) should iterate EnumerateSnapshotSyntaxs() directly. public void SetAllSnapshotSyntaxEnabled(bool isEnabled) Parameters isEnabled bool" }, "api/Hi.NcParsers.SoftNcUtil.html": { "href": "api/Hi.NcParsers.SoftNcUtil.html", @@ -4682,12 +4707,12 @@ "api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html": { "href": "api/Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html", "title": "Class FanucSyntaxUtil | HiAPI-C# 2025", - "summary": "Class FanucSyntaxUtil Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Pre-built ParameterizedFlagSyntax / flag patterns for Fanuc-style NC text. public static class FanucSyntaxUtil Inheritance object FanucSyntaxUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields VarTag Variable token prefix for Fanuc macro addresses (#). public const string VarTag = \"#\" Field Value string Properties DefaultSyntaxList Syntax list for general kind of Fanuc Controller. public static List DefaultSyntaxList { get; } Property Value List G05p1Syntax G05.1 High-precision contour control (Fanuc AICC / Nano Smoothing). Q1 enables, Q0 disables. public static ParameterizedFlagSyntax G05p1Syntax { get; } Property Value ParameterizedFlagSyntax G43p4Syntax G43.4: Fanuc TCPM (Tool Center Point Management / RTCP). Fanuc-specific — not in GenericSyntaxKit. Siemens equivalent: TRAORI. Heidenhain equivalent: M128. public static ParameterizedFlagSyntax G43p4Syntax { get; } Property Value ParameterizedFlagSyntax G54p1Syntax G54.1 P… additional work offset family syntax. public static ParameterizedFlagSyntax G54p1Syntax { get; } Property Value ParameterizedFlagSyntax G65Syntax G65: Fanuc one-shot custom macro call. G65 P{program} [L{repeat}] [{arg_letter}{value} ...] public static ParameterizedFlagSyntax G65Syntax { get; } Property Value ParameterizedFlagSyntax Remarks Macro argument letters: A-E, F, H-K, M, Q-Z map to local variables #1-#26. G, L, N, O, P are reserved (G-code prefix, repeat count, line number, program number, program to call). G66Syntax G66: Fanuc modal custom macro call. G66 P{program} [L{repeat}] [{arg_letter}{value} ...] public static ParameterizedFlagSyntax G66Syntax { get; } Property Value ParameterizedFlagSyntax Remarks Same argument letters as G65. Modal: executes at every positioning block until cancelled by G67. M98Syntax M98: Fanuc subprogram call. M98 P{program} [L{repeat}] public static ParameterizedFlagSyntax M98Syntax { get; } Property Value ParameterizedFlagSyntax M99Syntax M99: Fanuc subprogram end / return. M99 [P{sequence}] public static ParameterizedFlagSyntax M99Syntax { get; } Property Value ParameterizedFlagSyntax" + "summary": "Class FanucSyntaxUtil Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Pre-built ParameterizedFlagSyntax / flag patterns for Fanuc-style NC text. public static class FanucSyntaxUtil Inheritance object FanucSyntaxUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields VarTag Variable token prefix for Fanuc macro addresses (#). public const string VarTag = \"#\" Field Value string Properties DefaultSyntaxList Syntax list for general kind of Fanuc Controller. public static List DefaultSyntaxList { get; } Property Value List G05p1Syntax G05.1 High-precision contour control (Fanuc AICC / Nano Smoothing). Q1 enables, Q0 disables. Optional R{n} selects the precision / smoothness level number (R1..R10) — captured here so the parameter does not leak into the standalone Parsing.R tag and so FanucPathSmoothingSyntax can record it in the PathSmoothing modal section for bidirectional NC-text reconstruction. public static ParameterizedFlagSyntax G05p1Syntax { get; } Property Value ParameterizedFlagSyntax G43p4Syntax G43.4: Fanuc TCPM (Tool Center Point Management / RTCP). Fanuc-specific — not in GenericSyntaxKit. Siemens equivalent: TRAORI. Heidenhain equivalent: M128. TerminateWords intentionally only M: H (offset id) commonly appears after move axes or other G modifiers in the same block (e.g., G43.4 Z5. H1, G43.4 G54 H1). Using G/X/Y/Z would truncate scope before H and lose the offset id. public static ParameterizedFlagSyntax G43p4Syntax { get; } Property Value ParameterizedFlagSyntax G54p1Syntax G54.1 P… additional work offset family syntax. public static ParameterizedFlagSyntax G54p1Syntax { get; } Property Value ParameterizedFlagSyntax G65Syntax G65: Fanuc one-shot custom macro call. G65 P{program} [L{repeat}] [{arg_letter}{value} ...] public static ParameterizedFlagSyntax G65Syntax { get; } Property Value ParameterizedFlagSyntax Remarks Macro argument letters: A-E, F, H-K, M, Q-Z map to local variables #1-#26. G, L, N, O, P are reserved (G-code prefix, repeat count, line number, program number, program to call). G66Syntax G66: Fanuc modal custom macro call. G66 P{program} [L{repeat}] [{arg_letter}{value} ...] public static ParameterizedFlagSyntax G66Syntax { get; } Property Value ParameterizedFlagSyntax Remarks Same argument letters as G65. Modal: executes at every positioning block until cancelled by G67. M98Syntax M98: Fanuc subprogram call. M98 P{program} [L{repeat}] public static ParameterizedFlagSyntax M98Syntax { get; } Property Value ParameterizedFlagSyntax M99Syntax M99: Fanuc subprogram end / return. M99 [P{sequence}] public static ParameterizedFlagSyntax M99Syntax { get; } Property Value ParameterizedFlagSyntax" }, "api/Hi.NcParsers.Syntaxs.GenericSyntaxKit.html": { "href": "api/Hi.NcParsers.Syntaxs.GenericSyntaxKit.html", "title": "Class GenericSyntaxKit | HiAPI-C# 2025", - "summary": "Class GenericSyntaxKit Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Generic/ISO standard syntax kit. Involve G code. Contains syntax definitions for common G codes used across multiple NC systems. public class GenericSyntaxKit Inheritance object GenericSyntaxKit 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GenericSyntaxKit(string) Creates a kit with the given variable-address prefix. public GenericSyntaxKit(string varPrefix) Parameters varPrefix string Single-character or short prefix used by parameterized syntaxes. Properties CannedCycleSyntax Canned drilling/boring/tapping cycle syntax (G73/G74/G81/G82/G83/G84/G85/G86/G89). Captures all cycle parameters (X, Y, Z, R, Q, F) into the cycle sub-section (e.g., Parsing.G83) so that cycle syntaxes can read them as a unit and store them for modal lookback. Terminates at G/M only. public ParameterizedFlagSyntax CannedCycleSyntax { get; } Property Value ParameterizedFlagSyntax G28Syntax G28 Reference point return syntax. public ParameterizedFlagSyntax G28Syntax { get; } Property Value ParameterizedFlagSyntax G41G42Syntax G41/G42 Cutter radius compensation syntax. public ParameterizedFlagSyntax G41G42Syntax { get; } Property Value ParameterizedFlagSyntax G43G44Syntax G43/G44 Tool length compensation syntax (ISO standard). G43.4 (TCPM) is Fanuc-specific — see G43p4Syntax. public ParameterizedFlagSyntax G43G44Syntax { get; } Property Value ParameterizedFlagSyntax G4Syntax G4 Dwell/Pause syntax. public ParameterizedFlagSyntax G4Syntax { get; } Property Value ParameterizedFlagSyntax G52Syntax G52 Local coordinate system syntax. public ParameterizedFlagSyntax G52Syntax { get; } Property Value ParameterizedFlagSyntax G68Syntax G68 Coordinate rotation syntax. X/Y/Z (center), I/J/K (axis), R (angle) stored as doubles. public ParameterizedFlagSyntax G68Syntax { get; } Property Value ParameterizedFlagSyntax G68p2Syntax G68.2 Tilted work plane syntax. X/Y/Z (origin), I/J/K (euler angles) stored as doubles. A/B/C post-processor hints are parsed by FloatTagValueSyntax and consumed by IsoG68p2TiltSyntax from Parsing. public ParameterizedFlagSyntax G68p2Syntax { get; } Property Value ParameterizedFlagSyntax ParameterizedFlagSyntaxList Common ISO-style G-code parameterized syntaxes using VarPrefix. public List ParameterizedFlagSyntaxList { get; } Property Value List VarPrefix Variable index prefix for this kit (e.g. Fanuc #, Heidenhain Q). public string VarPrefix { get; set; } Property Value string" + "summary": "Class GenericSyntaxKit Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Generic/ISO standard syntax kit. Involve G code. Contains syntax definitions for common G codes used across multiple NC systems. public class GenericSyntaxKit Inheritance object GenericSyntaxKit 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) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors GenericSyntaxKit(string) Creates a kit with the given variable-address prefix. public GenericSyntaxKit(string varPrefix) Parameters varPrefix string Single-character or short prefix used by parameterized syntaxes. Properties CannedCycleSyntax Canned drilling/boring/tapping cycle syntax (G73/G74/G81/G82/G83/G84/G85/G86/G89). Captures all cycle parameters (X, Y, Z, R, Q, F) into the cycle sub-section (e.g., Parsing.G83) so that cycle syntaxes can read them as a unit and store them for modal lookback. Terminates at G/M only. public ParameterizedFlagSyntax CannedCycleSyntax { get; } Property Value ParameterizedFlagSyntax G28Syntax G28 Reference point return syntax. public ParameterizedFlagSyntax G28Syntax { get; } Property Value ParameterizedFlagSyntax G41G42Syntax G41/G42 Cutter radius compensation syntax. TerminateWords intentionally only M: D (offset id) commonly appears after move axes or other G modifiers in the same block (e.g., G41 X10. D1, G54 G41 D1). Using G/X/Y/Z would truncate scope before D and lose the offset id. public ParameterizedFlagSyntax G41G42Syntax { get; } Property Value ParameterizedFlagSyntax G43G44Syntax G43/G44 Tool length compensation syntax (ISO standard). G43.4 (TCPM) is Fanuc-specific — see G43p4Syntax. TerminateWords intentionally only M: H (offset id) commonly appears after move axes or other G modifiers in the same block (e.g., G43Z5.H01, G43 G54 H1). Using G/X/Y/Z would truncate scope before H and lose the offset id. public ParameterizedFlagSyntax G43G44Syntax { get; } Property Value ParameterizedFlagSyntax G4Syntax G4 Dwell/Pause syntax. public ParameterizedFlagSyntax G4Syntax { get; } Property Value ParameterizedFlagSyntax G52Syntax G52 Local coordinate system syntax. public ParameterizedFlagSyntax G52Syntax { get; } Property Value ParameterizedFlagSyntax G68Syntax G68 Coordinate rotation syntax. X/Y/Z (center), I/J/K (axis), R (angle) stored as doubles. public ParameterizedFlagSyntax G68Syntax { get; } Property Value ParameterizedFlagSyntax G68p2Syntax G68.2 Tilted work plane syntax. X/Y/Z (origin), I/J/K (euler angles) stored as doubles. A/B/C post-processor hints are parsed by FloatTagValueSyntax and consumed by IsoG68p2TiltSyntax from Parsing. public ParameterizedFlagSyntax G68p2Syntax { get; } Property Value ParameterizedFlagSyntax ParameterizedFlagSyntaxList Common ISO-style G-code parameterized syntaxes using VarPrefix. public List ParameterizedFlagSyntaxList { get; } Property Value List VarPrefix Variable index prefix for this kit (e.g. Fanuc #, Heidenhain Q). public string VarPrefix { get; set; } Property Value string" }, "api/Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html": { "href": "api/Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html", @@ -4727,7 +4752,7 @@ "api/Hi.NcParsers.Syntaxs.SyntaxPiece.html": { "href": "api/Hi.NcParsers.Syntaxs.SyntaxPiece.html", "title": "Class SyntaxPiece | HiAPI-C# 2025", - "summary": "Class SyntaxPiece Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll One NC block's source line paired with its parsed JSON payload during soft-NC processing. public class SyntaxPiece : IGetSentence Inheritance object SyntaxPiece Implements IGetSentence 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) Remarks The design pattern of Sentence and JsonObject are one-one mapping. JSON value type convention: Prefer base types (double, int) over string for numeric values in JsonObject. This applies to both parsing syntaxes and logic syntaxes. Strings should only be used when the value is genuinely textual (e.g., macro variable references like \"#1\", \"Q2\", coordinate IDs like \"G54\") or when the value cannot be parsed to a number. Use FloatTagValueSyntax, IntegerTagValueSyntax, or FloatParamPrefixes / IntParamPrefixes to store typed values at parse time. Constructors SyntaxPiece(Sentence, JsonObject) Creates a piece binding sentence to jsonObject. public SyntaxPiece(Sentence sentence, JsonObject jsonObject) Parameters sentence Sentence jsonObject JsonObject Properties JsonObject Structured parse result built by syntax passes. public JsonObject JsonObject { get; set; } Property Value JsonObject Sentence Indexed source line and block text for this piece. public Sentence Sentence { get; set; } Property Value Sentence Methods GetSentence() public Sentence GetSentence() Returns Sentence ToString() Serialize with Hi.NcParsers.Syntaxs.NcSyntaxUtil.Options to support NaN/Infinity. public override string ToString() Returns string" + "summary": "Class SyntaxPiece Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll One NC block's source line paired with its parsed JSON payload during soft-NC processing. public class SyntaxPiece : IGetSentence Inheritance object SyntaxPiece Implements IGetSentence 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) Remarks The design pattern of Sentence and JsonObject are one-one mapping. JSON value type convention: Prefer base types (double, int) over string for numeric values in JsonObject. This applies to both parsing syntaxes and logic syntaxes. Strings should only be used when the value is genuinely textual (e.g., macro variable references like \"#1\", \"Q2\", coordinate IDs like \"G54\") or when the value cannot be parsed to a number. Use FloatTagValueSyntax, IntegerTagValueSyntax, or FloatParamPrefixes / IntParamPrefixes to store typed values at parse time. Constructors SyntaxPiece(Sentence, JsonObject) Creates a piece binding sentence to jsonObject. public SyntaxPiece(Sentence sentence, JsonObject jsonObject) Parameters sentence Sentence jsonObject JsonObject Properties JsonObject Structured parse result built by syntax passes. public JsonObject JsonObject { get; set; } Property Value JsonObject Sentence Indexed source line and block text for this piece. public Sentence Sentence { get; set; } Property Value Sentence Methods GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence ToString() Serialize with Hi.NcParsers.Syntaxs.NcSyntaxUtil.Options to support NaN/Infinity. public override string ToString() Returns string" }, "api/Hi.NcParsers.Syntaxs.SyntaxStageKeys.html": { "href": "api/Hi.NcParsers.Syntaxs.SyntaxStageKeys.html", @@ -4757,7 +4782,7 @@ "api/Hi.NcParsers.html": { "href": "api/Hi.NcParsers.html", "title": "Namespace Hi.NcParsers | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers Classes NcDiagnostic A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. NcDiagnosticProgress Sentence A small NC block for one or several lines. SoftNcRunner Configurable NC Runner. SoftNcUtil JSON helpers for soft-NC blocks: vectors under Parsing, motion-term queries, flag grab/remove on raw text, and unparsed-line trimming. Interfaces IGetSentence Abstraction for a source that carries a Sentence. Enums NcDiagnosticCategory Diagnostic category of an NC diagnostic. System + Error → exception/bug, unconsidered case Unsupported + Warning → known unsupported, likely harmless Unsupported + Error → known unsupported, likely matters Validation + Warning → manufacturing/physics may be unfeasible Validation + Error → manufacturing/physics is unfeasible Configuration + Message → dependency/config applied, informational event (e.g. a block skipped by an enabled IBlockSkipConfig layer) Configuration + Warning → dependency/config missing, using fallback Configuration + Error → dependency/config missing, cannot proceed NcDiagnosticSeverity Importance level of an NC diagnostic. Combined with NcDiagnosticCategory to form the full diagnostic meaning (e.g., Unsupported + Warning)." + "summary": "Namespace Hi.NcParsers Classes NcDiagnostic A structured diagnostic from the SoftNcRunner pipeline, designed for IProgress consumption. Id is composed as {Primary}-{Secondary}--{Abbrev} (e.g., Cycle-Peck--BadPeckQ, Syntax-Build--Exception). For irregular cases that don't fit the pattern, use a custom string. NcDiagnosticProgress Helper that emits NcDiagnostic records via an IProgress sink. Provides one method per (NcDiagnosticCategory, NcDiagnosticSeverity) pair, each with an optional Sentence overload locating the issue in the NC source. Sentence A small NC block for one or several lines. SoftNcRunner Configurable NC Runner. SoftNcUtil JSON helpers for soft-NC blocks: vectors under Parsing, motion-term queries, flag grab/remove on raw text, and unparsed-line trimming. Interfaces IGetSentence Abstraction for a source that carries a Sentence. Enums NcDiagnosticCategory Diagnostic category of an NC diagnostic. System + Error → exception/bug, unconsidered case Unsupported + Warning → known unsupported, likely harmless Unsupported + Error → known unsupported, likely matters Validation + Warning → manufacturing/physics may be unfeasible Validation + Error → manufacturing/physics is unfeasible Configuration + Message → dependency/config applied, informational event (e.g. a block skipped by an enabled IBlockSkipConfig layer) Configuration + Warning → dependency/config missing, using fallback Configuration + Error → dependency/config missing, cannot proceed NcDiagnosticSeverity Importance level of an NC diagnostic. Combined with NcDiagnosticCategory to form the full diagnostic meaning (e.g., Unsupported + Warning)." }, "api/Hi.Numerical.Acts.ActActualTime.html": { "href": "api/Hi.Numerical.Acts.ActActualTime.html", @@ -5042,7 +5067,7 @@ "api/Hi.Numerical.HardNcLine.html": { "href": "api/Hi.Numerical.HardNcLine.html", "title": "Class HardNcLine | HiAPI-C# 2025", - "summary": "Class HardNcLine Namespace Hi.Numerical Assembly HiUniNc.dll Represents a line in the NC program with its associated data and operations. public class HardNcLine : IIndexedFileLine, IFileLine, IFileLineIndex, IGetIndexedFileLine, IGetFileLineIndex, IFlagText, IGetSentence Inheritance object HardNcLine Implements IIndexedFileLine IFileLine IFileLineIndex IGetIndexedFileLine IGetFileLineIndex IFlagText IGetSentence 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) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag, bool) HardNcUtil.IsFlagKeeping(HardNcLine, HardNcLine, NcFlag, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, out NcNoteCache, IProgress) Ctor from the reference HardNcLine. public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, out NcNoteCache ncNoteCache, IProgress progress) Parameters ncEnv HardNcEnv NC environment fileLine IndexedFileLine file line preNcLine HardNcLine reference HardNcLine that this HardNcLine copy from. If previous HardNcLine is not null, apply previous HardNcLine. ncNoteCache NcNoteCache Output NC note cache progress IProgress Message host for warnings HardNcLine(HardNcEnv, IProgress) Ctor for initial state. public HardNcLine(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv messageHost IProgress Properties ArcNcArg NC arguments for arc commands. public ArcNcArg ArcNcArg { get; set; } Property Value ArcNcArg CoordinateInterpolationMode Gets the current coordinate interpolation mode (Cartesian or Polar). public CoordinateInterpolationMode CoordinateInterpolationMode { get; } Property Value CoordinateInterpolationMode F F. Feedrate on NC code. Note that this may not be the working feedrate. Some NC codes like G00 and G28 doesnt use F code. public double F { get; set; } Property Value double Remarks According to Fanuc manual, the default F is zero. Feedrate_mmdmin Feedrate on NC code in current mode in mm/min. See F. public double Feedrate_mmdmin { get; set; } Property Value double Feedrate_mmds Feedrate on NC code in current mode in mm/sec. public double Feedrate_mmds { get; set; } Property Value double FileIndex File Index. Start on 0. public int FileIndex { get; } Property Value int FileNo Gets the file number. [Present(\"File Number\", \"FileNo\", PhysicsUnit.None, \"G\")] public int FileNo { get; } Property Value int FilePath File path. [Present(\"File\", \"File\", PhysicsUnit.None, \"G\")] public string FilePath { get; } Property Value string FlagsText Gets a string representation of the active NC flags for this line. public string FlagsText { get; } Property Value string G28Arg Arguments for G28 commands. public G28Arg G28Arg { get; set; } Property Value G28Arg G52_Xyz Local coordinate system translation. public Vec3d G52_Xyz { get; set; } Property Value Vec3d G54SeriesCoordinateNum1000 Faunc Group14 value. Note that Heidenhain Datum shift is set by DatumTableId. public int G54SeriesCoordinateNum1000 { get; set; } Property Value int Group07NcArg Arguments for Group07 NC commands (tool radius compensation). public Group07NcArg Group07NcArg { get; set; } Property Value Group07NcArg Group07_D Radius compensation ID. Note that in Siemens controller, each tool ID has several D entry. public int Group07_D { get; set; } Property Value int Group08_H Height compensation ID. For Siemens Traori, the value is Tool ID. For Heidenhain, the value is Tool ID. public int Group08_H { get; set; } Property Value int Group09NcArg NC Argument of NC Group09. public Group09NcArg Group09NcArg { get; set; } Property Value Group09NcArg HeidenhainBlockCacheArg Heidenhain block cache arguments for various Heidenhain commands. public IHeidenhainBlockCacheArg HeidenhainBlockCacheArg { get; set; } Property Value IHeidenhainBlockCacheArg HeidenhainCycleDef247Q339 DATUM SETTING DATUM Number. public int HeidenhainCycleDef247Q339 { get; set; } Property Value int HeidenhainCycleDef7Arg Arguments for Heidenhain Cycle Definition 7 (datum shift). public HeidenhainCycleDef7Arg HeidenhainCycleDef7Arg { get; set; } Property Value HeidenhainCycleDef7Arg HeidenhainM140MB HeidenhainM140(Retract the tool) MB value. MB is the retraction height. double.positiveInf is [MB MAX]. One shot command. public double HeidenhainM140MB { get; set; } Property Value double HeidenhainQMacroMap Dictionary mapping Q macro numbers to their string values for Heidenhain controllers. public Dictionary HeidenhainQMacroMap { get; set; } Property Value Dictionary HeidenhainToolAxisDir Direction of the tool axis for Heidenhain controllers. public int HeidenhainToolAxisDir { get; set; } Property Value int IndexedFileLine The file line information associated with this NC line. public IndexedFileLine IndexedFileLine { get; } Property Value IndexedFileLine IsAbsolutePositioning Gets a value indicating whether absolute positioning (G90) is active. public bool IsAbsolutePositioning { get; } Property Value bool IsHeightCompensationEnabled Gets a value indicating whether height compensation is enabled. public bool IsHeightCompensationEnabled { get; } Property Value bool IsOnArcCommand Gets a value indicating whether an arc command (G02 or G03) is active. public bool IsOnArcCommand { get; } Property Value bool IsPathPrepared Gets a value indicating whether the path is prepared (no radius compensation). public bool IsPathPrepared { get; } Property Value bool IsRadiusCompensationEnabled Gets a value indicating whether radius compensation is enabled. public bool IsRadiusCompensationEnabled { get; } Property Value bool IsToolCenterPointManagementEnabled Gets a value indicating whether tool center point management is enabled. public bool IsToolCenterPointManagementEnabled { get; } Property Value bool Line The line. [Present(\"Line\", \"Line\", PhysicsUnit.None, \"G\")] public string Line { get; } Property Value string LineIndex Line Index. Start on 0. public int LineIndex { get; } Property Value int LineNo Gets the line number. [Present(\"Line Number\", \"LineNo\", PhysicsUnit.None, \"G\")] public int LineNo { get; } Property Value int MachiningFeedrate_mmdmin Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/min. public double MachiningFeedrate_mmdmin { get; set; } Property Value double MachiningFeedrate_mmds Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/sec. public double MachiningFeedrate_mmds { get; set; } Property Value double McAbc_deg Gets or sets the machine ABC coordinates in degrees. public Vec3d McAbc_deg { get; set; } Property Value Vec3d McAbc_rad Machine coordinates in ABC format (radians). public Vec3d McAbc_rad { get; } Property Value Vec3d McXyz Gets or sets the machine coordinate XYZ values. public Vec3d McXyz { get; } Property Value Vec3d McXyzabc Machine coordinate ( with side radius compensation if existed). Point is XYZ. the unit is mm. Normal is ABC. the unit is radian. public DVec3d McXyzabc { get; } Property Value DVec3d NcFlagBitArray Internal Used. public BitArray NcFlagBitArray { get; } Property Value BitArray PausingNcArg public PausingNcArg PausingNcArg { get; set; } Property Value PausingNcArg Remarks Since this is base on OneShot Flag, so here has no copy ctor. PolarEntry Data structure for polar coordinates entry. public PolarEntry PolarEntry { get; set; } Property Value PolarEntry PreparationT Tool ID for preparation. public int PreparationT { get; set; } Property Value int ProgramOrthogonalPlaneNormal The orthogonal plane transform after tilting plane transform. Include G17, G18, G19 and plane of called G12p1. public Vec3d ProgramOrthogonalPlaneNormal { get; } Property Value Vec3d ProgramPos ProgramPos can be cartesian XYZ or polar XCZ with radius-based X, depends on CoordinateInterpolationMode. public Vec3d ProgramPos { get; } Property Value Vec3d ProgramXyz XYZ in Feature Coordinate. Cartesian Program Position XYZ, Abs Program Position (as G90 position). NC coordinate position is the position processed by modal flags. NC coordinate position is the position after radius compensation. The NC(Program) coordinate position is comprehensible by User. MC NC conversion may raise floating error. The floating error raise the cutting force issue, especially for bottom cutting force. Hence the NC values have to be memorized. public Vec3d ProgramXyz { get; } Property Value Vec3d Remarks NC is the better source property than MC. Ex. a NC line command: X100. The Y and Z value may vary if using MC converting back to NC. The error of Y and Z will keeps accumulating until the next explicit YZ command assignment. The error maybe up to 3e-5 in current case. the bounding box size of the case is not large (TT.20230815). Also note that if using Arc command for a complete circle, the begin NC XYZ and the end NC XYZ have to be equaled. Otherwise, it will become only a very small arc rather than the circle. So be care that do not change the NC XYZ if not needed. RadiusCompensationBuf Internal use. public RadiusCompensationBuf RadiusCompensationBuf { get; set; } Property Value RadiusCompensationBuf RapidFeedrate_mmdmin Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/min. public double RapidFeedrate_mmdmin { get; set; } Property Value double RapidFeedrate_mmds Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/sec. public double RapidFeedrate_mmds { get; set; } Property Value double S S. Spindle speed. public int S { get; set; } Property Value int SpindleSpeed_radds Spindle speed in radian/s. public double SpindleSpeed_radds { get; set; } Property Value double SpindleSpeed_rpm Spindle speed in RPM. public double SpindleSpeed_rpm { get; set; } Property Value double T Current equiped Tool ID. public int T { get; set; } Property Value int TiltPlaneNcArg Arguments related to tilted plane operations. public ITiltPlaneNcArg TiltPlaneNcArg { get; set; } Property Value ITiltPlaneNcArg Methods GetAttacherMat(HardNcEnv) Gets the attacher transformation matrix for the current machine coordinates. public Mat4d GetAttacherMat(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv The NC environment. Returns Mat4d The attacher transformation matrix. GetCompensationHeight(HardNcEnv, IProgress) Gets the tool height compensation value for this NC line. public double GetCompensationHeight(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment messageHost IProgress Message host for warnings Returns double Height compensation value GetCompensationRadius(CncBrand, MillingToolOffsetTable, IProgress) Gets the tool radius compensation value for this NC line. public double GetCompensationRadius(CncBrand cncBrand, MillingToolOffsetTable millingToolOffsetTable, IProgress messageHost) Parameters cncBrand CncBrand CNC brand millingToolOffsetTable MillingToolOffsetTable Milling tool offset table messageHost IProgress Message host for warnings Returns double Radius compensation value GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex GetG5xCoordinateOffset(HardNcEnv) Gets the G5x coordinate offset for this NC line. public Vec3d GetG5xCoordinateOffset(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns Vec3d The G5x coordinate offset vector GetIndexedFileLine() Gets the file line associated with this object. public IndexedFileLine GetIndexedFileLine() Returns IndexedFileLine The file line object. GetMcByProgramPos(Vec3d, HardNcEnv, NcNoteCache, IProgress, out Vec3d) Internal Use. public DVec3d GetMcByProgramPos(Vec3d programPos, HardNcEnv ncEnv, NcNoteCache ncNoteCache, IProgress messageHost, out Vec3d programXyz) Parameters programPos Vec3d ncEnv HardNcEnv ncNoteCache NcNoteCache messageHost IProgress programXyz Vec3d Returns DVec3d GetSentence() public Sentence GetSentence() Returns Sentence GetSourceCommand() public IIndexedFileLine GetSourceCommand() Returns IIndexedFileLine GetTiltMat4d(HardNcEnv, out Mat4d) Internal Use Only. public bool? GetTiltMat4d(HardNcEnv ncEnv, out Mat4d tableToFeatureTransform) Parameters ncEnv HardNcEnv NC environment. tableToFeatureTransform Mat4d Transform from NC to Table without tool compensation and linear coordinate offset (such as G55,G56..). Returns bool? True if G68.2 is successfully applied, false if not, and null if not applicable. HasSyntaxXyz(HardNcEnv) Determines whether the line contains syntactic XYZ coordinates. public bool HasSyntaxXyz(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns bool True if syntactic XYZ coordinates are present; otherwise, false. RebuildByMc(HardNcEnv, DVec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByMc(HardNcEnv ncEnv, DVec3d mc, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. mc DVec3d MC coordinates. ncNoteCache NcNoteCache NC line cache. messageHost IProgress Message host for logging and reporting. RebuildByProgramXyz(HardNcEnv, Vec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByProgramXyz(HardNcEnv ncEnv, Vec3d programXyz, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. programXyz Vec3d Program XYZ coordinates. ncNoteCache NcNoteCache NC note cache. messageHost IProgress Message host for logging and reporting. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." + "summary": "Class HardNcLine Namespace Hi.Numerical Assembly HiUniNc.dll Represents a line in the NC program with its associated data and operations. public class HardNcLine : IIndexedFileLine, IFileLine, IFileLineIndex, IGetIndexedFileLine, IGetFileLineIndex, IFlagText, IGetSentence Inheritance object HardNcLine Implements IIndexedFileLine IFileLine IFileLineIndex IGetIndexedFileLine IGetFileLineIndex IFlagText IGetSentence 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) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag) HardNcUtil.IsFlagChanging(HardNcLine, HardNcLine, NcFlag, bool) HardNcUtil.IsFlagKeeping(HardNcLine, HardNcLine, NcFlag, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors HardNcLine(HardNcEnv, IndexedFileLine, HardNcLine, out NcNoteCache, IProgress) Ctor from the reference HardNcLine. public HardNcLine(HardNcEnv ncEnv, IndexedFileLine fileLine, HardNcLine preNcLine, out NcNoteCache ncNoteCache, IProgress progress) Parameters ncEnv HardNcEnv NC environment fileLine IndexedFileLine file line preNcLine HardNcLine reference HardNcLine that this HardNcLine copy from. If previous HardNcLine is not null, apply previous HardNcLine. ncNoteCache NcNoteCache Output NC note cache progress IProgress Message host for warnings HardNcLine(HardNcEnv, IProgress) Ctor for initial state. public HardNcLine(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv messageHost IProgress Properties ArcNcArg NC arguments for arc commands. public ArcNcArg ArcNcArg { get; set; } Property Value ArcNcArg CoordinateInterpolationMode Gets the current coordinate interpolation mode (Cartesian or Polar). public CoordinateInterpolationMode CoordinateInterpolationMode { get; } Property Value CoordinateInterpolationMode F F. Feedrate on NC code. Note that this may not be the working feedrate. Some NC codes like G00 and G28 doesnt use F code. public double F { get; set; } Property Value double Remarks According to Fanuc manual, the default F is zero. Feedrate_mmdmin Feedrate on NC code in current mode in mm/min. See F. public double Feedrate_mmdmin { get; set; } Property Value double Feedrate_mmds Feedrate on NC code in current mode in mm/sec. public double Feedrate_mmds { get; set; } Property Value double FileIndex File Index. Start on 0. public int FileIndex { get; } Property Value int FileNo Gets the file number. [Present(\"File Number\", \"FileNo\", PhysicsUnit.None, \"G\")] public int FileNo { get; } Property Value int FilePath File path. [Present(\"File\", \"File\", PhysicsUnit.None, \"G\")] public string FilePath { get; } Property Value string FlagsText Gets a string representation of the active NC flags for this line. public string FlagsText { get; } Property Value string G28Arg Arguments for G28 commands. public G28Arg G28Arg { get; set; } Property Value G28Arg G52_Xyz Local coordinate system translation. public Vec3d G52_Xyz { get; set; } Property Value Vec3d G54SeriesCoordinateNum1000 Faunc Group14 value. Note that Heidenhain Datum shift is set by DatumTableId. public int G54SeriesCoordinateNum1000 { get; set; } Property Value int Group07NcArg Arguments for Group07 NC commands (tool radius compensation). public Group07NcArg Group07NcArg { get; set; } Property Value Group07NcArg Group07_D Radius compensation ID. Note that in Siemens controller, each tool ID has several D entry. public int Group07_D { get; set; } Property Value int Group08_H Height compensation ID. For Siemens Traori, the value is Tool ID. For Heidenhain, the value is Tool ID. public int Group08_H { get; set; } Property Value int Group09NcArg NC Argument of NC Group09. public Group09NcArg Group09NcArg { get; set; } Property Value Group09NcArg HeidenhainBlockCacheArg Heidenhain block cache arguments for various Heidenhain commands. public IHeidenhainBlockCacheArg HeidenhainBlockCacheArg { get; set; } Property Value IHeidenhainBlockCacheArg HeidenhainCycleDef247Q339 DATUM SETTING DATUM Number. public int HeidenhainCycleDef247Q339 { get; set; } Property Value int HeidenhainCycleDef7Arg Arguments for Heidenhain Cycle Definition 7 (datum shift). public HeidenhainCycleDef7Arg HeidenhainCycleDef7Arg { get; set; } Property Value HeidenhainCycleDef7Arg HeidenhainM140MB HeidenhainM140(Retract the tool) MB value. MB is the retraction height. double.positiveInf is [MB MAX]. One shot command. public double HeidenhainM140MB { get; set; } Property Value double HeidenhainQMacroMap Dictionary mapping Q macro numbers to their string values for Heidenhain controllers. public Dictionary HeidenhainQMacroMap { get; set; } Property Value Dictionary HeidenhainToolAxisDir Direction of the tool axis for Heidenhain controllers. public int HeidenhainToolAxisDir { get; set; } Property Value int IndexedFileLine The file line information associated with this NC line. public IndexedFileLine IndexedFileLine { get; } Property Value IndexedFileLine IsAbsolutePositioning Gets a value indicating whether absolute positioning (G90) is active. public bool IsAbsolutePositioning { get; } Property Value bool IsHeightCompensationEnabled Gets a value indicating whether height compensation is enabled. public bool IsHeightCompensationEnabled { get; } Property Value bool IsOnArcCommand Gets a value indicating whether an arc command (G02 or G03) is active. public bool IsOnArcCommand { get; } Property Value bool IsPathPrepared Gets a value indicating whether the path is prepared (no radius compensation). public bool IsPathPrepared { get; } Property Value bool IsRadiusCompensationEnabled Gets a value indicating whether radius compensation is enabled. public bool IsRadiusCompensationEnabled { get; } Property Value bool IsToolCenterPointManagementEnabled Gets a value indicating whether tool center point management is enabled. public bool IsToolCenterPointManagementEnabled { get; } Property Value bool Line The line. [Present(\"Line\", \"Line\", PhysicsUnit.None, \"G\")] public string Line { get; } Property Value string LineIndex Line Index. Start on 0. public int LineIndex { get; } Property Value int LineNo Gets the line number. [Present(\"Line Number\", \"LineNo\", PhysicsUnit.None, \"G\")] public int LineNo { get; } Property Value int MachiningFeedrate_mmdmin Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/min. public double MachiningFeedrate_mmdmin { get; set; } Property Value double MachiningFeedrate_mmds Machining Feedrate on NC code in machining mode (such as G01,G02,G03 but not G00) in mm/sec. public double MachiningFeedrate_mmds { get; set; } Property Value double McAbc_deg Gets or sets the machine ABC coordinates in degrees. public Vec3d McAbc_deg { get; set; } Property Value Vec3d McAbc_rad Machine coordinates in ABC format (radians). public Vec3d McAbc_rad { get; } Property Value Vec3d McXyz Gets or sets the machine coordinate XYZ values. public Vec3d McXyz { get; } Property Value Vec3d McXyzabc Machine coordinate ( with side radius compensation if existed). Point is XYZ. the unit is mm. Normal is ABC. the unit is radian. public DVec3d McXyzabc { get; } Property Value DVec3d NcFlagBitArray Internal Used. public BitArray NcFlagBitArray { get; } Property Value BitArray PausingNcArg public PausingNcArg PausingNcArg { get; set; } Property Value PausingNcArg Remarks Since this is base on OneShot Flag, so here has no copy ctor. PolarEntry Data structure for polar coordinates entry. public PolarEntry PolarEntry { get; set; } Property Value PolarEntry PreparationT Tool ID for preparation. public int PreparationT { get; set; } Property Value int ProgramOrthogonalPlaneNormal The orthogonal plane transform after tilting plane transform. Include G17, G18, G19 and plane of called G12p1. public Vec3d ProgramOrthogonalPlaneNormal { get; } Property Value Vec3d ProgramPos ProgramPos can be cartesian XYZ or polar XCZ with radius-based X, depends on CoordinateInterpolationMode. public Vec3d ProgramPos { get; } Property Value Vec3d ProgramXyz XYZ in Feature Coordinate. Cartesian Program Position XYZ, Abs Program Position (as G90 position). NC coordinate position is the position processed by modal flags. NC coordinate position is the position after radius compensation. The NC(Program) coordinate position is comprehensible by User. MC NC conversion may raise floating error. The floating error raise the cutting force issue, especially for bottom cutting force. Hence the NC values have to be memorized. public Vec3d ProgramXyz { get; } Property Value Vec3d Remarks NC is the better source property than MC. Ex. a NC line command: X100. The Y and Z value may vary if using MC converting back to NC. The error of Y and Z will keeps accumulating until the next explicit YZ command assignment. The error maybe up to 3e-5 in current case. the bounding box size of the case is not large (TT.20230815). Also note that if using Arc command for a complete circle, the begin NC XYZ and the end NC XYZ have to be equaled. Otherwise, it will become only a very small arc rather than the circle. So be care that do not change the NC XYZ if not needed. RadiusCompensationBuf Internal use. public RadiusCompensationBuf RadiusCompensationBuf { get; set; } Property Value RadiusCompensationBuf RapidFeedrate_mmdmin Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/min. public double RapidFeedrate_mmdmin { get; set; } Property Value double RapidFeedrate_mmds Rapid Feedrate on NC code in rapid mode (such as G00 but not G01,G02,G03) in mm/sec. public double RapidFeedrate_mmds { get; set; } Property Value double S S. Spindle speed. public int S { get; set; } Property Value int SpindleSpeed_radds Spindle speed in radian/s. public double SpindleSpeed_radds { get; set; } Property Value double SpindleSpeed_rpm Spindle speed in RPM. public double SpindleSpeed_rpm { get; set; } Property Value double T Current equiped Tool ID. public int T { get; set; } Property Value int TiltPlaneNcArg Arguments related to tilted plane operations. public ITiltPlaneNcArg TiltPlaneNcArg { get; set; } Property Value ITiltPlaneNcArg Methods GetAttacherMat(HardNcEnv) Gets the attacher transformation matrix for the current machine coordinates. public Mat4d GetAttacherMat(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv The NC environment. Returns Mat4d The attacher transformation matrix. GetCompensationHeight(HardNcEnv, IProgress) Gets the tool height compensation value for this NC line. public double GetCompensationHeight(HardNcEnv ncEnv, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment messageHost IProgress Message host for warnings Returns double Height compensation value GetCompensationRadius(CncBrand, MillingToolOffsetTable, IProgress) Gets the tool radius compensation value for this NC line. public double GetCompensationRadius(CncBrand cncBrand, MillingToolOffsetTable millingToolOffsetTable, IProgress messageHost) Parameters cncBrand CncBrand CNC brand millingToolOffsetTable MillingToolOffsetTable Milling tool offset table messageHost IProgress Message host for warnings Returns double Radius compensation value GetFileLineIndex() Get FileLineIndex. public FileLineIndex GetFileLineIndex() Returns FileLineIndex FileLineIndex GetG5xCoordinateOffset(HardNcEnv) Gets the G5x coordinate offset for this NC line. public Vec3d GetG5xCoordinateOffset(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns Vec3d The G5x coordinate offset vector GetIndexedFileLine() Gets the file line associated with this object. public IndexedFileLine GetIndexedFileLine() Returns IndexedFileLine The file line object. GetMcByProgramPos(Vec3d, HardNcEnv, NcNoteCache, IProgress, out Vec3d) Internal Use. public DVec3d GetMcByProgramPos(Vec3d programPos, HardNcEnv ncEnv, NcNoteCache ncNoteCache, IProgress messageHost, out Vec3d programXyz) Parameters programPos Vec3d ncEnv HardNcEnv ncNoteCache NcNoteCache messageHost IProgress programXyz Vec3d Returns DVec3d GetSentence() Returns the source Sentence carried by this object. public Sentence GetSentence() Returns Sentence GetSourceCommand() public IIndexedFileLine GetSourceCommand() Returns IIndexedFileLine GetTiltMat4d(HardNcEnv, out Mat4d) Internal Use Only. public bool? GetTiltMat4d(HardNcEnv ncEnv, out Mat4d tableToFeatureTransform) Parameters ncEnv HardNcEnv NC environment. tableToFeatureTransform Mat4d Transform from NC to Table without tool compensation and linear coordinate offset (such as G55,G56..). Returns bool? True if G68.2 is successfully applied, false if not, and null if not applicable. HasSyntaxXyz(HardNcEnv) Determines whether the line contains syntactic XYZ coordinates. public bool HasSyntaxXyz(HardNcEnv ncEnv) Parameters ncEnv HardNcEnv NC environment Returns bool True if syntactic XYZ coordinates are present; otherwise, false. RebuildByMc(HardNcEnv, DVec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByMc(HardNcEnv ncEnv, DVec3d mc, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. mc DVec3d MC coordinates. ncNoteCache NcNoteCache NC line cache. messageHost IProgress Message host for logging and reporting. RebuildByProgramXyz(HardNcEnv, Vec3d, NcNoteCache, IProgress) Internal Use Only. For NC opt. public void RebuildByProgramXyz(HardNcEnv ncEnv, Vec3d programXyz, NcNoteCache ncNoteCache, IProgress messageHost) Parameters ncEnv HardNcEnv NC environment. programXyz Vec3d Program XYZ coordinates. ncNoteCache NcNoteCache NC note cache. messageHost IProgress Message host for logging and reporting. ToString() Returns a string that represents the current object. public override string ToString() Returns string A string that represents the current object." }, "api/Hi.Numerical.HardNcUtil.html": { "href": "api/Hi.Numerical.HardNcUtil.html", @@ -6437,7 +6462,7 @@ "fundamentals/common/xml-io.html": { "href": "fundamentals/common/xml-io.html", "title": "About XML IO | HiAPI-C# 2025", - "summary": "About XML IO The XML IO design pattern in HiNc Framework is based on IMakeXmlSource interface and XFactory class. This pattern provides a standardized way to serialize and deserialize objects to and from XML format. Don't serialize the runtime member object like Func or Action either cache object. The runtime objects can be optionally sent by the res part on the XFactory Registration or set by the other host or dependent object. If it is set by the other object, then there is nothing can do to it in the XML IO procedure. Core Components IMakeXmlSource Interface The IMakeXmlSource interface defines the contract for objects that can be serialized to XML format. It contains a single method MakeXmlSource. XFactory Registration Every class implementing IMakeXmlSource must: Define a static XName property matching the class name. Register itself in the static constructor using XFactory.Regs.Add Implement XML serialization and deserialization logic The registration delegate signature includes an IProgress parameter for diagnostic message routing: XFactory.Regs.Add(XName, (xml, baseDirectory, relFile, progress, res) => new MyClass(xml, baseDirectory, relFile, progress)); For example, see BallApt: static BallApt() { // Register to the . XFactory.Regs.Add(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml)); } IProgress Threading The IProgress parameter is threaded through the entire deserialization chain. When a class constructor calls XFactory to deserialize child objects, it passes the same progress instance: public MyClass(XElement src, string baseDirectory, string relFile, IProgress progress) { Child = XFactory.GenByChild( src.Element(nameof(Child)), subBaseDirectory, progress); } Parsing errors are reported to the caller-provided IProgress handler. Implementation Patterns Simple Value Objects See BallApt implementation: /// /// Name for XML IO. /// public static string XName => nameof(BallApt); /// /// Ctor. /// /// XML public BallApt(XElement src) { Diameter_mm = double.Parse(src.Element(\"D\").Value); FluteHeight_mm = double.Parse(src.Element(\"FluteH\").Value); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) => ToXElement(); /// public XElement ToXElement() { return new XElement(XName, new XElement(\"D\", Diameter_mm), new XElement(\"FluteH\", FluteHeight_mm) ); } Complex Data Structures See SpindleCapability implementation: /// /// Name for XML IO. /// public static string XName => nameof(SpindleCapability); /// /// Initializes a new instance of the class. /// /// The XML element containing spindle data. /// The base directory for resolving relative paths. /// Additional resolution parameters. public SpindleCapability(XElement src, string baseDirectory, params object[] res) { this.SetNameNote(src); if (src.Element(nameof(EnergyEfficiency)) != null) EnergyEfficiency = XmlConvert.ToDouble( src.Element(nameof(EnergyEfficiency)).Value); src.Element(nameof(WorkingTemperatureUpperBoundary_C))?.SelfInvoke( e => WorkingTemperatureUpperBoundary_C = XmlConvert.ToDouble(e.Value)); src.Element(nameof(GearShiftSpindleSpeed_rpm))?.Value?.SelfInvoke( s => GearShiftSpindleSpeed_rpm = string.IsNullOrEmpty(s) ? null : XmlConvert.ToDouble(s)); if (src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)) != null) DryRunFrictionPowerCoefficient_mWdrpm = XmlConvert.ToDouble( src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)).Value); if (src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)) != null) DryRunWindagePowerCoefficient_pWdrpm3 = XmlConvert.ToDouble( src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)).Value); if (src.Element(\"SpindleSpeedToPowerContours\") != null) //for legacy WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = src.Element(\"SpindleSpeedToPowerContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r ==1?double.PositiveInfinity:(r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\") ?.SelfInvoke(dicElem => { WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = dicElem.Elements(\"Contour\") .ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); }); if (src.Element(\"SpindleSpeedToTorqueContours\") != null) //for legacy WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = src.Element(\"SpindleSpeedToTorqueContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\") ?.SelfInvoke(dicElem => { //MessageUtil.WriteLine($\"dicElem: {dicElem}\"); WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = dicElem.Elements(\"Contour\").ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); //MessageUtil.WriteLine($\"keys: {string.Join(',',WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.Select(e=>e.Key))}\"); }); //for legacy compatible. if (src.Element(\"SpindleSpeedToPower--RPM-to-kW\") != null) InfInsistentSpindleSpeedToPower_cycleDs_kW = src.Element(\"SpindleSpeedToPower--RPM-to-kW\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); //for legacy compatible. if (src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\") != null) InfInsistentSpindleSpeedToTorque_cycleDs_Nm = src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) { return new XElement(XName, this.GetNameNoteXElementList(), new XElement(nameof(EnergyEfficiency), EnergyEfficiency), new XElement(nameof(GearShiftSpindleSpeed_rpm), GearShiftSpindleSpeed_rpm), new XElement(nameof(DryRunFrictionPowerCoefficient_mWdrpm), DryRunFrictionPowerCoefficient_mWdrpm), new XElement(nameof(DryRunWindagePowerCoefficient_pWdrpm3), DryRunWindagePowerCoefficient_pWdrpm3), new XElement(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\", WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToPower\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Power-kW\", entry.Y))))) ), new XElement(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\", WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToTorque\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Torque-Nm\", entry.Y))))) ) ); } Best Practices XName: Always define static XName property matching the class name. Registration: Register in static constructor using XFactory.Regs Call the XName such like _ = CalleeClass.XName; in the caller class static initialization field so that the registration takes effect before calling the Callee construction by XFactory. Progress Threading: Pass the IProgress parameter through all nested XFactory calls. See Message Management for the rationale. Legacy Support: Maintain backward compatibility when needed" + "summary": "About XML IO The XML IO design pattern in HiNc Framework is based on IMakeXmlSource interface and XFactory class. This pattern provides a standardized way to serialize and deserialize objects to and from XML format. Don't serialize the runtime member object like Func or Action either cache object. The runtime objects can be optionally sent by the res part on the XFactory Registration or set by the other host or dependent object. If it is set by the other object, then there is nothing can do to it in the XML IO procedure. Core Components IMakeXmlSource Interface The IMakeXmlSource interface defines the contract for objects that can be serialized to XML format. It contains a single method MakeXmlSource. XFactory Registration Every class implementing IMakeXmlSource must: Define a static XName property matching the class name. Register itself in the static constructor using XFactory.Regs.Add Implement XML serialization and deserialization logic The registration delegate signature includes an IProgress parameter for diagnostic message routing: XFactory.Regs.Add(XName, (xml, baseDirectory, relFile, progress, res) => new MyClass(xml, baseDirectory, relFile, progress)); For example, see BallApt: static BallApt() { // Register to the . XFactory.Regs.Add(XName, (xml,baseDirectory, relFile, progress, res) => new BallApt(xml)); } IProgress Threading The IProgress parameter is threaded through the entire deserialization chain. When a class constructor calls XFactory to deserialize child objects, it passes the same progress instance: public MyClass(XElement src, string baseDirectory, string relFile, IProgress progress) { Child = XFactory.GenByChild( src.Element(nameof(Child)), subBaseDirectory, progress); } Parsing errors are reported to the caller-provided IProgress handler. Implementation Patterns Simple Value Objects See BallApt implementation: /// /// Name for XML IO. /// public static string XName => nameof(BallApt); /// /// Ctor. /// /// XML public BallApt(XElement src) { Diameter_mm = double.Parse(src.Element(\"D\").Value); FluteHeight_mm = double.Parse(src.Element(\"FluteH\").Value); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) => ToXElement(); /// public XElement ToXElement() { return new XElement(XName, new XElement(\"D\", Diameter_mm), new XElement(\"FluteH\", FluteHeight_mm) ); } Complex Data Structures See SpindleCapability implementation: /// /// Name for XML IO. /// public static string XName => nameof(SpindleCapability); /// /// Initializes a new instance of the class. /// /// The XML element containing spindle data. /// The base directory for resolving relative paths. /// Additional resolution parameters. public SpindleCapability(XElement src, string baseDirectory, params object[] res) { this.SetNameNote(src); if (src.Element(nameof(EnergyEfficiency)) != null) EnergyEfficiency = XmlConvert.ToDouble( src.Element(nameof(EnergyEfficiency)).Value); src.Element(nameof(WorkingTemperatureUpperBoundary_C))?.SelfInvoke( e => WorkingTemperatureUpperBoundary_C = XmlConvert.ToDouble(e.Value)); src.Element(nameof(GearShiftSpindleSpeed_rpm))?.Value?.SelfInvoke( s => GearShiftSpindleSpeed_rpm = string.IsNullOrEmpty(s) ? null : XmlConvert.ToDouble(s)); if (src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)) != null) DryRunFrictionPowerCoefficient_mWdrpm = XmlConvert.ToDouble( src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)).Value); if (src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)) != null) DryRunWindagePowerCoefficient_pWdrpm3 = XmlConvert.ToDouble( src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)).Value); if (src.Element(\"SpindleSpeedToPowerContours\") != null) //for legacy WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = src.Element(\"SpindleSpeedToPowerContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\") ?.SelfInvoke(dicElem => { WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW = dicElem.Elements(\"Contour\") .ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToPower\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Power-kW\").Value))) .ToList()); }); if (src.Element(\"SpindleSpeedToTorqueContours\") != null) //for legacy WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = src.Element(\"SpindleSpeedToTorqueContours\").Elements(\"Contour\") .ToDictionary( contourElem => { double r = XmlConvert.ToDouble(contourElem.Attribute(\"InsistentRatio\")?.Value); //600s=10mins return r == 1 ? double.PositiveInfinity : (r * 600); }, contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); src.Element(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\") ?.SelfInvoke(dicElem => { //MessageUtil.WriteLine($\"dicElem: {dicElem}\"); WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm = dicElem.Elements(\"Contour\").ToDictionary( contourElem => XmlConvert.ToDouble( contourElem.Attribute(\"WorkableDuration-min\")?.Value), contourElem => contourElem.Elements(\"SpindleSpeedToTorque\").Select( elem => new Vec2d( XmlConvert.ToDouble(elem.Element(\"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Element(\"Torque-Nm\").Value))) .ToList()); //MessageUtil.WriteLine($\"keys: {string.Join(',',WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.Select(e=>e.Key))}\"); }); //for legacy compatible. if (src.Element(\"SpindleSpeedToPower--RPM-to-kW\") != null) InfInsistentSpindleSpeedToPower_cycleDs_kW = src.Element(\"SpindleSpeedToPower--RPM-to-kW\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); //for legacy compatible. if (src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\") != null) InfInsistentSpindleSpeedToTorque_cycleDs_Nm = src.Element(\"SpindleSpeedToTorque--RPM-to-Nm\").Elements() .Select(elem => new Vec2d(XmlConvert.ToDouble(elem.Attribute( \"SpindleSpeed-RPM\").Value) / 60, XmlConvert.ToDouble(elem.Value))).ToList(); } /// public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) { return new XElement(XName, this.GetNameNoteXElementList(), new XElement(nameof(EnergyEfficiency), EnergyEfficiency), new XElement(nameof(GearShiftSpindleSpeed_rpm), GearShiftSpindleSpeed_rpm), new XElement(nameof(DryRunFrictionPowerCoefficient_mWdrpm), DryRunFrictionPowerCoefficient_mWdrpm), new XElement(nameof(DryRunWindagePowerCoefficient_pWdrpm3), DryRunWindagePowerCoefficient_pWdrpm3), new XElement(\"WorkableDurationToSpindleSpeedPowerContoursDictionary\", WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToPower\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Power-kW\", entry.Y))))) ), new XElement(\"WorkableDurationToSpindleSpeedTorqueContoursDictionary\", WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.OrderBy(entry => entry.Key) .Select(entry => new XElement(\"Contour\", new XAttribute(\"WorkableDuration-min\", entry.Key), entry.Value.Select(entry => new XElement(\"SpindleSpeedToTorque\", new XElement(\"SpindleSpeed-RPM\", entry.X * 60), new XElement(\"Torque-Nm\", entry.Y))))) ) ); } Best Practices XName: Always define static XName property matching the class name. Registration: Register in static constructor using XFactory.Regs Call the XName such like _ = CalleeClass.XName; in the caller class static initialization field so that the registration takes effect before calling the Callee construction by XFactory. Progress Threading: Pass the IProgress parameter through all nested XFactory calls. See Message Management for the rationale. Legacy Support: Maintain backward compatibility when needed" }, "fundamentals/general-hinc-workflow/index.html": { "href": "fundamentals/general-hinc-workflow/index.html", @@ -6527,12 +6552,12 @@ "manual/analysis/index.html": { "href": "manual/analysis/index.html", "title": "Analysis | HiAPI-C# 2025", - "summary": "Analysis Theory, principles, and evaluation techniques for interpreting simulation results and understanding machining physics. Physics and Coordinates Milling Physics Coordinates — Coordinate systems used in milling physics Tool Behavior and Wear Process Machinability — Evaluating process machinability Tool Life & Wear — Tool life and wear modes Relief Face Avoidance — Minimum relief angle and clearance Radial Angle Measurement — Measuring radial rake and relief angles Simulation Performance CPU Usage in Simulation — CPU utilization during simulation Corner Feedrate Behavior — Why optimized feed rates are lower at corners Advanced Topics Smart Holder Training — Smart tool holder coefficient training Spindle Power Evaluation — Spindle power accuracy validation NC Optimization Principles — Optimization objectives and tracking" + "summary": "Analysis Theory, principles, and evaluation techniques for interpreting simulation results and understanding machining physics. Physics and Coordinates Milling Physics Coordinates — Coordinate systems used in milling physics Tool Behavior and Wear Process Machinability — Evaluating process machinability Tool Life & Wear — Tool life and wear modes Relief Face Avoidance — Minimum relief angle and clearance Radial Angle Measurement — Measuring radial rake and relief angles Simulation Performance CPU Usage in Simulation — CPU utilization during simulation Corner Feedrate Behavior — Why optimized feed rates are lower at corners Advanced Topics Smart Holder Training — Smart tool holder coefficient training Spindle Capability — Boundary curves, thermal envelope, and the four torque/power ratios Spindle Power Evaluation — Spindle power accuracy validation NC Optimization Principles — Optimization objectives and tracking" }, "manual/analysis/machinability.html": { "href": "manual/analysis/machinability.html", "title": "Evaluating Process Machinability | HiAPI-C# 2025", - "summary": "Evaluating Process Machinability The machinability time-series chart can be used to evaluate tool breakage risk during machining. Tool breakage occurs when any of the following exceeds 100% and persists for longer than one simulation step: Yielding Stress Ratio, Max Spindle Torque Ratio, or Max Spindle Power Ratio. If the value significantly exceeds 100% — roughly speaking, above 200% — tool breakage can occur even without sustained duration. Note: The default simulation uses per-revolution milling mode, where one simulation step equals one spindle revolution. Yielding Stress Ratio is a percentage indicator with the tool material's breakage force as the denominator. The numerator is the simulation step's absolute force MaxAbsForce_N(API). Compared to using the absolute force value directly as a limit, the ratio incorporates tool material mechanics and more accurately reflects the tool's actual safety margin. The optimization target force OptPreferedForce_N(API) represents the desired MaxAbsForce_N after optimization. For small tools, breakage is typically caused by insufficient tool force capacity, and breakage is based on the Yielding Stress Ratio. For small-to-medium tools, breakage is typically caused by insufficient spindle performance, and breakage is based on the Max Spindle Torque Ratio or Max Spindle Power Ratio. When cutting resistance exceeds spindle performance, the machine feed rate remains constant but the spindle speed continuously decreases, causing the feed per tooth to continuously increase, which drives cutting forces to spike until tool breakage or machine stoppage. Note Tool Breakage Solutions Modify the toolpath to reduce cutting width/depth, or use HiNC's optimization feature to adjust feed rates, bringing the Yielding Stress Ratio, Max Spindle Torque Ratio, and Max Spindle Power Ratio below 100%. Thermal Plastic Deformation of Cutting Edge If the Thermal Yield Ratio exceeds 100%, thermal plastic deformation of the cutting edge occurs, accelerating wear. Unlike the Yielding Stress Ratio, Max Spindle Torque Ratio, and Max Spindle Power Ratio, this is a long-term indicator — exceeding 100% does not cause immediate effects. Note Thermal Plastic Deformation Solutions After addressing tool breakage issues, reduce the spindle speed to allow sufficient time for the cutting edge to dissipate heat. Note that whether the coolant is properly directed at the cutting edge has a significant impact. If the coolant is not aimed at the cutting edge, it effectively reduces the heat dissipation coefficient. Tool manufacturers typically provide recommended machining conditions, and the Thermal Yield Ratio obtained by simulating under those conditions usually exceeds 100%. This is because the manufacturing formulations of tool materials differ from HiNC's conservatively set default values. If you consider machining conditions with a Thermal Yield Ratio above 100% to be reasonable, you can adjust the thermal properties of the tool material so that the calculated Thermal Yield Ratio approaches 100%." + "summary": "Evaluating Process Machinability The machinability time-series chart can be used to evaluate tool breakage risk during machining. Tool breakage occurs when any of the following exceeds 100% and persists for longer than one simulation step: Yielding Stress Ratio [YieldingStressRatio (API)], Max Spindle Torque Ratio [MaxSpindleTorqueRatio (API)], or Max Spindle Power Ratio [MaxSpindlePowerRatio (API)]. If the value significantly exceeds 100% — roughly speaking, above 200% — tool breakage can occur even without sustained duration. Note: The default simulation uses per-revolution milling mode, where one simulation step equals one spindle revolution. Yielding Stress Ratio is a percentage indicator with the tool material's breakage force as the denominator. The numerator is the simulation step's absolute force MaxAbsForce_N(API). Compared to using the absolute force value directly as a limit, the ratio incorporates tool material mechanics and more accurately reflects the tool's actual safety margin. The optimization target force OptPreferedForce_N(API) represents the desired MaxAbsForce_N after optimization. For small tools, breakage is typically caused by insufficient tool force capacity, and breakage is based on the Yielding Stress Ratio. For small-to-medium tools, breakage is typically caused by insufficient spindle performance, and breakage is based on the Max Spindle Torque Ratio or Max Spindle Power Ratio. When cutting resistance exceeds spindle performance, the machine feed rate remains constant but the spindle speed continuously decreases, causing the feed per tooth to continuously increase, which drives cutting forces to spike until tool breakage or machine stoppage. For the underlying boundary curves and how each ratio's denominator is computed at the current rpm, see Spindle Capability. Note Tool Breakage Solutions Modify the toolpath to reduce cutting width/depth, or use HiNC's optimization feature to adjust feed rates, bringing the Yielding Stress Ratio, Max Spindle Torque Ratio, and Max Spindle Power Ratio below 100%. Thermal Plastic Deformation of Cutting Edge If the Thermal Yield Ratio [ThermalYieldRatio (API)] exceeds 100%, thermal plastic deformation of the cutting edge occurs, accelerating wear. Unlike the Yielding Stress Ratio, Max Spindle Torque Ratio, and Max Spindle Power Ratio, this is a long-term indicator — exceeding 100% does not cause immediate effects. Note Thermal Plastic Deformation Solutions After addressing tool breakage issues, reduce the spindle speed to allow sufficient time for the cutting edge to dissipate heat. Note that whether the coolant is properly directed at the cutting edge has a significant impact. If the coolant is not aimed at the cutting edge, it effectively reduces the heat dissipation coefficient. Tool manufacturers typically provide recommended machining conditions, and the Thermal Yield Ratio obtained by simulating under those conditions usually exceeds 100%. This is because the manufacturing formulations of tool materials differ from HiNC's conservatively set default values. If you consider machining conditions with a Thermal Yield Ratio above 100% to be reasonable, you can adjust the thermal properties of the tool material so that the calculated Thermal Yield Ratio approaches 100%." }, "manual/analysis/milling-physics-coordinates.html": { "href": "manual/analysis/milling-physics-coordinates.html", @@ -6559,10 +6584,15 @@ "title": "Smart Tool Holder Coefficient Training | HiAPI-C# 2025", "summary": "Smart Tool Holder Coefficient Training By cutting the following shapes and collecting three-direction torques with a smart tool holder, you can train milling coefficients through HiNC projects. Overview T1 End mill D10 4 flutes T2 Drill bit, diameter unrestricted Click to download NC code. Note Adjusting Machining Method Speed and feed can be changed according to material conditions, but feed per tooth must be in multiples. Slower spindle speed allows the smart tool holder to collect more data per unit time. The wall thickness between the two slots in Shape I needs to be thin enough so that Shape II cutting is discontinuous per revolution. Shape I Shape I consists of three red slots, which are preparatory shapes, no need to collect smart tool holder data. ae10; ap1; S1500; F600 Shape II Shape II penetrates through the thin walls between the three red slots, need to collect smart tool holder data. lineA: T1; ap1; S50; F20 (frt0.1) lineB: T1; ap1; S50; F10 (frt0.05) Shape III Shape III is drilling, need to collect smart tool holder data. drillA: T2; dp4; S50; F20 drillB: T2; dp4; S50; F10" }, + "manual/analysis/spindle-capability.html": { + "href": "manual/analysis/spindle-capability.html", + "title": "Spindle Capability | HiAPI-C# 2025", + "summary": "Spindle Capability SpindleCapability (API) describes the energy, torque, power, and thermal envelope of a machine spindle. It is loaded as XML (.SpindleCapability files under Resource/SpindleCapability/) and lives on SpindleCapability (API) as part of the project equipment. This page explains what the model represents physically and how the per-step ratios on a machining step are derived. For editing values interactively, see Spindle Capability Page. For empirical validation of the resulting power numbers against Fanuc ServoGuide, see Spindle Power Evaluation. Boundary curves: continuous vs instantaneous The capability stores two dictionaries keyed by workable duration (in minutes), mapping spindle speed to the maximum power or torque the spindle can deliver for that duration: WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW (API) WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm (API) Two duration keys are special: PositiveInfinity — the continuous boundary. The spindle can run at any (speed, value) point on this curve forever without overheating. Industry usage often calls this the S1 rating. The smallest finite key (e.g. 15) — the instantaneous boundary. The spindle can run at any (speed, value) point on this curve only for that workable duration before the temperature ceiling is reached. A capability typically also has intermediate keys (e.g. 60 minutes) which document the spindle's published rating curve. Note Why duration-keyed and not just two curves? The duration key serves two roles. The contour values give peak load capability (used by the ratio computation, see below). The duration values implicitly encode the thermal time constants (used by the thermal envelope, see further below). One family of curves drives both. If GearShiftSpindleSpeed_rpm (API) is set, each contour is treated as two segments split at that speed; only the segment for the current spindle speed is used for interpolation. Outside the segment, interpolation uses nearest-neighbour clamping rather than extrapolation. How the four ratios are computed For every machining step where the spindle speed changes, SpindleSpeedCache (API) interpolates each of the four contour-based curves at the current spindle speed and stores four scalar boundaries: Boundary (denominator) Source contour MinInsistentRatioSpindleTorqueBoundary_Nm smallest-key entry of the torque dictionary, interpolated at current rpm InfInsistentRatioSpindleTorqueBoundary_Nm ∞-key entry of the torque dictionary, interpolated at current rpm MinInsistentRatioSpindlePowerBoundary_W smallest-key entry of the power dictionary, interpolated at current rpm InfInsistentRatioSpindlePowerBoundary_W ∞-key entry of the power dictionary, interpolated at current rpm The four MachiningStep ratios are then divisions: \\[ \\begin{aligned} \\text{MaxSpindleTorqueRatio} &= \\frac{\\text{MaxAxialTorque\\_Nm}}{\\text{MinInsistentRatioSpindleTorqueBoundary\\_Nm}} \\\\[6pt] \\text{ContinueSpindleTorqueRatio} &= \\frac{\\text{MaxAxialTorque\\_Nm}}{\\text{InfInsistentRatioSpindleTorqueBoundary\\_Nm}} \\\\[6pt] \\text{MaxSpindlePowerRatio} &= \\frac{\\text{inputPower\\_W}}{\\text{MinInsistentRatioSpindlePowerBoundary\\_W}} \\\\[6pt] \\text{ContinueSpindlePowerRatio} &= \\frac{\\text{inputPower\\_W}}{\\text{InfInsistentRatioSpindlePowerBoundary\\_W}} \\end{aligned} \\] Because the continuous boundary is always lower than (or equal to) the short-duration boundary, the corresponding Continue- ratio is always greater than (or equal to) its Max- counterpart for the same load: A Max- ratio above 100% means the spindle is overdriven instantaneously and will trip thermal protection within the rated short duration. This is the criterion MaxSpindleTorqueRatio (API) and MaxSpindlePowerRatio (API) use to flag tool breakage on Process Machinability. A Continue- ratio above 100% means the spindle cannot sustain this load forever — short bursts may still be safe. Useful for pacing long operations rather than predicting immediate failure. Input power vs output power The power numerator above is input power (energy entering the spindle), not output power (energy reaching the cutting end). They are related by the spindle's energy efficiency: \\(\\text{inputPower\\_W} = \\frac{\\text{AbsAxialPower\\_W}}{\\text{EnergyEfficiency}}\\) — where EnergyEfficiency is EnergyEfficiency (API) and AbsAxialPower_W is what the cutting actually demands. The lost fraction \\((1 - \\text{EnergyEfficiency})\\) becomes heat that the thermal envelope has to dissipate. Spindle Power Evaluation documents the empirical justification for this conversion against measured Fanuc ServoGuide TCMD data. Dry-run idle power Even when the cutter is in air, a rotating spindle dissipates power as bearing friction and aerodynamic windage. HiNC models this as a sum of a linear-in-rpm term (bearing friction) and a higher-order term (windage), parameterised by: DryRunFrictionPowerCoefficient_mWdrpm (API) — friction term coefficient DryRunWindagePowerCoefficient_pWdrpm3 (API) — windage term coefficient The friction term dominates at low rpm; the windage term takes over at high rpm. The thermal envelope (next section) uses the larger of the dry-run idle power and the cutting-induced heat, so the spindle keeps warming up even during air moves. Thermal envelope The same SpindleCapability also drives a thermal model of the spindle body. You do not set heat capacity or convection directly — the thermal model is auto-calibrated from your existing inputs. The continuous (∞-key) curve plus WorkingTemperatureUpperBoundary_C (API) together determine how fast the spindle dumps heat at steady state. Physically: the continuous rating is, by definition, the load the spindle can hold forever without exceeding the working-temperature ceiling — so HiNC infers the steady-state heat-loss capacity from this constraint. The shortest-duration curve plus its duration key together determine how much heat the spindle can absorb before reaching the ceiling. Physically: the short-duration rating is, by definition, the load that brings the spindle to the ceiling exactly within that workable time — so HiNC infers the body's effective thermal mass from this constraint. What this means for you: refining the contour data (more accurate (speed, power/torque) points, better matched duration keys) automatically improves both load-capacity prediction and thermal-response speed. There is no separate thermal parameter to tune. Per-step temperature outputs At each step the body temperature evolves under whatever heat input is currently applied (cutting losses or dry-run, whichever is larger), approaching the steady-state temperature implied by that heat input. The two outputs published per step are: SpindleTemperature_C (API) — current body temperature SpindleWorkingTemperatureRatio (API) — body temperature normalised so that ambient is 0 and the working-temperature ceiling is 1. A value approaching 1.0 means the spindle is near its thermal limit. Note SpindleWorkingTemperatureRatio describes the spindle housing as a whole. It is not the same as the cutter-edge thermal failure tracked by ThermalYieldRatio in Process Machinability, which is a localized cutting-edge phenomenon. Editing and file IO Capabilities are persisted as XML (.SpindleCapability files). Three pre-built spindles ship in Resource/SpindleCapability/: FANUC-aT12-12000i.SpindleCapability TMV-720A-STD-8000RPM.SpindleCapability VP-8--Fanuc-10000RPM.SpindleCapability To edit values interactively, see Spindle Capability Page in the Quasar webservice. The desktop WPF app does not yet have a dedicated editor; load capabilities through the equipment's ObjectManagementMenuButton instead. Related pages Process Machinability — uses MaxSpindleTorqueRatio / MaxSpindlePowerRatio for tool-breakage prediction Spindle Power Evaluation — empirical validation of HiNC spindle power against Fanuc ServoGuide measurements Step Output — full list of per-step physics outputs Spindle Capability Page — UI editor walkthrough" + }, "manual/analysis/spindle-power-evaluation.html": { "href": "manual/analysis/spindle-power-evaluation.html", "title": "Spindle Power Evaluation | HiAPI-C# 2025", - "summary": "Spindle Power Evaluation The role of spindle power for energy cost of Milling The energy distribution can be referenced from Heidenhain's published measurements1. The total machine power splits into two main flows: External processing — Cooling lubricant and Compressed air, typically supplied by facility infrastructure. Electrical power of the machine — The machine's own electrical consumption, further split into Auxiliary components and CNC control (which contains Spindle and Feed drives). Note Case A: Mean power requirement for manufacturing a housing part — Roughing (13 kW) sankey-beta Total power (13 kW),External processing,6.4 External processing,Cooling lubricant,5.1 External processing,Compressed air,1.3 Total power (13 kW),Electrical power of the machine,6.6 Electrical power of the machine,Auxiliary components,3.1 Electrical power of the machine,CNC control,3.5 CNC control,Spindle,3.25 CNC control,Feed drives,0.25 Note Case A: Mean power requirement for manufacturing a housing part — Finishing (7.4 kW) sankey-beta Total power (7.4 kW),External processing,2.8 External processing,Cooling lubricant,1.5 External processing,Compressed air,1.3 Total power (7.4 kW),Electrical power of the machine,4.6 Electrical power of the machine,Auxiliary components,2.8 Electrical power of the machine,CNC control,1.8 CNC control,Spindle,1.55 CNC control,Feed drives,0.25 Note Case B: Mean power consumption of the drives during rough facing Face-milling cutter D = 60 mm, speed 4 100 rpm, infeed depth 4 mm. xychart-beta title \"Mean power consumption of the drives (kW)\" x-axis [\"Spindle\", \"Feed axes\"] y-axis \"Mean power (kW)\" 0 --> 20 bar [18.5, 0.3] In Case A roughing, the workpiece material seems like Al6061. CNC control (Spindle + Feed drives) takes about 27% of the total power (3.5 / 13 ≈ 26.9%). From HiNC spindle power evaluation: Milling S45C cost 200% energy compare to Al6061T6. Milling Inconel718 cost 800% energy compare to Al6061T6 i.e., Spindle power of milling S45C occupies 42% of total power. Spindle power of milling Inconel718 occupies 75% of total power. Conclusion: Spindle Power matters for not easy-working materials for computing the energy cost of milling. Verification of HiNC Spindle Power Evaluation HiNC Spindle Power Evaluation is verified by comparison of the gathering Data based on the following setting. Setting Machine Tool: YCM NDV102A Max Spindle Power: 22.4 kW Controller: Fanuc 31i-Model A Sampling: 1ms Total Spindle Expended Energy: 0.412 kWh The total spindle expended energy is rearranged from Fanuc ServoGuide TCMD data. Work Time: 8min 30s Comparison The following figures are spindle power based on Controller and the spindle power evaluated by HiNC. Note The spindle power by Fanuc ServoGuide TCMD(%) * MaxSpindlePower Note The evaluated spindle power by HiNC Milling Power * Energy Conversion Efficiency (here is 0.4) Data summarized from Heidenhain, Technical Information: Aspects of Energy Efficiency in Machine Tools, November 2010.↩" + "summary": "Spindle Power Evaluation For the spindle capability model itself (boundary curves, thermal envelope, and the four torque/power ratios), see Spindle Capability. This page focuses on empirical validation of HiNC's spindle-power evaluation against measured data. The role of spindle power for energy cost of Milling The energy distribution can be referenced from Heidenhain's published measurements1. The total machine power splits into two main flows: External processing — Cooling lubricant and Compressed air, typically supplied by facility infrastructure. Electrical power of the machine — The machine's own electrical consumption, further split into Auxiliary components and CNC control (which contains Spindle and Feed drives). Note Case A: Mean power requirement for manufacturing a housing part — Roughing (13 kW) sankey-beta Total power (13 kW),External processing,6.4 External processing,Cooling lubricant,5.1 External processing,Compressed air,1.3 Total power (13 kW),Electrical power of the machine,6.6 Electrical power of the machine,Auxiliary components,3.1 Electrical power of the machine,CNC control,3.5 CNC control,Spindle,3.25 CNC control,Feed drives,0.25 Note Case A: Mean power requirement for manufacturing a housing part — Finishing (7.4 kW) sankey-beta Total power (7.4 kW),External processing,2.8 External processing,Cooling lubricant,1.5 External processing,Compressed air,1.3 Total power (7.4 kW),Electrical power of the machine,4.6 Electrical power of the machine,Auxiliary components,2.8 Electrical power of the machine,CNC control,1.8 CNC control,Spindle,1.55 CNC control,Feed drives,0.25 Note Case B: Mean power consumption of the drives during rough facing Face-milling cutter D = 60 mm, speed 4 100 rpm, infeed depth 4 mm. xychart-beta title \"Mean power consumption of the drives (kW)\" x-axis [\"Spindle\", \"Feed axes\"] y-axis \"Mean power (kW)\" 0 --> 20 bar [18.5, 0.3] In Case A roughing, the workpiece material seems like Al6061. CNC control (Spindle + Feed drives) takes about 27% of the total power (3.5 / 13 ≈ 26.9%). From HiNC spindle power evaluation: Milling S45C cost 200% energy compare to Al6061T6. Milling Inconel718 cost 800% energy compare to Al6061T6 i.e., Spindle power of milling S45C occupies 42% of total power. Spindle power of milling Inconel718 occupies 75% of total power. Conclusion: Spindle Power matters for not easy-working materials for computing the energy cost of milling. Verification of HiNC Spindle Power Evaluation HiNC Spindle Power Evaluation is verified by comparison of the gathering Data based on the following setting. Setting Machine Tool: YCM NDV102A Max Spindle Power: 22.4 kW Controller: Fanuc 31i-Model A Sampling: 1ms Total Spindle Expended Energy: 0.412 kWh The total spindle expended energy is rearranged from Fanuc ServoGuide TCMD data. Work Time: 8min 30s Comparison The following figures are spindle power based on Controller and the spindle power evaluated by HiNC. Note The spindle power by Fanuc ServoGuide TCMD(%) * MaxSpindlePower Note The evaluated spindle power by HiNC Milling Power * Energy Conversion Efficiency (here is 0.4) Data summarized from Heidenhain, Technical Information: Aspects of Energy Efficiency in Machine Tools, November 2010.↩" }, "manual/analysis/wear.html": { "href": "manual/analysis/wear.html", diff --git a/App/wwwroot/HiAPI-docsite/manifest.json b/App/wwwroot/HiAPI-docsite/manifest.json index 0b069d77..9a93b537 100644 --- a/App/wwwroot/HiAPI-docsite/manifest.json +++ b/App/wwwroot/HiAPI-docsite/manifest.json @@ -164,6 +164,20 @@ "Title": "Hi.Cbtr.CubeTree", "Summary": "

    Cube-based data structure. CubeTree has high performance for free-form geometry manipulation include volume removal and addition.

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.Cbtr.CubeTreeExportExtensions.yml", + "output": { + ".html": { + "relative_path": "api/Hi.Cbtr.CubeTreeExportExtensions.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.Cbtr.CubeTreeExportExtensions", + "Summary": "

    Mesh export helpers for .

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.Cbtr.CubeTreeFile.yml", @@ -4224,6 +4238,20 @@ "Title": "Hi.Geom.NativeTopoStlfr", "Summary": "

    Native TopoStl with element type fraction.

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.Geom.ObjUtil.yml", + "output": { + ".html": { + "relative_path": "api/Hi.Geom.ObjUtil.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.Geom.ObjUtil", + "Summary": "

    Wavefront OBJ writer for RGB-coloured triangle buffers.

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.Geom.PairZr.yml", @@ -4252,6 +4280,20 @@ "Title": "Hi.Geom.PairZrUtil", "Summary": "

    Utility class for working with PairZr objects

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.Geom.PlyUtil.yml", + "output": { + ".html": { + "relative_path": "api/Hi.Geom.PlyUtil.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.Geom.PlyUtil", + "Summary": "

    Stanford PLY writer for RGB-coloured triangle buffers.

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.Geom.Polar3d.yml", @@ -9892,7 +9934,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup", - "Summary": "

    Fanuc-style position system variables read from the previous block's\nruntime-state JSON sections:

    \n
    • #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's .
    • #5021-#5023Current machine position X/Y/Z → previous block's .
    • #5041-#5043Current absolute position X/Y/Z → previous block's .
    \n

    \nStateless. Configured on\nVariableEvaluatorSyntax.RuntimeVariableLookups rather than\nNcDependencyList because the read needs the block node for\n access — there is no\nlong-lived dependency object that owns this data.\n

    \n" + "Summary": "

    Fanuc-style position system variables read from the previous block's\nruntime-state JSON sections:

    \n
    • #5001-#5003Block-end position X/Y/Z (workpiece) → previous block's .
    • #5021-#5023Current machine position X/Y/Z → previous block's .
    • #5041-#5043Current absolute position X/Y/Z → previous block's .
    \n

    \nStateless. Configured on\n rather than\nNcDependencyList because the read needs the block node for\n access — there is no\nlong-lived dependency object that owns this data.\n

    \n" }, { "type": "ManagedReference", @@ -10172,7 +10214,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Dependencys.INcDependency", - "Summary": null + "Summary": "

    Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime.

    \n" }, { "type": "ManagedReference", @@ -10396,7 +10438,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Initializers.INcInitializer", - "Summary": null + "Summary": "

    Populates the init-block JSON sections (e.g. home position, static defaults)\nbefore the soft-NC runtime processes any source NC syntax. Implementations\nsuch as and \nwrite into the supplied .

    \n" }, { "type": "ManagedReference", @@ -10410,7 +10452,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Initializers.StaticInitializer", - "Summary": null + "Summary": "

    Merges a fixed JSON snippet into the init-block\nJSON. Used to seed brand-default sections (e.g. G54, G80)\nbefore any source NC syntax is processed.

    \n" }, { "type": "ManagedReference", @@ -10592,7 +10634,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.CsScript", - "Summary": null + "Summary": "

    Section-key holder for inline C# scripts attached to an NC block. Carries\n (run before the block's acts) and\n (run after). Resolved by\n and\n.

    \n" }, { "type": "ManagedReference", @@ -10636,6 +10678,20 @@ "Title": "Hi.NcParsers.Keywords.Fanuc", "Summary": null }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.FanucPathSmoothing.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.FanucPathSmoothing.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.FanucPathSmoothing", + "Summary": "

    Section data holder for .

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.Keywords.Feedrate.yml", @@ -10704,7 +10760,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.Heidenhain.ICyclDef", - "Summary": null + "Summary": "

    JSON section schema for Heidenhain CYCL DEF blocks. The\n string captures either the cycle title (e.g.\n“DATUM SETTING”) or a parameter line (e.g. “Q339=+1”).

    \n" }, { "type": "ManagedReference", @@ -10790,6 +10846,20 @@ "Title": "Hi.NcParsers.Keywords.IDwellDef", "Summary": "

    Dwell/pause section definition for use inside Sequence items.\nResolved by into\n.

    \n" }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.Keywords.IFanucPathSmoothingDef", + "Summary": "

    Fanuc-specific path smoothing state written by\n.

    \n

    \nExtends with the Fanuc G05.1 R argument\n(precision / smoothness level number, R1..R10 mapping to controller-internal\ntuning macro variables). Q is binary in current Fanuc firmware (Q0 disable /\nQ1 enable), so covers it directly\n— no raw Q field is stored.\n

    \n

    \nJSON section key remains nameof(PathSmoothing) so generic readers\n(cache dumps, modal carry, UI) can cast to \nacross all controller brands; brand-specific readers cast to\n for the extra fields.\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.Keywords.IFeedrateDef.yml", @@ -10816,7 +10886,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.IFlagsDef", - "Summary": null + "Summary": "

    JSON section schema describing the modal/non-modal flags that take effect\non an NC block. Each entry in is a brand-specific\nkeyword recognized by the soft-NC runtime.

    \n" }, { "type": "ManagedReference", @@ -10872,7 +10942,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.IParsingDef", - "Summary": null + "Summary": "

    JSON section schema carrying the raw, brand-specific parsing trace for an\nNC block. The node holds intermediate parser output\nused by downstream syntaxes and diagnostics.

    \n" }, { "type": "ManagedReference", @@ -10886,7 +10956,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.IPathSmoothingDef", - "Summary": "

    Path smoothing state written by\n.

    \n

    \nISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable):\nhigh-precision contour control / AICC / Nano Smoothing.\nController-internal interpolation black box — simulation records\nthe state but does not alter the tool path.\n

    \n" + "Summary": "

    Path smoothing state. The base interface is brand-agnostic; controller\nbrands extend it with their own argument fields (e.g.\n for Fanuc G05.1 R precision-level).\nFanuc-flavour writes are produced by\n.

    \n

    \nISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable):\nhigh-precision contour control / AICC / Nano Smoothing.\nController-internal interpolation black box — simulation records\nthe state but does not alter the tool path.\n

    \n" }, { "type": "ManagedReference", @@ -10956,7 +11026,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.IProgramXyzDef", - "Summary": null + "Summary": "

    JSON section schema carrying the program-coordinate position commanded on\nthe current block. Written by \nbefore the chain\ncomposes it into machine coordinates.

    \n" }, { "type": "ManagedReference", @@ -11082,7 +11152,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.IUnparsedTextDef", - "Summary": null + "Summary": "

    JSON section schema carrying the residual block text that was not consumed\nby any registered syntax. Used for diagnostics and round-trip preservation.

    \n" }, { "type": "ManagedReference", @@ -11096,7 +11166,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.IndexNote", - "Summary": null + "Summary": "

    JSON-section data shape pairing a single-character address symbol\n(e.g. ‘O’, ‘N’) with its numeric index, used to annotate\nprogram/sequence numbers on an NC block.

    \n" }, { "type": "ManagedReference", @@ -11348,7 +11418,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.Keywords.ToolHeightCompensation", - "Summary": null + "Summary": "

    Section key holder for .

    \n" }, { "type": "ManagedReference", @@ -11686,6 +11756,20 @@ "Title": "Hi.NcParsers.LogicSyntaxs.Evaluation", "Summary": null }, + { + "type": "ManagedReference", + "source_relative_path": "api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.yml", + "output": { + ".html": { + "relative_path": "api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html" + } + }, + "version": "", + "Uid": null, + "IsMRef": true, + "Title": "Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax", + "Summary": "

    Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing)\nand records the modal state in the JSON\nsection using the schema. Q1 enables,\nQ0 disables; the optional R{n} precision-level is preserved as\n. The simulation does not\nalter the tool path — this is a controller-internal interpolation black\nbox; the captured state exists for bidirectional NC-text reconstruction.

    \n

    \nModal carry to subsequent blocks is handled by\n, which already tracks the\nPathSmoothing section key and deep-clones it forward.\n

    \n" + }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.yml", @@ -11938,20 +12022,6 @@ "Title": "Hi.NcParsers.LogicSyntaxs.McXyzSyntax", "Summary": "

    Derives from\n by applying the composed\n.

    \n

    \nProcesses two stages:\n

    1. Root ProgramXyz → root MachineCoordinate
    2. .[*]\n — derives MachineCoordinate from ProgramXyz for items\n that have ProgramXyz but no MachineCoordinate
    \nMust be placed after syntaxes that write ProgramXyz\n(e.g., )\nand before syntaxes that read MachineCoordinate\n(e.g., ).\n\n" }, - { - "type": "ManagedReference", - "source_relative_path": "api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.yml", - "output": { - ".html": { - "relative_path": "api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html" - } - }, - "version": "", - "Uid": null, - "IsMRef": true, - "Title": "Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax", - "Summary": "

    Consumes G05.1 (high-precision contour / path smoothing) and records\nits modal state. Q1 enables, Q0 disables. The simulation does not alter\nthe tool path — this is a controller-internal interpolation black box.

    \n" - }, { "type": "ManagedReference", "source_relative_path": "api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.yml", @@ -12314,7 +12384,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.NcDiagnosticProgress", - "Summary": null + "Summary": "

    Helper that emits records via an\n sink. Provides one method per\n(, )\npair, each with an optional overload locating\nthe issue in the NC source.

    \n" }, { "type": "ManagedReference", @@ -12356,7 +12426,7 @@ "Uid": null, "IsMRef": true, "Title": "Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax", - "Summary": null + "Summary": "

    Parses parenthesized comments such as (comment text) from the\nremaining unparsed text and emits a section with\nthe () symbol.

    \n" }, { "type": "ManagedReference", @@ -18255,6 +18325,16 @@ }, "version": "" }, + { + "type": "Conceptual", + "source_relative_path": "manual/analysis/spindle-capability.md", + "output": { + ".html": { + "relative_path": "manual/analysis/spindle-capability.html" + } + }, + "version": "" + }, { "type": "Resource", "source_relative_path": "manual/analysis/spindle-power-evaluation-img/Fanuc_Spindle_Power.png", diff --git a/App/wwwroot/HiAPI-docsite/manual/analysis/index.html b/App/wwwroot/HiAPI-docsite/manual/analysis/index.html index f1311843..fa68edf8 100644 --- a/App/wwwroot/HiAPI-docsite/manual/analysis/index.html +++ b/App/wwwroot/HiAPI-docsite/manual/analysis/index.html @@ -107,6 +107,7 @@

    Advanced Topics

    diff --git a/App/wwwroot/HiAPI-docsite/manual/analysis/machinability.html b/App/wwwroot/HiAPI-docsite/manual/analysis/machinability.html index 4199288e..a67cacf3 100644 --- a/App/wwwroot/HiAPI-docsite/manual/analysis/machinability.html +++ b/App/wwwroot/HiAPI-docsite/manual/analysis/machinability.html @@ -88,7 +88,7 @@

    Evaluating Process Machinability

    The machinability time-series chart can be used to evaluate tool breakage risk during machining.

    -

    Tool breakage occurs when any of the following exceeds 100% and persists for longer than one simulation step: Yielding Stress Ratio, Max Spindle Torque Ratio, or Max Spindle Power Ratio. +

    Tool breakage occurs when any of the following exceeds 100% and persists for longer than one simulation step: Yielding Stress Ratio [YieldingStressRatio (API)], Max Spindle Torque Ratio [MaxSpindleTorqueRatio (API)], or Max Spindle Power Ratio [MaxSpindlePowerRatio (API)]. If the value significantly exceeds 100% — roughly speaking, above 200% — tool breakage can occur even without sustained duration.

    Note: The default simulation uses per-revolution milling mode, where one simulation step equals one spindle revolution.

    @@ -96,14 +96,15 @@ If the value significantly exceeds 100% — roughly speaking, above 200% — too

    Yielding Stress Ratio is a percentage indicator with the tool material's breakage force as the denominator. The numerator is the simulation step's absolute force MaxAbsForce_N(API). Compared to using the absolute force value directly as a limit, the ratio incorporates tool material mechanics and more accurately reflects the tool's actual safety margin. The optimization target force OptPreferedForce_N(API) represents the desired MaxAbsForce_N after optimization.

    For small tools, breakage is typically caused by insufficient tool force capacity, and breakage is based on the Yielding Stress Ratio.

    For small-to-medium tools, breakage is typically caused by insufficient spindle performance, and breakage is based on the Max Spindle Torque Ratio or Max Spindle Power Ratio. -When cutting resistance exceeds spindle performance, the machine feed rate remains constant but the spindle speed continuously decreases, causing the feed per tooth to continuously increase, which drives cutting forces to spike until tool breakage or machine stoppage.

    +When cutting resistance exceeds spindle performance, the machine feed rate remains constant but the spindle speed continuously decreases, causing the feed per tooth to continuously increase, which drives cutting forces to spike until tool breakage or machine stoppage. +For the underlying boundary curves and how each ratio's denominator is computed at the current rpm, see Spindle Capability.

    Note

    Tool Breakage Solutions

    Modify the toolpath to reduce cutting width/depth, or use HiNC's optimization feature to adjust feed rates, bringing the Yielding Stress Ratio, Max Spindle Torque Ratio, and Max Spindle Power Ratio below 100%.

    Thermal Plastic Deformation of Cutting Edge

    -

    If the Thermal Yield Ratio exceeds 100%, thermal plastic deformation of the cutting edge occurs, accelerating wear. +

    If the Thermal Yield Ratio [ThermalYieldRatio (API)] exceeds 100%, thermal plastic deformation of the cutting edge occurs, accelerating wear. Unlike the Yielding Stress Ratio, Max Spindle Torque Ratio, and Max Spindle Power Ratio, this is a long-term indicator — exceeding 100% does not cause immediate effects.

    Note
    diff --git a/App/wwwroot/HiAPI-docsite/manual/analysis/spindle-capability.html b/App/wwwroot/HiAPI-docsite/manual/analysis/spindle-capability.html new file mode 100644 index 00000000..a0b0b573 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/manual/analysis/spindle-capability.html @@ -0,0 +1,222 @@ + + + + + Spindle Capability | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    +
    Table of Contents
    + +
    +
    + +
    +
    +
    + +
    +
    + + + +
    + +
    +

    Spindle Capability

    + +

    SpindleCapability (API) describes the energy, torque, power, and thermal envelope of a machine spindle. It is loaded as XML (.SpindleCapability files under Resource/SpindleCapability/) and lives on SpindleCapability (API) as part of the project equipment. This page explains what the model represents physically and how the per-step ratios on a machining step are derived.

    +

    For editing values interactively, see Spindle Capability Page. For empirical validation of the resulting power numbers against Fanuc ServoGuide, see Spindle Power Evaluation.

    +

    Boundary curves: continuous vs instantaneous

    +

    The capability stores two dictionaries keyed by workable duration (in minutes), mapping spindle speed to the maximum power or torque the spindle can deliver for that duration:

    + +

    Two duration keys are special:

    +
      +
    • PositiveInfinity — the continuous boundary. The spindle can run at any (speed, value) point on this curve forever without overheating. Industry usage often calls this the S1 rating.
    • +
    • The smallest finite key (e.g. 15) — the instantaneous boundary. The spindle can run at any (speed, value) point on this curve only for that workable duration before the temperature ceiling is reached.
    • +
    +

    A capability typically also has intermediate keys (e.g. 60 minutes) which document the spindle's published rating curve.

    +
    +
    Note
    +

    Why duration-keyed and not just two curves?

    +

    The duration key serves two roles. The contour values give peak load capability (used by the ratio computation, see below). The duration values implicitly encode the thermal time constants (used by the thermal envelope, see further below). One family of curves drives both.

    +
    +

    If GearShiftSpindleSpeed_rpm (API) is set, each contour is treated as two segments split at that speed; only the segment for the current spindle speed is used for interpolation. Outside the segment, interpolation uses nearest-neighbour clamping rather than extrapolation.

    +

    How the four ratios are computed

    +

    For every machining step where the spindle speed changes, SpindleSpeedCache (API) interpolates each of the four contour-based curves at the current spindle speed and stores four scalar boundaries:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Boundary (denominator)Source contour
    MinInsistentRatioSpindleTorqueBoundary_Nmsmallest-key entry of the torque dictionary, interpolated at current rpm
    InfInsistentRatioSpindleTorqueBoundary_Nm-key entry of the torque dictionary, interpolated at current rpm
    MinInsistentRatioSpindlePowerBoundary_Wsmallest-key entry of the power dictionary, interpolated at current rpm
    InfInsistentRatioSpindlePowerBoundary_W-key entry of the power dictionary, interpolated at current rpm
    +

    The four MachiningStep ratios are then divisions:

    +
    +\[ +\begin{aligned} +\text{MaxSpindleTorqueRatio} &= \frac{\text{MaxAxialTorque\_Nm}}{\text{MinInsistentRatioSpindleTorqueBoundary\_Nm}} \\[6pt] +\text{ContinueSpindleTorqueRatio} &= \frac{\text{MaxAxialTorque\_Nm}}{\text{InfInsistentRatioSpindleTorqueBoundary\_Nm}} \\[6pt] +\text{MaxSpindlePowerRatio} &= \frac{\text{inputPower\_W}}{\text{MinInsistentRatioSpindlePowerBoundary\_W}} \\[6pt] +\text{ContinueSpindlePowerRatio} &= \frac{\text{inputPower\_W}}{\text{InfInsistentRatioSpindlePowerBoundary\_W}} +\end{aligned} +\]
    +

    Because the continuous boundary is always lower than (or equal to) the short-duration boundary, the corresponding Continue- ratio is always greater than (or equal to) its Max- counterpart for the same load:

    +
      +
    • A Max- ratio above 100% means the spindle is overdriven instantaneously and will trip thermal protection within the rated short duration. This is the criterion MaxSpindleTorqueRatio (API) and MaxSpindlePowerRatio (API) use to flag tool breakage on Process Machinability.
    • +
    • A Continue- ratio above 100% means the spindle cannot sustain this load forever — short bursts may still be safe. Useful for pacing long operations rather than predicting immediate failure.
    • +
    +

    Input power vs output power

    +

    The power numerator above is input power (energy entering the spindle), not output power (energy reaching the cutting end). They are related by the spindle's energy efficiency:

    +

    \(\text{inputPower\_W} = \frac{\text{AbsAxialPower\_W}}{\text{EnergyEfficiency}}\)

    +

    — where EnergyEfficiency is EnergyEfficiency (API) and AbsAxialPower_W is what the cutting actually demands. The lost fraction \((1 - \text{EnergyEfficiency})\) becomes heat that the thermal envelope has to dissipate.

    +

    Spindle Power Evaluation documents the empirical justification for this conversion against measured Fanuc ServoGuide TCMD data.

    +

    Dry-run idle power

    +

    Even when the cutter is in air, a rotating spindle dissipates power as bearing friction and aerodynamic windage. HiNC models this as a sum of a linear-in-rpm term (bearing friction) and a higher-order term (windage), parameterised by:

    + +

    The friction term dominates at low rpm; the windage term takes over at high rpm. The thermal envelope (next section) uses the larger of the dry-run idle power and the cutting-induced heat, so the spindle keeps warming up even during air moves.

    +

    Thermal envelope

    +

    The same SpindleCapability also drives a thermal model of the spindle body. You do not set heat capacity or convection directly — the thermal model is auto-calibrated from your existing inputs.

    +
      +
    • The continuous (-key) curve plus WorkingTemperatureUpperBoundary_C (API) together determine how fast the spindle dumps heat at steady state. Physically: the continuous rating is, by definition, the load the spindle can hold forever without exceeding the working-temperature ceiling — so HiNC infers the steady-state heat-loss capacity from this constraint.
    • +
    • The shortest-duration curve plus its duration key together determine how much heat the spindle can absorb before reaching the ceiling. Physically: the short-duration rating is, by definition, the load that brings the spindle to the ceiling exactly within that workable time — so HiNC infers the body's effective thermal mass from this constraint.
    • +
    +

    What this means for you: refining the contour data (more accurate (speed, power/torque) points, better matched duration keys) automatically improves both load-capacity prediction and thermal-response speed. There is no separate thermal parameter to tune.

    +

    Per-step temperature outputs

    +

    At each step the body temperature evolves under whatever heat input is currently applied (cutting losses or dry-run, whichever is larger), approaching the steady-state temperature implied by that heat input. The two outputs published per step are:

    +
      +
    • SpindleTemperature_C (API) — current body temperature
    • +
    • SpindleWorkingTemperatureRatio (API) — body temperature normalised so that ambient is 0 and the working-temperature ceiling is 1. A value approaching 1.0 means the spindle is near its thermal limit.
    • +
    +
    +
    Note
    +

    SpindleWorkingTemperatureRatio describes the spindle housing as a whole. It is not the same as the cutter-edge thermal failure tracked by ThermalYieldRatio in Process Machinability, which is a localized cutting-edge phenomenon.

    +
    +

    Editing and file IO

    +

    Capabilities are persisted as XML (.SpindleCapability files). Three pre-built spindles ship in Resource/SpindleCapability/:

    +
      +
    • FANUC-aT12-12000i.SpindleCapability
    • +
    • TMV-720A-STD-8000RPM.SpindleCapability
    • +
    • VP-8--Fanuc-10000RPM.SpindleCapability
    • +
    +

    To edit values interactively, see Spindle Capability Page in the Quasar webservice. The desktop WPF app does not yet have a dedicated editor; load capabilities through the equipment's ObjectManagementMenuButton instead.

    + + + +
    + +
    +
    + + + +
    + +
    + +
    +
    + +
    + + + + diff --git a/App/wwwroot/HiAPI-docsite/manual/analysis/spindle-power-evaluation.html b/App/wwwroot/HiAPI-docsite/manual/analysis/spindle-power-evaluation.html index 7f79bba0..6272531d 100644 --- a/App/wwwroot/HiAPI-docsite/manual/analysis/spindle-power-evaluation.html +++ b/App/wwwroot/HiAPI-docsite/manual/analysis/spindle-power-evaluation.html @@ -87,6 +87,7 @@

    Spindle Power Evaluation

    +

    For the spindle capability model itself (boundary curves, thermal envelope, and the four torque/power ratios), see Spindle Capability. This page focuses on empirical validation of HiNC's spindle-power evaluation against measured data.

    The role of spindle power for energy cost of Milling

    The energy distribution can be referenced from Heidenhain's published measurements1. The total machine power splits into two main flows:

      diff --git a/App/wwwroot/HiAPI-docsite/manual/analysis/toc.html b/App/wwwroot/HiAPI-docsite/manual/analysis/toc.html index e18d7060..d5f37a5a 100644 --- a/App/wwwroot/HiAPI-docsite/manual/analysis/toc.html +++ b/App/wwwroot/HiAPI-docsite/manual/analysis/toc.html @@ -39,6 +39,9 @@
    • Smart Holder Training
    • +
    • + Spindle Capability +
    • Spindle Power Evaluation
    • diff --git a/App/wwwroot/HiAPI-docsite/manual/analysis/toc.json b/App/wwwroot/HiAPI-docsite/manual/analysis/toc.json index e3ae1bcd..46b9b51c 100644 --- a/App/wwwroot/HiAPI-docsite/manual/analysis/toc.json +++ b/App/wwwroot/HiAPI-docsite/manual/analysis/toc.json @@ -1,2 +1,2 @@ -{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Milling Physics Coordinates","href":"milling-physics-coordinates.html","topicHref":"milling-physics-coordinates.html"},{"name":"Process Machinability","href":"machinability.html","topicHref":"machinability.html"},{"name":"Tool Life & Wear","href":"wear.html","topicHref":"wear.html"},{"name":"Relief Face Avoidance","href":"relief-face-avoidance.html","topicHref":"relief-face-avoidance.html"},{"name":"Radial Angle Measurement","href":"radial-angle-measurement.html","topicHref":"radial-angle-measurement.html"},{"name":"CPU Usage in Simulation","href":"cpu-usage.html","topicHref":"cpu-usage.html"},{"name":"Corner Feedrate Behavior","href":"corner-behavior.html","topicHref":"corner-behavior.html"},{"name":"Smart Holder Training","href":"smart-holder-training.html","topicHref":"smart-holder-training.html"},{"name":"Spindle Power Evaluation","href":"spindle-power-evaluation.html","topicHref":"spindle-power-evaluation.html"},{"name":"NC Optimization Principles","href":"nc-optimization-principles.html","topicHref":"nc-optimization-principles.html"}]} +{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Milling Physics Coordinates","href":"milling-physics-coordinates.html","topicHref":"milling-physics-coordinates.html"},{"name":"Process Machinability","href":"machinability.html","topicHref":"machinability.html"},{"name":"Tool Life & Wear","href":"wear.html","topicHref":"wear.html"},{"name":"Relief Face Avoidance","href":"relief-face-avoidance.html","topicHref":"relief-face-avoidance.html"},{"name":"Radial Angle Measurement","href":"radial-angle-measurement.html","topicHref":"radial-angle-measurement.html"},{"name":"CPU Usage in Simulation","href":"cpu-usage.html","topicHref":"cpu-usage.html"},{"name":"Corner Feedrate Behavior","href":"corner-behavior.html","topicHref":"corner-behavior.html"},{"name":"Smart Holder Training","href":"smart-holder-training.html","topicHref":"smart-holder-training.html"},{"name":"Spindle Capability","href":"spindle-capability.html","topicHref":"spindle-capability.html"},{"name":"Spindle Power Evaluation","href":"spindle-power-evaluation.html","topicHref":"spindle-power-evaluation.html"},{"name":"NC Optimization Principles","href":"nc-optimization-principles.html","topicHref":"nc-optimization-principles.html"}]} diff --git a/App/wwwroot/HiAPI-docsite/xrefmap.yml b/App/wwwroot/HiAPI-docsite/xrefmap.yml index 42dc49a5..63aab57d 100644 --- a/App/wwwroot/HiAPI-docsite/xrefmap.yml +++ b/App/wwwroot/HiAPI-docsite/xrefmap.yml @@ -1162,6 +1162,28 @@ references: commentId: T:Hi.Cbtr.CubeTree.diff_response_func_t fullName: Hi.Cbtr.CubeTree.diff_response_func_t nameWithType: CubeTree.diff_response_func_t +- uid: Hi.Cbtr.CubeTreeExportExtensions + name: CubeTreeExportExtensions + href: api/Hi.Cbtr.CubeTreeExportExtensions.html + commentId: T:Hi.Cbtr.CubeTreeExportExtensions + fullName: Hi.Cbtr.CubeTreeExportExtensions + nameWithType: CubeTreeExportExtensions +- uid: Hi.Cbtr.CubeTreeExportExtensions.ToStl(Hi.Cbtr.CubeTree,System.Double) + name: ToStl(CubeTree, double) + href: api/Hi.Cbtr.CubeTreeExportExtensions.html#Hi_Cbtr_CubeTreeExportExtensions_ToStl_Hi_Cbtr_CubeTree_System_Double_ + commentId: M:Hi.Cbtr.CubeTreeExportExtensions.ToStl(Hi.Cbtr.CubeTree,System.Double) + name.vb: ToStl(CubeTree, Double) + fullName: Hi.Cbtr.CubeTreeExportExtensions.ToStl(Hi.Cbtr.CubeTree, double) + fullName.vb: Hi.Cbtr.CubeTreeExportExtensions.ToStl(Hi.Cbtr.CubeTree, Double) + nameWithType: CubeTreeExportExtensions.ToStl(CubeTree, double) + nameWithType.vb: CubeTreeExportExtensions.ToStl(CubeTree, Double) +- uid: Hi.Cbtr.CubeTreeExportExtensions.ToStl* + name: ToStl + href: api/Hi.Cbtr.CubeTreeExportExtensions.html#Hi_Cbtr_CubeTreeExportExtensions_ToStl_ + commentId: Overload:Hi.Cbtr.CubeTreeExportExtensions.ToStl + isSpec: "True" + fullName: Hi.Cbtr.CubeTreeExportExtensions.ToStl + nameWithType: CubeTreeExportExtensions.ToStl - uid: Hi.Cbtr.CubeTreeFile name: CubeTreeFile href: api/Hi.Cbtr.CubeTreeFile.html @@ -68782,6 +68804,28 @@ references: isSpec: "True" fullName: Hi.Geom.NativeTopoStlfr.TopoStlPtr nameWithType: NativeTopoStlfr.TopoStlPtr +- uid: Hi.Geom.ObjUtil + name: ObjUtil + href: api/Hi.Geom.ObjUtil.html + commentId: T:Hi.Geom.ObjUtil + fullName: Hi.Geom.ObjUtil + nameWithType: ObjUtil +- uid: Hi.Geom.ObjUtil.WriteText(System.String,System.Double[]) + name: WriteText(string, double[]) + href: api/Hi.Geom.ObjUtil.html#Hi_Geom_ObjUtil_WriteText_System_String_System_Double___ + commentId: M:Hi.Geom.ObjUtil.WriteText(System.String,System.Double[]) + name.vb: WriteText(String, Double()) + fullName: Hi.Geom.ObjUtil.WriteText(string, double[]) + fullName.vb: Hi.Geom.ObjUtil.WriteText(String, Double()) + nameWithType: ObjUtil.WriteText(string, double[]) + nameWithType.vb: ObjUtil.WriteText(String, Double()) +- uid: Hi.Geom.ObjUtil.WriteText* + name: WriteText + href: api/Hi.Geom.ObjUtil.html#Hi_Geom_ObjUtil_WriteText_ + commentId: Overload:Hi.Geom.ObjUtil.WriteText + isSpec: "True" + fullName: Hi.Geom.ObjUtil.WriteText + nameWithType: ObjUtil.WriteText - uid: Hi.Geom.PairZr name: PairZr href: api/Hi.Geom.PairZr.html @@ -69298,6 +69342,28 @@ references: isSpec: "True" fullName: Hi.Geom.PairZrUtil.GetZrList nameWithType: PairZrUtil.GetZrList +- uid: Hi.Geom.PlyUtil + name: PlyUtil + href: api/Hi.Geom.PlyUtil.html + commentId: T:Hi.Geom.PlyUtil + fullName: Hi.Geom.PlyUtil + nameWithType: PlyUtil +- uid: Hi.Geom.PlyUtil.WriteBin(System.String,System.Double[]) + name: WriteBin(string, double[]) + href: api/Hi.Geom.PlyUtil.html#Hi_Geom_PlyUtil_WriteBin_System_String_System_Double___ + commentId: M:Hi.Geom.PlyUtil.WriteBin(System.String,System.Double[]) + name.vb: WriteBin(String, Double()) + fullName: Hi.Geom.PlyUtil.WriteBin(string, double[]) + fullName.vb: Hi.Geom.PlyUtil.WriteBin(String, Double()) + nameWithType: PlyUtil.WriteBin(string, double[]) + nameWithType.vb: PlyUtil.WriteBin(String, Double()) +- uid: Hi.Geom.PlyUtil.WriteBin* + name: WriteBin + href: api/Hi.Geom.PlyUtil.html#Hi_Geom_PlyUtil_WriteBin_ + commentId: Overload:Hi.Geom.PlyUtil.WriteBin + isSpec: "True" + fullName: Hi.Geom.PlyUtil.WriteBin + nameWithType: PlyUtil.WriteBin - uid: Hi.Geom.Polar3d name: Polar3d href: api/Hi.Geom.Polar3d.html @@ -83637,6 +83703,22 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.MachiningActRunner.WaitAll nameWithType: MachiningActRunner.WaitAll +- uid: Hi.MachiningProcs.MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing(Hi.MachiningProcs.MachiningSession,System.Nullable{System.Int32}) + name: WarnIfCurrentToolFluteMaterialMissing(MachiningSession, int?) + href: api/Hi.MachiningProcs.MachiningActRunner.html#Hi_MachiningProcs_MachiningActRunner_WarnIfCurrentToolFluteMaterialMissing_Hi_MachiningProcs_MachiningSession_System_Nullable_System_Int32__ + commentId: M:Hi.MachiningProcs.MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing(Hi.MachiningProcs.MachiningSession,System.Nullable{System.Int32}) + name.vb: WarnIfCurrentToolFluteMaterialMissing(MachiningSession, Integer?) + fullName: Hi.MachiningProcs.MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing(Hi.MachiningProcs.MachiningSession, int?) + fullName.vb: Hi.MachiningProcs.MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing(Hi.MachiningProcs.MachiningSession, Integer?) + nameWithType: MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing(MachiningSession, int?) + nameWithType.vb: MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing(MachiningSession, Integer?) +- uid: Hi.MachiningProcs.MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing* + name: WarnIfCurrentToolFluteMaterialMissing + href: api/Hi.MachiningProcs.MachiningActRunner.html#Hi_MachiningProcs_MachiningActRunner_WarnIfCurrentToolFluteMaterialMissing_ + commentId: Overload:Hi.MachiningProcs.MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing + isSpec: "True" + fullName: Hi.MachiningProcs.MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing + nameWithType: MachiningActRunner.WarnIfCurrentToolFluteMaterialMissing - uid: Hi.MachiningProcs.MachiningActRunner.XyzabcChain name: XyzabcChain href: api/Hi.MachiningProcs.MachiningActRunner.html#Hi_MachiningProcs_MachiningActRunner_XyzabcChain @@ -84729,6 +84811,19 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.MachiningSession.UpdateNcOptOptionMapIfNeeded nameWithType: MachiningSession.UpdateNcOptOptionMapIfNeeded +- uid: Hi.MachiningProcs.MachiningSession.WarnedFluteMaterialMissingTools + name: WarnedFluteMaterialMissingTools + href: api/Hi.MachiningProcs.MachiningSession.html#Hi_MachiningProcs_MachiningSession_WarnedFluteMaterialMissingTools + commentId: P:Hi.MachiningProcs.MachiningSession.WarnedFluteMaterialMissingTools + fullName: Hi.MachiningProcs.MachiningSession.WarnedFluteMaterialMissingTools + nameWithType: MachiningSession.WarnedFluteMaterialMissingTools +- uid: Hi.MachiningProcs.MachiningSession.WarnedFluteMaterialMissingTools* + name: WarnedFluteMaterialMissingTools + href: api/Hi.MachiningProcs.MachiningSession.html#Hi_MachiningProcs_MachiningSession_WarnedFluteMaterialMissingTools_ + commentId: Overload:Hi.MachiningProcs.MachiningSession.WarnedFluteMaterialMissingTools + isSpec: "True" + fullName: Hi.MachiningProcs.MachiningSession.WarnedFluteMaterialMissingTools + nameWithType: MachiningSession.WarnedFluteMaterialMissingTools - uid: Hi.MachiningProcs.MillingUtil name: MillingUtil href: api/Hi.MachiningProcs.MillingUtil.html @@ -86878,6 +86973,38 @@ references: isSpec: "True" fullName: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeom nameWithType: RuntimeApi.WriteRuntimeGeom +- uid: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToObj(System.String,System.Double) + name: WriteRuntimeGeomToObj(string, double) + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_WriteRuntimeGeomToObj_System_String_System_Double_ + commentId: M:Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToObj(System.String,System.Double) + name.vb: WriteRuntimeGeomToObj(String, Double) + fullName: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToObj(string, double) + fullName.vb: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToObj(String, Double) + nameWithType: RuntimeApi.WriteRuntimeGeomToObj(string, double) + nameWithType.vb: RuntimeApi.WriteRuntimeGeomToObj(String, Double) +- uid: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToObj* + name: WriteRuntimeGeomToObj + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_WriteRuntimeGeomToObj_ + commentId: Overload:Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToObj + isSpec: "True" + fullName: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToObj + nameWithType: RuntimeApi.WriteRuntimeGeomToObj +- uid: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToPly(System.String,System.Double) + name: WriteRuntimeGeomToPly(string, double) + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_WriteRuntimeGeomToPly_System_String_System_Double_ + commentId: M:Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToPly(System.String,System.Double) + name.vb: WriteRuntimeGeomToPly(String, Double) + fullName: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToPly(string, double) + fullName.vb: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToPly(String, Double) + nameWithType: RuntimeApi.WriteRuntimeGeomToPly(string, double) + nameWithType.vb: RuntimeApi.WriteRuntimeGeomToPly(String, Double) +- uid: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToPly* + name: WriteRuntimeGeomToPly + href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_WriteRuntimeGeomToPly_ + commentId: Overload:Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToPly + isSpec: "True" + fullName: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToPly + nameWithType: RuntimeApi.WriteRuntimeGeomToPly - uid: Hi.MachiningProcs.RuntimeApi.WriteRuntimeGeomToStl(System.String,System.Double) name: WriteRuntimeGeomToStl(string, double) href: api/Hi.MachiningProcs.RuntimeApi.html#Hi_MachiningProcs_RuntimeApi_WriteRuntimeGeomToStl_System_String_System_Double_ @@ -125264,6 +125391,25 @@ references: commentId: F:Hi.NcParsers.Keywords.Fanuc.FanucKeywords.G43p4 fullName: Hi.NcParsers.Keywords.Fanuc.FanucKeywords.G43p4 nameWithType: FanucKeywords.G43p4 +- uid: Hi.NcParsers.Keywords.FanucPathSmoothing + name: FanucPathSmoothing + href: api/Hi.NcParsers.Keywords.FanucPathSmoothing.html + commentId: T:Hi.NcParsers.Keywords.FanucPathSmoothing + fullName: Hi.NcParsers.Keywords.FanucPathSmoothing + nameWithType: FanucPathSmoothing +- uid: Hi.NcParsers.Keywords.FanucPathSmoothing.Level + name: Level + href: api/Hi.NcParsers.Keywords.FanucPathSmoothing.html#Hi_NcParsers_Keywords_FanucPathSmoothing_Level + commentId: P:Hi.NcParsers.Keywords.FanucPathSmoothing.Level + fullName: Hi.NcParsers.Keywords.FanucPathSmoothing.Level + nameWithType: FanucPathSmoothing.Level +- uid: Hi.NcParsers.Keywords.FanucPathSmoothing.Level* + name: Level + href: api/Hi.NcParsers.Keywords.FanucPathSmoothing.html#Hi_NcParsers_Keywords_FanucPathSmoothing_Level_ + commentId: Overload:Hi.NcParsers.Keywords.FanucPathSmoothing.Level + isSpec: "True" + fullName: Hi.NcParsers.Keywords.FanucPathSmoothing.Level + nameWithType: FanucPathSmoothing.Level - uid: Hi.NcParsers.Keywords.Feedrate name: Feedrate href: api/Hi.NcParsers.Keywords.Feedrate.html @@ -125943,6 +126089,25 @@ references: isSpec: "True" fullName: Hi.NcParsers.Keywords.IDwellDef.Time nameWithType: IDwellDef.Time +- uid: Hi.NcParsers.Keywords.IFanucPathSmoothingDef + name: IFanucPathSmoothingDef + href: api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html + commentId: T:Hi.NcParsers.Keywords.IFanucPathSmoothingDef + fullName: Hi.NcParsers.Keywords.IFanucPathSmoothingDef + nameWithType: IFanucPathSmoothingDef +- uid: Hi.NcParsers.Keywords.IFanucPathSmoothingDef.Level + name: Level + href: api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html#Hi_NcParsers_Keywords_IFanucPathSmoothingDef_Level + commentId: P:Hi.NcParsers.Keywords.IFanucPathSmoothingDef.Level + fullName: Hi.NcParsers.Keywords.IFanucPathSmoothingDef.Level + nameWithType: IFanucPathSmoothingDef.Level +- uid: Hi.NcParsers.Keywords.IFanucPathSmoothingDef.Level* + name: Level + href: api/Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html#Hi_NcParsers_Keywords_IFanucPathSmoothingDef_Level_ + commentId: Overload:Hi.NcParsers.Keywords.IFanucPathSmoothingDef.Level + isSpec: "True" + fullName: Hi.NcParsers.Keywords.IFanucPathSmoothingDef.Level + nameWithType: IFanucPathSmoothingDef.Level - uid: Hi.NcParsers.Keywords.IFeedrateDef name: IFeedrateDef href: api/Hi.NcParsers.Keywords.IFeedrateDef.html @@ -128341,6 +128506,98 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.Evaluation.NcVariableExpr.Key nameWithType: NcVariableExpr.Key +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax + name: FanucPathSmoothingSyntax + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html + commentId: T:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax + nameWithType: FanucPathSmoothingSyntax +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.#ctor + name: FanucPathSmoothingSyntax() + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax__ctor + commentId: M:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.#ctor + name.vb: New() + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.FanucPathSmoothingSyntax() + fullName.vb: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.New() + nameWithType: FanucPathSmoothingSyntax.FanucPathSmoothingSyntax() + nameWithType.vb: FanucPathSmoothingSyntax.New() +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.#ctor(System.Xml.Linq.XElement) + name: FanucPathSmoothingSyntax(XElement) + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax__ctor_System_Xml_Linq_XElement_ + commentId: M:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.#ctor(System.Xml.Linq.XElement) + name.vb: New(XElement) + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.FanucPathSmoothingSyntax(System.Xml.Linq.XElement) + fullName.vb: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.New(System.Xml.Linq.XElement) + nameWithType: FanucPathSmoothingSyntax.FanucPathSmoothingSyntax(XElement) + nameWithType.vb: FanucPathSmoothingSyntax.New(XElement) +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.#ctor* + name: FanucPathSmoothingSyntax + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax__ctor_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.FanucPathSmoothingSyntax + fullName.vb: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.New + nameWithType: FanucPathSmoothingSyntax.FanucPathSmoothingSyntax + nameWithType.vb: FanucPathSmoothingSyntax.New +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ + commentId: M:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) + name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) + fullName.vb: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) + nameWithType: FanucPathSmoothingSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) + nameWithType.vb: FanucPathSmoothingSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Build* + name: Build + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_Build_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Build + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Build + nameWithType: FanucPathSmoothingSyntax.Build +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name: MakeXmlSource(string, string, bool) + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ + commentId: M:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) + name.vb: MakeXmlSource(String, String, Boolean) + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.MakeXmlSource(string, string, bool) + fullName.vb: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.MakeXmlSource(String, String, Boolean) + nameWithType: FanucPathSmoothingSyntax.MakeXmlSource(string, string, bool) + nameWithType.vb: FanucPathSmoothingSyntax.MakeXmlSource(String, String, Boolean) +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.MakeXmlSource* + name: MakeXmlSource + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_MakeXmlSource_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.MakeXmlSource + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.MakeXmlSource + nameWithType: FanucPathSmoothingSyntax.MakeXmlSource +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Name + name: Name + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_Name + commentId: P:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Name + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Name + nameWithType: FanucPathSmoothingSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Name* + name: Name + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_Name_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Name + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.Name + nameWithType: FanucPathSmoothingSyntax.Name +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.XName + name: XName + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_XName + commentId: P:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.XName + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.XName + nameWithType: FanucPathSmoothingSyntax.XName +- uid: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.XName* + name: XName + href: api/Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_FanucPathSmoothingSyntax_XName_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.XName + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.XName + nameWithType: FanucPathSmoothingSyntax.XName - uid: Hi.NcParsers.LogicSyntaxs.FeedrateSyntax name: FeedrateSyntax href: api/Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html @@ -129859,98 +130116,6 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.McXyzSyntax.XName nameWithType: McXyzSyntax.XName -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax - name: PathSmoothingSyntax - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html - commentId: T:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax - nameWithType: PathSmoothingSyntax -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.#ctor - name: PathSmoothingSyntax() - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax__ctor - commentId: M:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.#ctor - name.vb: New() - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.PathSmoothingSyntax() - fullName.vb: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.New() - nameWithType: PathSmoothingSyntax.PathSmoothingSyntax() - nameWithType.vb: PathSmoothingSyntax.New() -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.#ctor(System.Xml.Linq.XElement) - name: PathSmoothingSyntax(XElement) - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax__ctor_System_Xml_Linq_XElement_ - commentId: M:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.#ctor(System.Xml.Linq.XElement) - name.vb: New(XElement) - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.PathSmoothingSyntax(System.Xml.Linq.XElement) - fullName.vb: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.New(System.Xml.Linq.XElement) - nameWithType: PathSmoothingSyntax.PathSmoothingSyntax(XElement) - nameWithType.vb: PathSmoothingSyntax.New(XElement) -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.#ctor* - name: PathSmoothingSyntax - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax__ctor_ - commentId: Overload:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.#ctor - isSpec: "True" - name.vb: New - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.PathSmoothingSyntax - fullName.vb: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.New - nameWithType: PathSmoothingSyntax.PathSmoothingSyntax - nameWithType.vb: PathSmoothingSyntax.New -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) - name: Build(LazyLinkedListNode, List, NcDiagnosticProgress) - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_ - commentId: M:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress) - name.vb: Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode, System.Collections.Generic.List, Hi.NcParsers.NcDiagnosticProgress) - fullName.vb: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency), Hi.NcParsers.NcDiagnosticProgress) - nameWithType: PathSmoothingSyntax.Build(LazyLinkedListNode, List, NcDiagnosticProgress) - nameWithType.vb: PathSmoothingSyntax.Build(LazyLinkedListNode(Of SyntaxPiece), List(Of INcDependency), NcDiagnosticProgress) -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Build* - name: Build - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_Build_ - commentId: Overload:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Build - isSpec: "True" - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Build - nameWithType: PathSmoothingSyntax.Build -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) - name: MakeXmlSource(string, string, bool) - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_MakeXmlSource_System_String_System_String_System_Boolean_ - commentId: M:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.MakeXmlSource(System.String,System.String,System.Boolean) - name.vb: MakeXmlSource(String, String, Boolean) - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.MakeXmlSource(string, string, bool) - fullName.vb: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.MakeXmlSource(String, String, Boolean) - nameWithType: PathSmoothingSyntax.MakeXmlSource(string, string, bool) - nameWithType.vb: PathSmoothingSyntax.MakeXmlSource(String, String, Boolean) -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.MakeXmlSource* - name: MakeXmlSource - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_MakeXmlSource_ - commentId: Overload:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.MakeXmlSource - isSpec: "True" - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.MakeXmlSource - nameWithType: PathSmoothingSyntax.MakeXmlSource -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Name - name: Name - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_Name - commentId: P:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Name - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Name - nameWithType: PathSmoothingSyntax.Name -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Name* - name: Name - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_Name_ - commentId: Overload:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Name - isSpec: "True" - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.Name - nameWithType: PathSmoothingSyntax.Name -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.XName - name: XName - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_XName - commentId: P:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.XName - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.XName - nameWithType: PathSmoothingSyntax.XName -- uid: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.XName* - name: XName - href: api/Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.html#Hi_NcParsers_LogicSyntaxs_PathSmoothingSyntax_XName_ - commentId: Overload:Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.XName - isSpec: "True" - fullName: Hi.NcParsers.LogicSyntaxs.PathSmoothingSyntax.XName - nameWithType: PathSmoothingSyntax.XName - uid: Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax name: PeckDrillingCycleSyntax href: api/Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html diff --git a/App/zh-Hans/HiMech.resources.dll b/App/zh-Hans/HiMech.resources.dll index 62bc589da4b74a2c146f83bdbb9f6d9c2e797551..1ca5339bbb2216c40e96ad7ad87d5a30e2ac60d0 100644 GIT binary patch delta 230 zcmZq3Xvmn*!Q!%+`Rc|VCuYWJo6j>VG6_r&nlx9PF~_wrf9Gap@n!v+*fJTdObzr5 z7#K_$84Qf|4D}364YX4&4HFH_3=%C<(vp)CQw&Tj4H8W(%@fT`l9Ei#Of1q&lMGW* z(o#1sW`C{1IgNplfti7UVcO>DI?tJyO&JU}H|p0ih5{K3+6<`-mJEgri9og)5GMk8 zDGX^0$v~J0WEn7+07XFJAle*An*mu#KxhhPSpe0V0(pi&wIF?|lY;STZjzj8W@wOTnVMo`0fL5!CT7W& zn-{acR^gn=z{tSNz`!td^K_l(Ow1+>mYW;(YZ*g<3 zm;u@5KrsV`M4-4i5GOOF0!0nMB9=gQ3Q(N|92 diff --git a/App/zh-Hans/HiNc.resources.dll b/App/zh-Hans/HiNc.resources.dll index f7ca2617c784a620043851edddc1c8e66f5ba5e8..ca68dc71b20ba15b3ab8986440f9a15f0004f875 100644 GIT binary patch delta 223 zcmZorX;7Ka!E!&Au&}J}Tuw+PNNMkT%uwXC;Vp9e~ zphyZsDuW3_GJ`Qg5>Uhv$Tnaw0?QZyRVM>wL3Aomp9PRk0jfv>(nbtMlOOY1f{f>T G%nShE8Z~kN delta 223 zcmZorX;7Ka!BQMEvuk6I6EowA&F7f~nFO5qRCXM`XX!Lar9d>|JlmAXA6R!KU3@Xs20PBqthKT9{gxnt1sB%cD*V>$UTuO-NMzQ@b} Do&Yq! diff --git a/App/zh-Hant/HiGeom.resources.dll b/App/zh-Hant/HiGeom.resources.dll index e55e5c4991a0a037de8a131b78391193051f5f96..f925cfdc3219b5cda27ec5c1acacb5890d4c7620 100644 GIT binary patch delta 232 zcmW-Xu}T9$5QhKF8N?uR78VwE=>qG{&fRUc6$N`AK$f}78(1fDO$rM!g%2R8AQrM% z`T~O3*!dz>>L?#G%=iDZ7%#?`%eAF_xqrGiC`_N!-y=4}$_gpRY$d z14H?7b8b!u69hzbx*K?9iWUL_D>L<4&HYc%rqd*CE zfx(oK!N6G0P|wiVK-(}W#oR2-AT>47B-t!2%{;|2&B)Ru)i^QH(#Xgl#XQl{&>$%- z)nKzedpt8|69XdyGXn!d)8^@1qD+hio7eKxGX@(lXfqfxBr&8gm@}9$q%jyUqyk|g zg9$@2n4bm|PhqeG$`}Dj6QGJ@LwkIlTB*fJTdOf2;b z7#K_$84Qf|4D}36EVa{;ER9Vp4NQ%a%`DB04H8YvO_Ed13=I-3Q&WsAK+rJJ#4Ooz z^J4bbDx6ap7#Wxu7#OB*p04wpiP?m~a&x18En_HC}zNr2oyI5;$((Ypr|2O#1hC(0jjfrV?(eyGoUKV$-#!^U@LkJio>z-H#(nPmPpf>u_ZV0L!)0v5Ju3>GN@5d?3rO+c0u zR>=)=h@3<8Pm0I)c<=rH)K2Z<{p9N@%)aN7Of~H;TX*`~ztzQWyuDvP_{aJ1b+i2F z{xIhna0Ra!&>U*#$KDyPl8r^_*lIFNAtnl`_Mzf35Vf<@v)*|Fg$zK`eqO#Q z#qHhIi+W}Zpuq^J;ovbAIT%SQBv?cgC?#R>8gy(()=}C6liYb>C5uu>pymFW5ASdG F**}l_HU|Iz delta 223 zcmZoLX)u}4!IB{@cY0%w6EowA&F7i7G6_81zcTE+K)vTa-L90Gk6uonJcVtirG=gW z1A{3egMqQ0p`M|cg?5^yMRKB%rG=@5xoMJNT4IWciKTg>saa~Wg++=hFTYGq`!*eokj%ouFJpv{oRV98*?kj#+CU<78F0(s^P zrVL38hCsPQh7<-9AhZOEB?3jw7*c_1Er1Xto(vQ>VlW0mkbDYIkLBdYqLv`z#U3*Q E06+LPqW}N^